2025.08.27B·04회원가입 버튼을 눌렀는데 3초나 걸린다고? (Message Queue 도입기)
사용자가 회원가입 버튼을 누르면 이메일을 보낼 때까지 로딩 바가 돌아가고 있었습니다. 이메일 서버가 죽으면 회원가입도 실패했죠. 이 강결합(Tightly Coupled) 문제를 해결하기 위해 메시지 큐(Redis/BullMQ)를 도입하고, '식당 주문표' 비유로 비동기 처리를 이해한 과정을 공유합니다.
Message QueueRabbitMQKafka
→2025.08.25A·04이벤트 소싱: 상태 대신 '변화'를 저장하는 아키텍처
은행 계좌의 잔액이 왜 0원인지 궁금해본 적 있나요? 단순히 현재 상태(잔액)만 저장하는 대신, 입금, 출금 같은 모든 '사건(Event)'을 저장하여 시스템을 구축하는 이벤트 소싱 패턴. CQRS와 함께 사용되는 이유와 구현 시 마주하는 현실적인 문제들을 깊이 있게 다룹니다.
ArchitectureEvent SourcingCQRS
→2025.08.20E·01REST API가 느리다고 느껴질 때: gRPC 찍먹하기 (Protocol Buffers, HTTP/2)
JSON은 무겁고 REST는 수다스럽습니다. 마이크로서비스 간 통신 속도를 극한으로 끌어올리기 위해 구글이 만든 gRPC의 세계로 초대합니다. Protocol Buffers의 직렬화 마법, HTTP/2의 멀티플렉싱 성능, 그리고 4가지 스트리밍 통신 패턴(Unary, Server/Client/Bi-directional Streaming)을 실제 코드 예제와 함께 다뤄봤습니다. 브라우저에서의 제약사항(gRPC-Web)과 로드밸런싱 이슈도 다룹니다.
gRPCBackendMicroservices
→2025.07.09Y·03인증(Authentication) vs 인가(Authorization): 보안의 두 기둥 (feat. JWT)
로그인과 권한 체크를 혼동해서 발생했던 실제 보안 사고 사례와, 이를 '공항 보안 검색'과 '호텔 카드키'에 비유하여 명쾌하게 정리했습니다. JWT 구조부터 OAuth 2.0, 그리고 MSA 환경에서의 인증 전략까지.
SecurityAuthenticationAuthorization
→2025.06.01S·04DDD (Domain Driven Design): 개발자가 비즈니스 언어를 배워야 하는 이유
DDD는 단순히 'Repository 패턴을 쓰는 것'이 아닙니다. 복잡한 비즈니스 문제를 해결하기 위해 개발자와 기획자가 같은 언어(Ubiquitous Language)를 사용하고, 거대한 시스템을 'Bounded Context'로 나누어 정복하는 전략적 설계 방법론입니다.
ArchitectureDDDDesign Patterns
→2025.05.29S·03CQRS 패턴: 읽기와 쓰기를 분리해야 하는 진짜 이유 (Command Query Responsibility Segregation)
대규모 트래픽을 처리하는 시스템에서 데이터베이스의 병목 현상은 피할 수 없는 숙명입니다. 읽기(Query)와 쓰기(Command)의 책임을 물리적으로, 논리적으로 분리하여 성능과 확장성을 극대화하는 CQRS 패턴의 핵심 개념과 적용 전략을 정리합니다.
ArchitectureDesign PatternsMicroservices
→2025.05.24S·02서킷 브레이커(Circuit Breaker): 분산 시스템의 두꺼비집
집에 누전이 발생하면 두꺼비집이 내려가 전체 정전을 막습니다. 마이크로서비스에서도 한 서비스의 장애가 전체로 전파되는 것을 막기 위해 서킷 브레이커 패턴과 벌크헤드(Bulkhead) 패턴이 필수적입니다.
System DesignMicroservicesResilience
→