지우는 게 없다면 삭제라고 부르지 말자, 상태 컬럼으로 소프트 삭제 설계하기
새 ERP 백엔드를 시작하고 16일 동안 상태 enum이 세 번 바뀌었습니다. 하드 삭제, deleted_at, 상태 컬럼, Hibernate @SQLRestriction 중 상태 컬럼을 고른 이유와, "삭제" API가 실제로는 아무것도 지우지 않는다는 사실을 이름에 드러내기로 한 결정, 그리고 그 대가로 안게 된 고유성·조회 필터 문제를 정리합니다.
새 ERP 백엔드를 시작하고 16일 동안 상태 enum이 세 번 바뀌었습니다. 하드 삭제, deleted_at, 상태 컬럼, Hibernate @SQLRestriction 중 상태 컬럼을 고른 이유와, "삭제" API가 실제로는 아무것도 지우지 않는다는 사실을 이름에 드러내기로 한 결정, 그리고 그 대가로 안게 된 고유성·조회 필터 문제를 정리합니다.
당근 2024 테크 밋업 후기입니다. 이벤트 기반 분석으로 속도를 낸 당근알바 초기 엔지니어링 전략, 서버가 늘어날 때 채팅 시스템이 메시지 큐로 바뀌는 과정, CPU Limit에서 끝난 Istio 네트워크 장애 추적기, 그리고 당근페이 머니서비스팀·어카운트 서비스팀 네트워킹 세션에서 나눈 이야기를 정리했습니다.
Spring Batch, Spark, AWS Batch 같은 배치 선택지 중 이미 구축된 Airflow를 고른 이유와, macOS에서 Conda 가상환경에 Apache Airflow 2.10을 constraint 파일로 설치하고 MySQL·AWS provider를 더해 웹서버와 스케줄러를 띄우기까지의 절차를 단계마다 왜 필요한지와 함께 정리합니다.
토스 SLASH 24 서버 세션 후기입니다. 리플레이 검증(Read/Write Verifier)으로 레거시 원장을 안전하게 전환한 사례, Oracle 대신 MySQL과 MSA로 만든 외화 코어뱅킹, SAGA 패턴과 보상 트랜잭션으로 환전을 처리하는 방법, 그리고 커널 Observability와 마이데이터 서킷 브레이커 세션에서 얻은 키워드를 정리했습니다.
여러 Spring Boot 서버에 흩어진 JWT 토큰 검증을 통합하려고, 모든 요청을 Auth 서버로 보내는 방법과 API Gateway에서 검증하는 방법을 비교했습니다. Gateway를 고른 이유와, 토큰이 없으면 401을 던지는 Kong 기본 JWT 플러그인 대신 커스텀 플러그인을 만든 이유를 정리합니다.
Lua로 작성한 JWT 커스텀 플러그인을 Dockerfile로 Kong 이미지에 넣어 빌드하고, Konga에서 Route에 붙인 뒤 Kong Manager에서 Consumer의 JWT credential까지 설정하는 과정을, 플러그인이 요청의 어느 단계에서 도는지와 함께 정리합니다.
Docker 네트워크 하나에 PostgreSQL, Kong, Konga를 띄우고 Service와 Route를 등록해 요청이 라우팅되는지 확인하기까지, 명령어마다 왜 그 단계가 필요한지와 포트·환경 변수의 의미를 함께 정리합니다.
ISMS 심사를 앞두고 비밀번호를 단방향 암호화해야 했습니다. 배치 없이 MySQL의 SHA2()와 INSERT … SELECT만으로 무중단 서비스에서 마이그레이션한 방법을, 테스트 계정을 둘로 나눈 실행 계획과 실행 전 테스트, 본 쿼리, 실행 후 확인 순서로 정리합니다.
서버가 여러 대이면 synchronized로는 동시성 문제를 막을 수 없습니다. 이미 Redis가 있는 환경에서 Redisson 분산 락을 골랐고, 커스텀 @RedissonLock 애노테이션과 AOP Aspect로 SpEL key, waitTime·leaseTime을 처리하도록 만든 과정, 락 획득 실패와 트랜잭션 순서에서 조심할 점, 그리고 스레드 세 개로 확인하는 동시성 테스트까지 정리합니다.
ISMS 심사를 앞두고 지원이 끝난 Spring Boot 2를 3.3으로, Java 11을 21로 올렸습니다. 2.x 마지막 버전인 2.7.18에서 의존성을 먼저 정리한 뒤 3.3으로 넘어가고, Gradle 래퍼와 Querydsl jakarta 설정, javax→jakarta, Spring Security 6 람다 DSL로 SecurityConfig를 다시 쓴 과정과 놓치기 쉬운 함정을 정리합니다.