점장이

같은 정확성, 다른 복구 모델 — Spring Batch에서 Chunk와 Tasklet의 선택 기준

TL;DR 배치에서 정확성은 필수다. Chunk와 Tasklet 모두 같은 정확한 결과를 만든다. 차이는 실패했을 때 어디서부터 다시 하느냐. 두 방식을 구현하고 벤치마크까지 돌려본 뒤, 우리 케이스에서는 Tasklet이 적절하다는 결론을 내렸다. Spring Batch는 왜 Chunk를 강조하는가 Spring Batch 공식 문서는 Chun...

공식은 교체되지만 파이프라인은 남는다

이커머스 랭킹 시스템의 점수 설계 — 가중치 합산과 점수제는 같은데 왜 하나를 선택해야 할까

TL;DR 💡 가중치 합산(0.1/0.2/0.7)과 점수제(1/2/7)는 수학적으로 동치다. 순위는 바뀌지 않는다. 그런데 운영하다 보면 스케일 통제, 지표 추가, 랭킹판 조합에서 차이가 드러난다. 점수 공식은 다음 달에 바뀔 수 있다. 개발자가 집중해야 할 건 공식이 아니라 구조다. 같은 “인기 순위”인데 점수 체계가 다르다 이번 주차 과제는 ...

우체통에서 편지를 꺼내면 비어있다. 게시판에서 공지를 읽어도 그대로 붙어있다.

RabbitMQ만 쓰다가 Kafka를 만났다 — '전달'과 '적재'는 달랐다

TL;DR 7주차 과제: 이벤트 기반 아키텍처 + Kafka. 회사에서 RabbitMQ만 쓰다가 Kafka를 처음 도입하면서, 둘의 차이가 “디스크에 저장하느냐”가 아니라 “소비 후에도 남아있느냐”라는 걸 깨달았다. 이 차이 하나가 Outbox 패턴, auto.offset.reset, 실패 보상 전략까지 전부 바꿔놓았다. 우체통과 게시판 Rabb...

Preview Image

6주, 절반을 넘기며

TL;DR 💡 이직 준비하려고 시작한 부트캠프가 절반을 넘겼다. 6주 동안 기술보다 설계가, 코드보다 구조가 중요하다는 걸 배웠다. 근데 정작 이력서에 뭘 쓸지는 아직 모르겠다. 시작은 이직이었다 솔직히 말하면, 이 부트캠프를 시작한 이유는 이직 준비다. 작년 12월쯤부터 슬슬 이직을 생각하고 있었고, 지인 추천으로 이 부트캠프를 알게 돼서 신...

신의 한 수는 Actuator 새로고침이었습니다

Claude도 Gemini도 틀렸다 — 서킷브레이커 HALF_OPEN 삽질기

TL;DR 💡 6주차 과제: PG 연동 결제 시스템에 Resilience4j 적용. 결제는 “성공/실패”가 아니라 “모르는 상태”가 존재하는 도메인이었다. TIMEOUT 상태를 만들고, 서킷브레이커를 설정하고, 직접 테스트하다가 문서에 없는 동작을 발견했다. HALF_OPEN에서 permitted 5건을 다 안 채웠는데 3건에서 서킷이 열렸다. 소스코...

Preview Image

FOR UPDATE는 하나도 안 썼다 — 재고, 좋아요, 쿠폰의 3색 동시성 제어

TL;DR 💡 4주차 과제: 동시성 제어. 처음엔 전부 비관적 락으로 통일하려 했다. 재고 차감, 좋아요 수, 쿠폰 사용 — 세 가지 동시성 포인트를 분석하고 나니 각각 다른 전략이 필요했다. 동시성 제어는 목적이 아니라 수단이었다. 🔒 처음엔 다 잠그려고 했다 4주차 과제: 주문 처리에 동시성 제어를 적용하라. SELECT ... FOR UPD...

Preview Image

지도는 아직 없다, 나침반은 생겼다 — DIP와 도메인 서비스, 멘토링 두 번의 혼란

TL;DR 💡 Repository 분리하면 DIP 끝인 줄 알았다. 멘토링 두 번 듣고 나니 DTO 구조를 뜯어고쳤고, “도메인 서비스”의 정의부터 다시 헷갈린다. 아직 정리가 안 됐다. 그 과정을 기록한다. 🔧 처음 구현 — “Repository 쪼개면 되는 거 아니야?” 회사에서 1년간 써온 구조가 있다. Controller → ApiSer...

Preview Image

👍 좋아요 버튼 누르는 건 1초, 설계하는 건 하루

TL;DR 💡 좋아요 기능을 설계하면서 삭제 전략, 중복 요청(따닥) 처리, 상품 상태 분리까지 고민이 꼬리를 물었다. ‘단순한 기능’은 없었다. 👍 좋아요 하나쯤이야 이커머스 설계 과제에서 좋아요 기능을 접했다. 처음엔 likes 테이블 하나 만들고 INSERT/DELETE 하면 되는 거 아닌가?’라고 생각했다. 근데 막상 설계를 시작하니까 ...