목차 1. B-Tree 인덱스를 통한 데이터 읽기 2. B-Tree 인덱스의 정렬 및 스캔 방향 3. B-Tree 인덱스의 가용성과 효율성 어떤 경우에 인덱스를 사용하게 유도할지, 또는 사용하지 못하게 할지 판단하려면 MySQL이 어떻게 인덱스를 이용해서 실제 레코드를 읽어 내는지 알아야 한다. MySQL이 인덱스를 이용하는 방법들과 인덱스의 정렬, 가용성에 대해 알아본다. 1. B-Tree 인덱스를 통한 데이터 읽기 1) 인덱스 레인지 스캔 인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식이다. SELECT * FROM employees WHERE first_name BETWEEN 'Ebbe' AND 'Gad'; (1) 인덱스 레인지 스캔 루트 노드 → 브랜치 노드 → 리프 ..
목차 1. 엔티티 단건 조회 2. 엔티티 목록 조회 3. 컬렉션 조회 N + 1 JPA의 N + 1 문제는 즉시로딩과 지연로딩 두 경우 모두 발생할 수 있다. 즉시로딩은 JPQL 을 사용해 엔티티를 조회할 때 쿼리가 실행된 후 즉시로딩으로 연관 관계가 매핑된 엔티티를 조회하는 쿼리가 추가로 실행된다. 지연로딩은 엔티티를 조회할 때 연관 관계가 매핑된 엔티티는 프록시로 조회하지만 프록시의 필드에 접근할 때 해당 엔티티를 조회하는 쿼리가 추가로 실행된다. 다음은 지연로딩으로 매핑된 엔티티들의 연관 관계 종류에 따라 발생하는 N + 1 문제와 최적화 과정이다. 지연로딩은 JPQL로 엔티티를 조회해도 연관된 엔티티를 추가로 조회하지 않기 때문에 N + 1 문제가 발생하지 않는다. 하지만 엔티티의 목록을 조회할 ..
목차 1. 스키마 2. 스키마 레지스트리 3. Avro 4. 스키마 레지스트리 동작 방식 5. 스키마 호환성 6. 스키마 레지스트리 실습 카프카를 사용하면서 스키마 레지스트리를 사용해야 하는 이유와 스키마 레지스트리의 동작 방식을 알아본다. 1. 스키마 카프카의 데이터 흐름은 대부분 브로트캐스트 방식이기 때문에 프로듀서를 일방적으로 신뢰할 수밖에 없는 방식이다. 따라서 프로듀서 관리자는 카프카 토픽의 데이터를 컨슘하는 관리자에게 반드시 데이터 구조를 설명해야 한다. 데이터를 컨슘하는 부서가 많고 관리자가 자주 바뀐다면 그때마다 데이터 구조를 설명하는 일이 쉬운 일은 아닐것이다. 이와 같이 데이터를 컨슘하는 여러 부서에게 그 데이터에 대한 정확한 정의와 의미를 알려주는 역할을 스키마를 통해 할 수 있다. ..
도메인 이벤트를 발생시키는 프로듀서와 이벤트를 가져와 데이터를 변경하는 컨슈머를 구성한다.메시지 중복 저장을 방지하는 멱등성 프로듀서를 구성하고 카프카 클러스터는 3개의 브로커를 가지는 멀티 노드 클러스터로 만들어 가용성을 높인다. 컨슈머는 브로커 파티션의 갯수만큼 멀티 스레드로 구성해 데이터를 병렬로 처리하도록 한다. 1. 개발 환경java 11spring boot 2.7.xgradleconfluent kafka 3.xoracle VM 2. 카프카 환경 설정confluent-kafka 설치$ wget https://packages.confluent.io/archive/7.2/confluent-community-7.2.1.tar.gz$ tar xvf confluen..
- Total
- Today
- Yesterday
- 이벤트 스토밍
- 도메인 모델링
- spring rest docs
- http
- ATDD
- clean code
- 스프링 카프카 컨슈머
- Spring
- HTTP 헤더
- 학습 테스트
- named query
- java8
- kafka
- 마이크로서비스 패턴
- 클린코드
- 폴링 발행기 패턴
- 트랜잭셔널 아웃박스 패턴
- 스프링 예외 추상화
- TDD
- JPA
- Git
- Stream
- mockito
- H2
- Ubiquitous Language
- 계층형 아키텍처
- 육각형 아키텍처
- Spring Data JPA
- MySQL
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |