전체 글 234

[Real MySQL 8.0] 인덱스 살펴보기

인덱스란?인덱스는 컬럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 삼아 주어진 순서로 미리 정렬해두고, 원하는 결과에 대해 빠르게 찾아갈 수 있도록 한다. 인덱스는 책의 색인을 통해, 알아낼 수 있는 페이지 번호는 데이터 파일에 저장된 레코드의 주소에 비유되고, 해당 페이지의 내용은 데이터 파일에 비유 가능하다. 인덱스도 컬럼의 값을 주어진 순서로 미리 정렬해서 보관하므로, 원하는 결과를 최대한 빠르게 찾아갈 수 있다. 인덱스 사용 목적DBMS에서 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래 걸린다. 따라서 인덱스를 생성해놓고 이 시간을 단축시키는 것이 목적이다. 즉, 데이터의 읽기 속도를 높이는 기능으로 볼 수 있다. 읽기 속도는 향상되지만 데이터의 추가나 삭제 시..

책/REAL MYSQL 8.0 2025.05.08

MySQL InnoDB의 Adaptive Hash Index

최근 DB에 대해 부족함을 느껴, Real MYSQL 8.0 책을 읽고 있다.Real MYSQL 8.0의 Adaptive Hash Index에 대해 더 궁금하여, 아래 글을 보고 정리하였다.https://tech.kakao.com/posts/319 MySQL InnoDB의 Adaptive Hash Index 활용 - tech.kakao.com개요 MySQL의 InnoDB에는 Adaptive Hash Index 기능이 있는...tech.kakao.com InnoDB B-Tree 인덱스MySQL의 InnoDB의 대표적인 인덱스는 B-Tree이다.데이터는 Primary Key 순으로 정렬되어 관리되고, Secondrary Key는 인덱스키+PK를 조합으로 정렬특정 데이터를 찾기 위해서는 Secondrary K..

책/REAL MYSQL 8.0 2025.05.04

헥사고날 아키텍처 적용기

https://velog.io/@onyx01/%ED%97%A5%EC%82%AC%EA%B3%A0%EB%82%A0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%A1%9C-%EC%BD%94%EB%93%9C-%EA%B5%AC%ED%98%84-%ED%95%B4-%EB%B3%B4%EA%B8%B0 헥사고날 아키텍처로 코드 구현 해 보기헥사고날 아키텍처 (Hexagonal Architecture) 를 구현 해 보면서 이해한 개념을 정리 하고, 소감을 남겨봅니다.velog.io 본 글은 위 링크의 글을 참고하여 작성하였습니다.레이어드 아키텍처와의 비교레이어드 아키텍처- 소프트웨어 시스템을 계층으로 나누어 설계하는 전통적인 방식이다. 일반적으로 표현 계층(Presentation Layer), 비..

메시지 큐 도입기 - 비동기 로깅 처리 및 알림 기능 (RabbitMQ, Kafka, Redis Pub/Sub 비교)

https://f-lab.kr/insight/message-queue-system-comparison 메시지 큐 시스템 비교: Kafka, RabbitMQ, Redis Pub/SubKafka, RabbitMQ, Redis Pub/Sub 세 가지 메시지 큐 시스템의 특징, 장단점 및 적합한 사용 사례를 비교 분석합니다.f-lab.kr본 글을 보고 정리한 내용입니다. 메시지 큐 도입기왜 도입을 하는가?  서비스의 확장성과 성능 최적화를 위해 메시지 큐(Message Queue)를 도입하여 비동기 로깅 처리 및 알림 기능을 구현하려고 한다.기존 로그 저장 방식은 (Logback → 파일)로 저장하였다. 로그가 서버에서 Logback을 통해 파일(server.log, error.log)에 저장하고 Promtai..

로그 파일 Grafana+Promtail+loki 이용해서 실시간 모니터링 적용하기

Grafana+Promtail+loki 를 사용한 이유로그 수집을 하기 위한 기술을 뽑으자면 ELK(Elasticsearch, Logstash, Kibana)를 떠올릴 수 있다.하지만 서버 스펙의 한계(Ec2 프리티어)로, 비교적 가볍게 실행할 수 있는 PromTail, Loki, Grafana를 도입하게 되었다. 모니터링 서버는 다음과 같다. 모니터링 서버에는 Grafana, Loki를 도커로 띄우고, 운영 서버에는 Promtail과 스프링 부트가 도커로 돌아가게 된다. 모니터링 서버를 분리한 이유는 Promtail, Grafana, Loki 같은 로그/메트릭 수집 도구는 많은 I/O와 네트워크 트래픽을 발생시키기 때문에 분리하였다. (모니터링 서버)에 Grafana, Loki 도커로 실행하기docke..

N+1 문제 해결하기 (@EntityGraph 사용)

@EntityGraph란?연관관계가 지연 로딩으로 되어있을 경우 fetch 조인을 사용하여 여러 번의 쿼리를 한 번에 해결할 수 있습니다.@EntityGraph는 Data JPA에서 fetch 조인을 어노테이션으로 사용할 수 있도록 만들어 준 기능입니다.  N+1 발생 이유기본적으로 @OneToMany, @ManyToMany 관계는 Lazy Loading으로 되어 있는 경우JPA에서 @OneToMany와 @ManyToOne 관계 등을 지연 로딩(Lazy)으로 설정한 경우,  연관관계에서 종속된 엔티티는 쿼리 실행 시 select 되지 않고 proxy 객체를 만들어 엔티티가 적용시킵니다. 그 후 해당 proxy 객체를 호출할 때마다 그때 그때 select 쿼리가 실행됩니다. EnttiyGraph 를 사용한..