본문 바로가기

전체 글35

JIT 컴파일러의 최적화 JIT 컴파일러가 수행하는 다양한 최적화 방식에 대해 키워드를 중심으로 가볍게 정리했다. JIT 컴파일러의 기술은 크게 코드의 흐름과 생사 여부를 감시하는 '기반 분석 기술'과, 분석 결과를 토대로 코드를 물리적으로 개조하는 '실제 최적화 기술'의 두 가지 축으로 나뉜다. 기반 분석 기술최적화를 수행하기 위해 코드를 런타임에 실시간으로 프로파일링하고 추적하는 기술① 라이브니스 분석 (Liveness Analysis)개념: 특정 변수가 현재 실행 흐름상 앞으로 사용될 살아있는(Live) 변수인지, 아니면 더 이상 참조되지 않는 죽은(Dead) 변수인지 실시간으로 생사를 판별하는 분석 기법동작: 변수의 물리적 스코프(중괄호)가 끝나지 않았더라도, 아래쪽 코드에서 더 이상 해당 변수를 읽지 않는다고 판단되면 .. 2026. 7. 19.
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.
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.