본문 바로가기

전체 글35

MDC와 로깅 로깅은 시스템 운영의 눈과도 같다. “이 로그가 누구의 요청에서 나온 것인지”를 정확히 식별하는 것이 핵심이다.그런데 단순한 로그 메시지로는 이를 보장하기 어렵다. 서로 다른 스레드가 동시에 로그를 남기면, 대규모 시스템에서는 로그가 뒤섞여 추적이 불가능해진다.이 문제를 해결하기 위해 등장한 것이 바로 Mapped Diagnostic Context(MDC)다. MDC는 “요청별 이름표를 붙이는 기술”이라 볼 수 있다. 1. MDC란MDC(Mapped Diagnostic Context)는 스레드 단위로 key-value 형태의 진단 정보를 저장하여 로깅에 사용할 수 있도록 지원하는 기능이다.“이 요청의 traceId는?”“어떤 사용자 ID가 호출한 요청인가?”“어떤 서버 인스턴스에서 실행되었나?”이런 정보.. 2025. 11. 30.
챕터2 아키텍처 개요 도메인 주도 개발 시작하기를 읽으며 정리한 내용이다. 책의 전체적인 내용을 정리하기 보다는 키워드를 중심으로 정리하였다.네 개의 영역표현, 응용, 도메인, 인프라스트럭쳐에 대해 간단하게 알아보자.1. 표현 영역HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해서 응용 용역에 전달하고 응용 영역의 응답을 HTTP 응답으로 변환하여 전송한다.2. 응용 영역표현 영역을 통해 요청을 전달받아 서비스를 제공한다. '주문 등록', '주문 취소', '상품 상세 조회'와 같은 기능 등을 예로 들수 있다. 응용 영역은 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다. 응용 영역은 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임한다.3. 도메인 영역도메인 모델은 도메인의 핵심 로직을 구현한다. .. 2025. 9. 13.
챕터1 도메인 모델 시작하기 도메인 주도 개발 시작하기를 읽으며 정리한 내용이다. 책의 전체적인 내용을 정리하기 보다는 키워드를 중심으로 정리하였다. 도메인우선 도메인이란 간단하게 정리하면 소프트웨어로 해결하고자 하는 문제의 영역이다. 하나의 도메인은 다시 하위 도메인으로 나눌 수 있다. 주문이라는 도메인에서 다시 카탈로그, 회원, 결제, 배송과 같은 하위 도메인으로 나누어지는 식이다. 그리고 이런 도메인은 다시 하위 도메인으로 나눠 질 수 있다. 개발자는 요구사항을 분석하고 설계하여 코드를 작성하며 테스트하고 배포한다. 이 과정에서 요구사항 정의을 제대로 정의하고 이해하는 것이 중요하다. 요구사항은 도메인의 맥락 속에서 나오기 때문에, 개발자가 도메인 지식을 갖추어야만 본질을 파악하고 올바르게 해석할 수 있다. 따라서 도메인의 전.. 2025. 9. 10.
Redis와 트랜잭션 진행 중인 프로젝트에서 선착순 이벤트를 구현하고 있다. 이벤트 참여자가 접속하면 티켓 번호를 발급받아야 하는데, 동시에 수많은 사용자가 몰리는 상황에서 중복 없이, 빠르고, 순서가 보장된 번호를 제공해야 한다. 이를 위해 Redis를 티켓 발급 시스템의 저장소로 사용했는데 이유는 아래와 같다. 1. 빠른 응답 속도메모리 기반 저장소인 Redis는 읽기/쓰기가 매우 빠름2. 동시성 제어Redis는 단일 스레드 구조 덕분에 명령 단위로 원자성을 보장ZPOP_MIN, LPOP 같은 명령을 사용하면 "가장 작은 번호 가져오기"를 안전하게 처리 가능3. 다중 서버 환경에서 일관성 유지서버가 여러 대여도 Redis를 중앙 발급소로 쓰면 중복 없이 순차 번호를 할당 가능로컬 메모리에서 번호를 관리하면 서버별로 번호 .. 2025. 8. 18.
ORDER BY 처리 (Using filesort) Real MySQL1권을 보며 정리한 내용이다. 책을 읽고 그냥 넘기다 보니 머리속에 잘 안들어와 글로 작성하며 정리해보려 한다. 정렬을 처리하는 방법은 인덱스를 이용하는 방법과 쿼리가 실행될 때 "Filesort"라는 별도의 처리를 이용하는 방법으로 나눌 수 있다. 장점단점인덱스 이용1. INSERT, UPDATE, DELETE 쿼리가 실행될 때 이미 인덱스가 정려돼 있어서 순서대로 읽기만 하면 되므로 매우 빠르다.1. INSERT, UPDATE, DELETE 작업 시 부가적인 인덱스 추가/삭제 작업이 필요하므로 느리다. 2. 인덱스 때문에 디스크 공간이 더 많이 필요하다.3. 인덱스의 개수가 늘어날수록 InnoDB의 버퍼 풀을 위한 메모리가 많이 필요하다.Filesort 이용1. 인덱스를 생성하지 않.. 2025. 7. 7.
커버링 인덱스를 이용한 최적화 이번에 사이드 프로젝트를 진행하며 쿼리 실행계획을 보며 쿼리 최적화를 진행하였다. 우선 테이블을 보자.create table account_book( id bigint auto_increment primary key, title varchar(255) not null, type varchar(255) not null, amount int not null, created_at datetime default CURRENT_TIMESTAMP null, updated_at d.. 2025. 4. 29.