분류 전체보기
-
[자료구조] 해시 테이블(Hash Table)Data Structure 2023. 9. 24. 14:43
해시 테이블(Hash Table) 해시 테이블은 key, value로 데이터를 저장하는 자료 구조입니다. 해시 테이블은 내부적으로 버킷(배열)을 사용하여 데이터를 저장하는데 각 key에 해시 함수를 적용하여 버킷의 고유한 index를 생성하고 이 index를 활용하여 값을 저장, 검색할 수 있습니다. value가 저장되는 장소를 버킷 혹은 슬롯이라고 명칭합니다. key에 해시 함수를 적용해 바로 버킷에 도달할 수 있어 시간복잡도는 O(1)입니다. 해시 충돌 해시 함수에는 문제점이 하나 존재하는데 해시 함수는 입력 값의 길이에 상관없이 고정된 길이의 값을 출력하기 때문에 입력 값이 다르더라도 같은 결과 값이 나오는 케이스가 발생합니다. 이를 해시 충돌(Hash collision)이라고 명칭합니다. 이를 해..
-
동기 / 비동기, 블로킹 / 논블로킹DEV 2023. 9. 23. 19:02
동기와 비동기 - 동기(Synchronous): 요청한 작업을 완료 여부에 따라서 작업을 처리 - 비동기(Asynchronous): 요청한 작업을 완료 여부를 따지지 않고 작업을 처리 A, B, C라는 3개의 작업이 실행될 때 동기는 순차적으로 A -> B -> C 순으로 처리가 되지만 비동기는 순서가 보장되지 않고 무작위로 작업이 수행됩니다. (ex A -> C ->B or C -> B -> A ....) // 동기 console.log("A"); console.log("B"); console.log("C"); // 결과값: A B C // 비동기 fetch("https://google.com").then((response) => console.log("A"); fetch("https://google...
-
[Typescript] any, unknown, never 차이JavaScript/TypeScript 2023. 9. 20. 13:48
any 타입스크립트에서 any는 어떠한 타입이든 허용하는 타입입니다. 타입스크립트는 any 타입에 대해서 엄격하게 체크하지 않기 때문에 모든 타입의 연산을 적용할 수 있습니다. 그로인해 문제가 발생할 수 있는 코드도 컴파일 시 에러가 검출되지 않습니다. 아래 예시 코드도 컴파일 시에는 문제가 발생하진 않지만 런타임 환경에서 사이드 이펙트가 발생할 수 있습니다. const foo: any = 10; console.log(foo.length); // undefined unknown unknown은 타입스크립트의 Top-Type으로 타입스크립트에서 존재하는 모든 타입을 할당할 수 있습니다. 하지만 any와의 차이점은 모든 타입의 공통적인 연산만 수행할 수 있다는 점입니다. const foo: any = 10;..
-
[Javascript] 렉시컬 환경, 클로저JavaScript 2023. 9. 17. 17:12
렉시컬 환경 (Lexical Environment) 렉시컬 환경은 코드의 block, function, script를 실행하기에 앞서 생성되는 특별한 객체로 실행할 스코프 범위 안에 있는 변수와 함수를 프로퍼티로 저장하는 객체입니다. 작동 방식 전체 스크립트와 관련이 있는 렉시컬 환경은 글로벌 렉시컬 환경입니다. 전역 코드가 시작되면 렉시컬 환경 객체가 만들어지고 코드를 실행하기 앞서 선언되어 있는 변수와 함수를 글로벌 렉시컬 환경 레코드에 저장합니다. 이때 저장 방식이 변수 또는 함수 선언 방식에 따라 차이가 있습니다. - 변수가 var로 선언된 경우 var로 선언된 변수는 환경 레코드에 변수 이름을 key로 undefined를 value로 하여 초기화합니다. 이것은 코드를 실행시키기 전에 동작되는 과..
-
Docker NetworkDEV 2023. 9. 17. 16:06
도커 컨에티너는 격리된 환경에서 실행되기 때문에 기본적으로 다른 컨테이너와의 통신이 불가능합니다. 하지만 여러개의 컨테이너를 하나의 도커 네트워크에 연결시키면 서로 통신이 가능해집니다. 도커 네트워크 bridge : 하나의 호스트에서 여러 컨테이너들이 서로 통신할 수 있도록 해줍니다. host : 컨테이너를 호스트와 동일한 네트워크에서 컨테이너를 실행하기 위해서 사용됩니다. overlay : 여러 호스트에 분산되어 실행되는 컨테이너들 간에 통신하기 위해서 사용됩니다.
-
[DB] 인덱스(Index)DB 2023. 9. 16. 19:08
인덱스란? 인덱스(Index)는 데이터베이스의 테이블 검색에 대한 속도를 향상해 주는 구조입니다. 테이블의 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 컬럼의 값과 데이터의 물리적 주소를 key, value 형태로 저장합니다. 인덱스를 효율적으로 사용하기 위해서는 데이터의 양이 많고 중복이 적고 조회가 많거나 Insert, Update, Delete 작업의 빈도가 적은 컬럼에 사용하는 것이 좋습니다. 장점 인덱스를 적용하지 않은 상태라면 풀 테이블 스캔을 해야했지만 인덱스를 사용하면 데이터들이 정렬된 형태를 갖고 있어 빠르게 검색을 할 수 있습니다. 그로 인해 테이블을 검색하는 속도와 성능이 향상되어 시스템의 부하를 줄일 수 있습니다. 단점 인덱스를 항상 정렬된 상..
-
[AWS] ALB, NLB, GWLBNetwork 2023. 9. 16. 18:41
Load Balancer 부하 분산 기술을 제공하주는 기술로 트래픽이 많을 때 여러 대의 서버로 트래픽을 분산하여 서버의 부하를 완화시켜 주는 기술입니다. 부하 분산 뿐만아니라 스케일 아웃에 대한 하나의 엔드포인트를 제공하는데 오토스케일링 그룹을 통해 여러 개의 인스턴스를 생성하고 관리함으로써 고가용성을 확보하고 안정적인 서비스를 운영할 수 있도록 해줍니다. ELB(Elastic load balancing) AWS에서 지원하는 ELB는 VPC에 탑재되어 외부 요청을 받고 VPC내의 리소스에 부하를 분산합니다. ELB는 외부의 요청을 받아들이는 리스너(Listener)와 요청을 분산할 리소스의 집합인 대상 그룹(Target group)으로 구성되며 ELB는 다수의 리스너와 대상 그룹을 가질 수 있습니다. ..