Archives
All the articles I've archived.
-
네이버 API - JSON 데이터의 Content-Type: text/plain 응답
네이버 검색 API가 실제로는 JSON 바디를 주면서 응답 헤더엔 Content-Type을 text/plain으로 내려보내서, WebClient의 기본 Jackson 디코더가 역직렬화에 실패하던 문제와 해결 과정
-
인메모리로 STOMP 세션 상태를 추적하다 겪은 두 가지 버그
채팅 온라인 상태와 "방을 보고 있는 중" 상태를 인메모리 레지스트리로 추적하면서 겪은 버그 두 개 - STOMP UNSUBSCRIBE 프레임엔 destination이 없다는 것, 그리고 멀티 세션 환경에서 disconnect 이벤트가 중복 발생할 수 있다는 것
-
DB 3 value logic - 가격 협의 게시글이 필터에서 사라지던 이유
가격 범위 필터를 걸면 가격을 정하지 않은(협의) 게시글이 항상 결과에서 빠지던 버그 — SQL의 3값 논리(NULL 비교는 항상 거짓)가 원인이었고, 수정하면서 두 가지 경계 조건을 의도적으로 다르게 처리했다
-
Spring Boot 4 + Jackson 3 — Redis 직렬화가 조용히 어긋나는 지점
Spring Boot 4의 기본 ObjectMapper가 Jackson 3(tools.jackson)로 바뀌면서, Jackson 2 기반 GenericJackson2JsonRedisSerializer를 그대로 쓰면 안 되는 이유와 실제로 겪은 이슈
-
@TransactionalEventListener(AFTER_COMMIT) 제대로 쓰기 — 캐시 무효화부터 예외를 삼키는 함정까지
캐시 무효화를 도메인 이벤트로 하는 이유, 도메인 이벤트에 raw UUID를 쓰는 이유, 그리고 크로스모듈 정리 작업을 설계하다 발견한 AFTER_COMMIT 리스너의 예외 처리 함정
-
AWS KMS로 OAuth refresh_token 암호화하기 — 왜 카카오는 저장이 필요 없고 애플은 필요한가
소셜 로그인 연결 끊기(unlink) API를 구현하면서, 카카오와 애플의 요구사항이 완전히 달라 한쪽만 refresh_token을 암호화해서 저장하게 된 과정과 KMS 대칭키 선택 이유
-
Redis vs RDB
Redis TTL과 RDB 중 어디에 저장할 것인가 — 편의성이 아니라 유실 시 리스크 방향으로 판단한 기준을 정리
-
쿼리 - 효율적인 처리 와 N+1
조회 전용 서비스가 domain repository를 건너뛰어도 되는 이유, 그리고 @BatchSize 대신 QueryDSL Projection으로 N+1을 해결한 이유
-
FK 없는 스키마 설계 — 데이터 무결성을 애플리케이션에 넘긴 이유
FK를 안 쓰는 이유, FK 자체의 장단점, 그리고 그 대가로 애플리케이션이 떠안은 책임과 비용을 정리했다.
-
Port/Adapter 인터페이스, 외부와의 연결
DDD에서 외부와의 연같을 다루는 방법과, 인터페이스 유무를 결정 짓는 방법
-
@Transactional 함정
회원탈퇴 처리에서 상태 전이를 별도 서비스로 쪼갠 이유, 그리고 이중 @Transactional이 REQUIRED 전파로 조용히 무력화됐던 버그를 REQUIRES_NEW로 고친 과정
-
Spring @Async vs Kotlin 코루틴 — 회원탈퇴 소셜 unlink 처리로 보는 선택 기준
회원탈퇴 시 카카오/애플 unlink API 호출을 비동기로 처리하면서 정리한 @Async와 코루틴의 차이, 그리고 기존 아키텍처(블로킹 위주)에서 어떤 기준으로 골랐는지
-
Redis 비교
Redis vs Memcached, Valkey 부록, Redis가 RDS(관계형 DB)를 대체할 수 없는 이유, 그리고 분산 락/캐시 스탬피드/Rate Limiting/Streams 설계 패턴 정리
-
Spring Security + 애플 로그인 구현 (OIDC + client_secret JWT)
애플 로그인의 OIDC 흐름, client_secret JWT 동적 생성, 카카오 OAuth2와의 구조 비교 정리
-
JWT 발급 및 세션 관리 — NORMAL / ADMIN 전략 비교
ES256 JWT 발급 인프라, Redis 세션 구조, NORMAL/ADMIN별 세션 전략, Rotating Refresh Token 정리
-
Spring Security + 카카오 OAuth2 로그인 구현 (DDD 아키텍처)
Spring Security OAuth2 + 카카오 로그인을 DDD 레이어드 아키텍처에 녹여 구현한 흐름 정리
-
Django 요약
Django 요약
-
Database summary
Database 간단 요약
-
DDD 전술적 설계 팁
DDD 전술적 설계 팁
-
DDD 전술적 설계 2(Tactical Design)
DDD 전술적 설계 순서
-
DDD 전술적 설계 1(Tactical Design)
DDD 전술적 설계 용어 정리
-
DDD 전략적 설계(Strategic Design)
DDD 전략적 설계