주제
큰 시스템을 멈추지 않고 어떻게 바꾸나
아키텍처와 마이그레이션
모듈러 모놀리스와 이벤트 중심 설계, 레거시 위에 세운 검증 로직, 스트랭글러 패턴과 무중단 전환. 설계 결정을 내린 이유와 그 결정을 되돌린 이유를 모은다.
먼저 읽을 글
직접 만들고 재 본 것 모듈식 모놀리스를 선택한 이유 — MSA의 유혹을 거부하기 직접 만들고 재 본 것 가격이 아니라 이벤트를 팔자 — monticker 설계 철학 직접 만들고 재 본 것 Shadow Release로 조회를 옮기기: MyBatis 결과와 QueryDSL 결과를 나란히 비교하며 전환한 기록 기술 블로그 리뷰 무신사 「Kafka와 Strimzi를 이용하여 6개의 도메인을 하나의 도메인으로 합쳐보았습니다」 리뷰 — 배치 없이 CDC와 Kafka Streams로 옮긴 결정, 그리고 통합 모델이 원본과 같다는 것을 누가 확인하는가 컨퍼런스 발표 리뷰 SLASH 23 리뷰 - 은행 최초 코어뱅킹 MSA 전환기 (feat. 지금 이자 받기): 80회 DML을 50회로, MCI 대비 170배, 빅뱅 없는 전환 컨퍼런스 발표 리뷰 SLASH 24 리뷰 - 토스뱅크가 차세대를 하지 않는 이유, 지속 가능한 마이그레이션 전략: 스트랭글러 피그, 6단계 사이클, 컴포지트 분할 정복, 병렬 실행 비교 검증
직접 만들고 재 본 것
56편- 모듈식 모놀리스를 선택한 이유 — MSA의 유혹을 거부하기
- 가격이 아니라 이벤트를 팔자 — monticker 설계 철학
- Shadow Release로 조회를 옮기기: MyBatis 결과와 QueryDSL 결과를 나란히 비교하며 전환한 기록
- 섬유 공장에 API를 붙이면: 제조를 클라우드처럼 쓰는 구상
- ProofU 초기 설계 - 근거를 추적하는 지원 문서 시스템과 기술 선택의 이유
- ParityPay로 검증하는 결제 정합성 1 - 장애가 나도 지켜야 할 금융 불변조건 여섯 가지
- ParityPay 초기 설계 - 돈의 규칙은 PostgreSQL에 두고, 나머지 기술은 그 규칙을 돕는 자리에 두기
- CodeDrill 초기 설계 - 판정을 신뢰 경계 밖으로 떼어 낸 온라인 저지와 그 스택을 고른 이유
- 타임아웃, 재시도, 백오프 - 증폭과 지터, 그리고 데드라인 전파
- SysDrill 초기 설계 - 실제 인프라 없이 장애 대응을 훈련시키는 백엔드의 첫 구조
- spring-internals-lab로 다시 읽는 Spring 1 - 이 프로젝트는 무엇을 검증하려는가
- API 버저닝과 호환성 - 스키마 진화 규칙
- iterview 초기 설계 - 이력서 기반 면접 훈련 플랫폼의 구조와 기술 선택
- 분산 트랜잭션 - 2PC와 Saga, 보상 트랜잭션이 실패하는 방식
- 모듈러 모놀리스 - 경계를 코드로 강제하는 방법
- spring-lite로 이해하는 Spring 구현 1 - 프로젝트 구조와 설계 범위
- 트레이스 샘플링 - 헤드와 테일 샘플링의 선택 기준
- 멱등성 설계 - 키의 단위와 저장 위치, 만료와 재시도 계약
- 토스증권 Kafka 데이터센터 이중화 리뷰: 미러링보다 오프셋이 어렵고, 재난과 작업의 기준이 다르다
- 이벤트 소싱과 CQRS - 언제 비용이 이익을 넘는가
- 토스증권의 CQRS·검증기와 ParityPay의 스냅샷·대사: 읽기 모델을 분리하면 반드시 따라오는 세 가지 장치
- 토스증권 공개 자료로 읽는 시세·주문 아키텍처: 무엇을 잃어도 되는지 먼저 정한다
- 시간과 순서 - 물리 시계의 한계, 논리 시계, 하이브리드 시계
- REST, gRPC, GraphQL - 선택 기준과 각자가 내는 비용
- redis-lite-java로 이해하는 Redis 아키텍처 개요
- 합의 알고리즘 - Raft를 상태 기계로 읽기
- 멱등한 API 설계 - HTTP 메서드의 의미와 재시도 계약
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 3 - 채번을 INSERT 시점으로 옮기고 범위 단위로 받기
- monticker 초기 설계: 이벤트를 중심에 둔 첫 구조와 기술 선택
- 일관성 모델 - 선형화, 순차, 최종 일관성, 그리고 CAP를 설정값의 언어로
- 대량 배치 안정성을 높이기 위한 구조 개선: Part 5 - 배타적 락과 조건부 해제로 순서를 보장하기
- 키 생성 병목을 추적해 구조를 바꾼 기록: Part 1 - 2분짜리 계약 생성과 SELECT 한 줄
- 실행하지 않은 재설계: 권리이관 시스템의 요청 모델을 3계층으로 나누자는 제안
- 위반 480건 위에 아키텍처 규칙을 도입하기: 신규 코드는 100% 강제, 레거시는 점진 정리
- Creator-Producer 매핑 장애 대응: DML 대신 애플리케이션 흐름으로 복구한 이유와 확정하지 못한 원인
- Bulkhead Pattern
- 모든 도메인이 100% 정합성을 요구하지는 않는다: Post-Commit 이벤트와 재시도 3회 정책을 정한 기준
- 유통사가 늘 때마다 복사되던 File Observer 구현체 정리: 제네릭을 걷어낸 Base 클래스와 DB 기반 권리사 ID
- 폴링 배치를 SQS 이벤트 파이프라인으로 바꾼 이유: 재시도, DLQ, 메시지 ID 멱등
- Map 기반 입력을 DTO와 3단계 검증으로 바꾸기: Bean Validation, 매핑, 도메인 규칙
- 화면 단위 API를 도메인 책임 단위로 다시 나누기: 응답 1.5초에서 300ms까지
- 8천만 곡 규모 음원 데이터와 온프레미스에서 AWS로의 점진 전환: 참여자로 본 것
- Microservice Architecture
- 크리에이터 스튜디오 개요: 외부 연동 분리, 감사 로그, 토큰 세션, 매핑 장애에서 내린 판단
- MCP 전면 개편기: Map 입력을 DTO와 3단계 검증으로 바꾸기
- MCP 전면 개편기: 계약 코드 채번의 락 경합을 줄여 2분을 10초로
- MCP 전면 개편기: MyBatis와 JPA 공존 환경의 데이터 정합성 전략
- MCP 전면 개편기: 화면 단위 API를 도메인 책임 API로 옮기기
- MCP 전면 개편기: 판단 로직의 자리를 정하고 ArchUnit으로 지키기
- 테이블과 데이터만 남은 외주 시스템을 리뉴얼한 과정: 음원 유통 시스템(MDS)
- ADR(Architecture Decision Record) - 결정의 맥락을 결정과 함께 남기기
- Spring 애플리케이션에서 예외를 설계하는 방법
- Microservice Architecture
- Unique ID Generation Strategy in Distributed Systems
- Microservices Architecture
- Facade
기술 블로그 리뷰
7편- 무신사 「Kafka와 Strimzi를 이용하여 6개의 도메인을 하나의 도메인으로 합쳐보았습니다」 리뷰 — 배치 없이 CDC와 Kafka Streams로 옮긴 결정, 그리고 통합 모델이 원본과 같다는 것을 누가 확인하는가
- 쿠팡 「대용량 트래픽 처리를 위한 쿠팡의 백엔드 전략」 리뷰 — 캐시 두 겹과 '분 단위 99.99% 동일'이라는 문장, 그리고 그 0.01%를 누가 어떻게 세는가
- 네이버 D2 「일 3,000만 건의 네이버페이 주문 메시지를 처리하는 Kafka 시스템의 무중단 전환 사례」 리뷰 — 두 벌로 발행해 대조한 검증기와, 발행 제어 키를 파티션 키와 같게 둔 이유
- 카카오페이 「MSA 환경에서 네트워크 예외를 잘 다루는 방법」 리뷰 — Unknown을 타입으로 만든 글과, Unknown을 상태로 저장한 프로젝트가 갈리는 지점
- LINE 「기획서 없이 내재화하기: 검증 로직으로 동일함을 증명하다」 리뷰 — 블랙박스는 입력과 출력만 정의하면 통계로 같음을 증명할 수 있다
- 네이버 D2 「6개월 만에 연간 수십조를 처리하는 DB CDC 복제 도구 무중단/무장애 교체하기」 리뷰 — 복제·검증·복구를 셋으로 나누고, 옛 도구와 새 도구를 서로 모르게 같이 돌린 전환
- 카카오 「추가배포 없이 API의 case 통일시키기」 리뷰 — 받는 쪽이 자기 케이스에 맞춰 알아서 읽게 하면 배포 순서가 사라진다
컨퍼런스 발표 리뷰
7편- SLASH 23 리뷰 - 은행 최초 코어뱅킹 MSA 전환기 (feat. 지금 이자 받기): 80회 DML을 50회로, MCI 대비 170배, 빅뱅 없는 전환
- SLASH 24 리뷰 - 토스뱅크가 차세대를 하지 않는 이유, 지속 가능한 마이그레이션 전략: 스트랭글러 피그, 6단계 사이클, 컴포지트 분할 정복, 병렬 실행 비교 검증
- SLASH 24 리뷰 - 리플레이 검증으로 새로운 금융 시스템 안전하게 도입하기: 운영 트래픽을 그대로 재생해 차세대 원장을 검증하다
- SLASH 23 리뷰 - Kafka 이중화로 다양한 장애 상황 완벽 대처하기: Active-Standby를 믿지 않고 Active-Active로 간 이유와 IDC 장애 당일의 순서
- SLASH 24 리뷰 - Next 코어뱅킹, MSA와 MySQL로 여는 평생 무료 환전 시대: Oracle을 버린 이유, 30ms 환전, 자정에도 멈추지 않는 잔액 대사
- SLASH 22 리뷰 - 왜 은행은 무한스크롤이 안되나요: 채널계가 거래내역을 직접 갖기 위한 여덟 가지 방어
- SLASH 21 리뷰 - 결제 시스템의 SDK와 API 디자인: 4단계를 2단계로, DELETE·PUT을 버린 이유, 한글 enum