TIL💡(277)
-
[Elastic Stack] 인덱스와 도큐먼트
엘라스틱 서치를 이해하기 위해서는 인덱스와 도큐먼트가 무척 중요하다. 인덱스는 도큐먼트를 저장하는 논리적 구분자이며, 도큐먼트는 실제 데이터를 저장하는 단위다. 일반적으로 엘라스틱을 이용해 시스템을 개발하면 하나의 프로젝트에서 하나의 클러스터를 생성한다. 그리고 클러스터 내부는 데이터 성격에 따라 여러 개의 인덱스를 생성한다. 하나의 클러스터에 편의상 하나의 인덱스만 표현했다. 인덱스 내부에는 JSON 형태로 된 다수의 도큐먼트가 존재하고, 도큐먼트는 복수의 필드들을 갖는다. 인덱스 인덱스는 도큐먼트를 저장하는 논리적 단위로, 관계형 데이터베이스의 테이블과 유사한 개념이다. 하나의 인덱스에 다수의 도큐먼트가 포함되는 구조인데, 동일한 인덱스에 있는 도큐먼트는 동일한 스키마를 갖는다. 그리고 모든 도큐먼트..
2022.11.05 -
[Elastic Stack] 엘라스틱의 구성요소
엘라스틱서치: 분산 검색 엔진 엘라스틱 서치는 검색 엔진이지만 구글이나 네이버같은 포털 서비스와는 다르다. 검색 엔진은 내부적으로 각 도큐먼트를 인덱싱하고 빠르게 검색하는 데 사용하는 기술로 우리는 검색 엔진을 이용해 상위에서 구글, 네이버 같은 서비스를 만들게 된다. 엘라스틱 서치는 모든 레코드를 JSON 도큐먼트 형태로 입력하고 관리하고 있으며, 일반적인 데이터베이스와 마찬가지로, 쿼리한 결과에 대해 일치하는 원본 도큐먼트를 반환하게 된다. 또한 엘라스틱 서치는 텍스트 외에도 숫자, 날짜, IP 주소, 지리 정보 등 다양한 데이터 타입에 대해 최적화되어 있다. 검색 엔진이면서 데이터베이스이기도 하고 텍스트 외에 다양한 데이터 타입을 지원한다는 점이 엘라스틱서치라는 이름과 쉽게 매칭되지 않지만 엘라스틱..
2022.11.05 -
[HTTP] HTTP 쿠키 🍪
HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재요청 시 저장된 데이터를 함께 전송한다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용한다. 이를 사용하면 사용자의 로그인 상태를 유지할 수 있다. 상태가 없는 HTTP 프로토콜에서 상태 정보를 기억시켜주기 때문이다. 쿠키는 주로 세 가지 목적을 위해 사용된다. 세션 관리(Session Management) 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리 개인화(Personalization) 사용자 선호, 테마 등의 세팅 트래킹(Tracking) 사용자 행동을 기록하고 분석하는 용도 과..
2022.10.27 -
[HTTP] HTTP/1.x의 커넥션 관리
HTTP/1.x의 커넥션 유형 단기 커넥션 영속적인 커넥션: Keep-Alive 헤더 이용 → 연속적인 요청 사이에 커넥션 유지하여 새 커넥션을 여는 데 필요한 시간 줄인다. HTTP 파이프라인: 한 단계 더 나악, 응답조차도 기다리지 않고 연속적인 요청을 보내서 네트워크 지연 더욱 줄인다. 영속적인 커넥션 영속적인 커넥션은 얼마간 연결을 열어놓고 여러 요청에 재사용함으로써, 새로운 TCP 핸드셰이크를 하는 비용을 아끼고, TCP 성능 향상 기능을 활용할 수 있다. 커넥션은 영원히 열려있지는 않으며, 유휴 커넥션들은 얼마 후에 닫힌다. Keep-Alive 헤더를 사용해서 연결이 최소한 얼마나 열려있어야 할지를 설정할 수 있다. 물론 영속적인 커넥션을 단점을 가지고 있다. 유휴 상태일 때에도 서버 리소스를..
2022.10.26 -
[HTTP] 전형적인 HTTP 세션
HTTP와 같은 클라이언트-서버 프로토콜에서, 세션은 다음의 세 가지 과정으로 이루어진다. 1. 클라이언트가 TCP 연결을 수립한다.(3 Way Handshake로 할 것 같다.) 2. 클라이언트는 요청을 전송한 뒤 응답을 기다린다. 3. 서버는 요청에 대해 처리하고 그에 대한 응답을 상태 코드 그리고 요청에 부합하는 데이터와 함께 돌려보낸다. HTTP/1.1부터는 세번째 과정 이후 클라이언트가 해당 시점에 또 다른 요청을 보낼 수 있도록 연결을 닫지 않는다. 그러므로 두번째, 세번째 과정이 몇 번에 걸쳐 일어날 수 있다. 요청 전송 첫번째 줄은 파라메터가 따르는 요청 메서드를 포함합니다: The first line contains a request method followed by its paramet..
2022.10.26 -
[HTTP] HTTP/2.0 프레임
HTTP/1.x 메시지는 성능상의 결함을 몇가지 내포하고 있다. 본문은 압축이 되지만 헤더는 압축이 되지 않는다. 연속된 메시지들은 비슷한 헤더 구조를 띄기 마련인데, 그럼에도 불구하고 메시지마다 반복되어 전송되고 있다. 다중전송(multiplexing)이 불가능하다. 서버 하나에 연결을 여러 개 열어야 한다. 적극적인(warm) TCP 연결이 소극적인(cold) TCP 연결보다 효율적인데 말이죠. HTTP/2에서는 추가적인 단계가 도입되었다. HTTP/1.x 메시지를 프레임으로 나누어 스트림에 끼워넣는다. 데이터와 헤더 프레임이 분리되었기 때문에 헤더를 압축할 수 있다. 스트림 여러 개를 하나로 묶을 수 있어서(이러한 과정을 멀티플렉시이라 한다.), 기저에서 수행되는 TCP 연결이 좀 더 효율적이게 된..
2022.10.26