인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있습니다. 일반적으로 B-Tree 구조가 사용되기 때문에 B-Tree 인덱스를 통해 인덱스의 동작 방식에 대해 살펴보도록 하겠습니다. 1. B-Tree 인덱스와 인덱스가 필요한 이유 [ B-Tree 구조란? ] B-Tree(Balanced Tree) 인덱스에 대해 알기 위해서는 먼저 B-Tree 자료구조를 알아야 한다. B-Tree는 자식 2개 만을 갖는 이진 트리(Binary Tree)를 확장하여 N개의 자식을 가질 수 있도록 고안된 것이다. 그리고 좌우 자식 간의 균형이 맞지 않을 경우에는 매우 비효율적이라, 항상 균형을 맞춘다는 의미에서 균형 트리(Balanced Tree)라고..
이번 내용은 RealMySQL 8.0 책을 보면서 추가적으로 공부하여 정리한 내용입니다. 따라서 MySQL의 InnoDB가 아닌 경우에는 다를 수 있으니 참고 부탁드립니다. 1. 프라이머리 키(PK, Primary Key)와 클러스터링 테이블 [ 프라이머리 키(PK, Primary Key)의 특성 ] 데이터베이스, 특히 MySQL에서 프라이머리 키(PK, Primary Key)는 상당히 신중하게 결정되어야 한다. 그 이유는 PK가 레코드의 저장 위치를 결정하기 때문이다. 그래서 PK는 NOT NULL, 유니크 등의 특성을 갖는다. MySQL은 PK를 기준으로 유사한 값들이 함께 조회되는 경우가 많다는 점에서 착안하여, PK가 유사한 레코드들끼리 묶어서 저장한다. 유사한 것들을 묶는 것을 클러스터링이라고 ..
아래의 내용에서는 ELK(Elasticsearch, Logstash, Kibana) 환경 구성에서 파일비트(Filebeat)와 로그스태시(Logstash)에 대한 설정 예시를 다룹니다. 개인적으로 나중에 참고하려고 작성한 내용입니다. 혹시 파일 비트와 로그스태시에 대한 개념이 부족하다면 다음 포스팅을 참고해주세요. 1. 파일비트(Filebeat)를 이용한 카프카(Kafka)로의 로그 전송 예시 Filebeat는 로그를 전송해주는 경량화된 프로세스이다. 현재 서버 구성으로는 Nginx와 Tomcat 로그가 모두 있어서 두 가지를 같이 남기고 있다. 파일비트의 yml 파일은 다음과 같은데, 각각 살펴보도록 하자. filebeat.inputs: - type: log enabled: true paths: - /..
아래의 내용에서는 ELK(Elasticsearch, Logstash, Kibana)에 대해 간단히 살펴보고, 구성 예시를 살펴봅니다. 개인적으로 참고하기 위해 포스팅하는 내용입니다. 1. ELK에 대한 간단한 소개 및 구성 예시 [ ELK 아키텍처 구성 예시 ] [ Filebeat의 역할 ] Filebeat(파일 비트)는 각 서버에 설치되어 로그 파일의 전송을 담당하는 로그 전송 경량화 프로세스이다. 현재 구조에서는 nginx와 tomcat로그가 모두 필요하여 2종류의 로그를 전송하고 있고, 로그의 구분은 필드에 타입을 추가하여 처리한다. 1개의 프로세스를 통해 여러 개의 로그 종류를 전송하는 부분은 Filebeat 설정 쪽에서 자세히 살펴보도록 하자. Filebeat는 크게 로그를 가져올 입력 플러그인..
이번에는 Spring에서 사용되는 ObjectMapper의 동작 방식에 대한 정리해보도록 하겠습니다. 1. ObjectMapper를 이용한 직렬화(Serialize) [ ObjectMapper의 직렬화(Serialize) 동작 방식 ] ObjectMapper는 리플렉션을 활용해서 객체로부터 Json 형태의 문자열을 만들어내는데, 이것을 직렬화(Serialize)라고 한다. 해당 부분은 @ResponseBody나 @RestController 또는 ResponseEntity 등을 사용하는 경우에 처리된다. Spring에서는 기본적으로 jackson 모듈의 ObjectMapper라는 클래스가 직렬화를 처리한다. 그리고 그 과정에서 ObjectMapper의 writeValueAsString이라는 메소드가 사용된..