profile
Dot Your moment.
post-thumbnail

Controller의 책임을 떼어내며 — 뷰 렌더링과 파라미터 바인딩

TL;DR: Controller에는 비즈니스 로직 외에도 파라미터 파싱·뷰 결정·렌더링 책임이 섞여있다. 이 셋을 단계별로 떼어내면 Controller는 진짜 컨트롤러 역할만 남고, 결과적으로 Spring MVC와 거의 같은 구조가 만들어진다.지난 글(한 메서드 안에

2026년 4월 27일
·
0개의 댓글
·
post-thumbnail

프론트 컨트롤러 — 서블릿 N개를 1개로 압축하는 법

TL;DR: 서블릿 N개에 흩어진 공통 로직은 새로운 보일러플레이트다. 모든 요청을 받는 단일 진입점 + 비즈니스 로직만 담는 핸들러로 분리하면, 중복이 N에 비례하던 코드가 상수로 압축된다.지난 글(URL이 100개면, Servlet 클래스도 100개가 되어야 하는가

2026년 4월 27일
·
0개의 댓글
·
post-thumbnail

톰캣을 직접 만든다면...?

TL;DR: "서블릿 컨테이너"라는 한 단어를 부품 다섯 개로 쪼개서 보면, 톰캣이 무엇을 책임지는지가 명확해진다.지난 글(| 계층 | 누가 처리하는가 |\| --- \| --- \|| 비즈니스 로직 | 개발자가 작성한 코드 || HTTP 메시지 처리 | 서블릿 컨테이

2026년 4월 27일
·
0개의 댓글
·
post-thumbnail

서블릿은 왜 등장했나?

TL;DR: "스프링 없이 CRUD 4개쯤이야"로 시작했는데, Socket 추상화 너머에 OS 커널이 통째로 떠받치고 있다는 것과, 그 위에 짜는 코드의 95%는 HTTP 스펙 처리라는 것을 연달아 깨달았다.강의 서비스 백엔드를 처음부터 짜보는 과제를 받았다. 회원 가

2026년 4월 27일
·
0개의 댓글
·
post-thumbnail

루퍼스 부트캠프를 마치며...

"이 시장에서 나는 경쟁력이 있는 사람일까?"그 질문 하나로 시작된 10주의 기록.2025-12-31은 나에게 의미있는 날이였다.25년도 한 해를 마무리하며 회고하고 있었는데 문득 이런 생각이 들었다.어느새 3년이나 회사를 다녔는데, 나는 과연 이 시장에 경쟁력이 있는

2026년 4월 26일
·
0개의 댓글
·
post-thumbnail

WIL (랭킹 시스템 설계: Redis ZSET부터 Spring Batch + MV까지)

상품 랭킹 시스템을 일간 / 주간 / 월간 세 가지 주기로 나눠 구현했다.핵심은 "조회 주기에 따라 적절한 저장소를 고르는 것" 이었다.랭킹은 결국 "점수 기반 정렬 + 순위 조회" 문제다.ZSET은 내부적으로 skip list + hash를 써서 score 정렬 삽입

2026년 4월 18일
·
0개의 댓글
·
post-thumbnail

배치의 언어학

이 글은 L0~L7 8가지 배치 기법을 동일 데이터셋으로 측정하고, 각 기법이 어떤 상황에서 옳은 선택인지 역으로 추적한 기록입니다. 코드와 측정값은 batch-benchmark-java 저장소에서 모두 재현할 수 있습니다.작년에 팀에서 배치 작업을 새로 설계하면서,

2026년 4월 17일
·
0개의 댓글
·
post-thumbnail

기술을 새로운 시각으로 바라보다

TL;DR10주 동안 TDD, 도메인 설계, 락, 인덱스, 캐시, Circuit Breaker, 이벤트, Kafka, 대기열, Redis ZSET, Spring Batch를 공부했다. 처음엔 각자 다른 도구라고 생각했는데, 돌아보니 대체로 트레이드오프의 다른 이름들이

2026년 4월 17일
·
0개의 댓글
·
post-thumbnail

WIL (Redis ZSET 기반 실시간 랭킹 시스템)

이번 주 과제는 "상품 인기 랭킹을 실시간으로 보여줘라"였다. 처음에는 간단할 줄 알았다. product_metrics 테이블에 조회수, 좋아요, 주문수가 이미 쌓이고 있으니까 ORDER BY 한 방이면 되지 않나? 하지만 "인기"를 정의하려는 순간부터 생각보다 복잡한

2026년 4월 12일
·
0개의 댓글
·
post-thumbnail

29CM보다 나은 랭킹 시스템 만들기

TL;DR: "대략 맞으면 되는" 줄 알았던 랭킹 데이터에서 가장 많은 설계 판단이 필요했다.29CM BEST 페이지. 이 순위는 어떻게 정해지는 걸까?이 글에서 사용한 실험 환경은 Spring Boot + Redis ZSET 기반 학습용 프로젝트입니다. Score 방

2026년 4월 10일
·
0개의 댓글
·
post-thumbnail

WIL - (Redis 기반 대기열 시스템)

이번 주 과제는 "블랙 프라이데이에 주문이 폭주하면 어떻게 할 것인가?"였다. 처음에는 단순히 Rate Limiting으로 요청을 거부하면 되지 않나 싶었는데, 과제를 읽으면서 생각이 바뀌었다.Rate Limiting은 초과 트래픽에 429를 던지고 끝이다. "나중에

2026년 4월 5일
·
0개의 댓글
·
post-thumbnail

아이유 콘서트 티케팅을 만들어보았다 — 100석에 500명이 몰리면 생기는 일

TL;DR: 에러 없이 정합성이 깨지는 게 가장 무섭다. 그걸 수치로 증명하고, 한 겹씩 고쳐간 기록.멜론티켓을 열면 항상 같은 화면을 본다. "현재 대기 인원 23,482명". 그리고 숫자가 줄어들길 기다리다가 결국 "선택 가능한 좌석이 없습니다"를 마주한다.그런데

2026년 4월 3일
·
0개의 댓글
·
post-thumbnail

WIL('나'를 되돌아보다)

루퍼스라는 부트캠프를 시작한 지 어느덧 7주차가 완료되었다.기술적인 회고를 작성할 수도 있지만, 7주라는 시간이 지났으니 나 스스로에 대해 되돌아보는 시간을 가지고 싶었다. 매주 코드를 돌아봤으니, 이번엔 코드를 치는 '나'라는 사람을 돌아보려 한다. 그래서 이번 WI

2026년 3월 29일
·
0개의 댓글
·
post-thumbnail

acks=all, 올리브영 세일 전날 쿠폰 서버가 터질 뻔한 이야기

TL;DR올리브영 세일 전날, 선착순 쿠폰 발급과 좋아요 폭증이 동시에 터지는 상황을 가정했다. 좋아요 집계가 느려지면서 좋아요 자체가 실패하고, 서버 배포 한 번에 이벤트가 통째로 유실되는 문제까지. 이걸 해결하기 위해 Outbox 패턴으로 이벤트를 DB에 저장하고,

2026년 3월 27일
·
0개의 댓글
·

PG 40% 실패율에서 살아남기

지금부터 하는 이야기는 PG 시뮬레이터(요청 성공률 60%, 비동기 처리 성공률 70%, 종합 성공률 42%)를 상대로 커머스 결제 시스템의 장애 대응을 설계한 과정입니다. 실제 PG사의 실패율은 이보다 훨씬 낮지만, 극단적인 환경이 더 좋은 질문을 만들어줬습니다.PG

2026년 3월 20일
·
0개의 댓글
·
post-thumbnail

인덱스를 걸었는데 왜 안 빨라졌을까

TL;DR 결국 "어디에 인덱스를 거는가"보다 "쿼리가 실제로 어떻게 실행되는가"를 먼저 이해해야 했고, EXPLAIN을 읽는 법을 배운 뒤에야 진짜 병목을 찾을 수 있었다.사내 ERP 시스템에 계약대장관리 화면이 있다. 계약 건별 마스터 정보를 조회하는 화면인데, 검

2026년 3월 13일
·
0개의 댓글
·
post-thumbnail

100 → 99 → 49 → 0 : 100개의 재고가 정신 차리기까지

TL;DR "데이터가 사는 곳에서 잠가야(Lock) 한다."카페에서 아이스 아메리카노 한 잔이 남았다.두 명이 동시에 주문 버튼을 누르면 어떻게 될까?일상에서는 별일 아니다. 점원이 "죄송합니다, 한 잔 남았는데요"라고 말하면 된다.그런데 서버에서는 점원이 없다. 코드

2026년 3월 6일
·
1개의 댓글
·
post-thumbnail

"상품이 뭔데?" — DDD 책임 분리를 나만의 기준으로 탐구하기

이전 글에서 33개의 Q&A로 설계를 먼저 한 이야기를 했다. 이번에는 그 설계 과정에서 가장 머리를 싸맸던 부분에 대해 써보려 한다."이 코드를 어디에 둬야 하는가?"DDD를 공부하면 "바운디드 컨텍스트", "어그리게이트", "도메인 서비스" 같은 용어가 쏟아진다.

2026년 2월 27일
·
0개의 댓글
·
post-thumbnail

코드를 치기 전에 33개의 질문을 던졌다

들어가며 — 바로 코딩하면 어떻게 되는지 알고 있다 이커머스 과제를 받았다. Brand, Product, Stock, Like, Order — 5개 도메인, 21개 API. 요구사항 문서를 읽으면서 떠오른 첫 번째 생각은 "일단 엔티티부터 만들자"였다. 하지만 경

2026년 2월 13일
·
0개의 댓글
·
post-thumbnail

검증 로직 3번 잘못 놓고 깨달은 한 가지

검증 로직을 어디에 둘 것인가 — 회원가입 구현에서 배운 것 > TL;DR > 비밀번호 규칙, 이메일 형식 같은 검증 로직을 Controller, Service, Entity 순서로 시도하다가, 최종적으로 Value Object에 넣었다. 결정적 계기는 테스트였다.

2026년 2월 6일
·
0개의 댓글
·