May 20, 2026
숙박과 장기 임대 도메인에서 개발을 하다 보면 거주자와 숙박 이용자에게 알림을 보낼 일이 자주 있습니다. 그중에서도 계약 관련 알림은 일부 누락되어도 되는 정도가 아니라 반드시 고객에게 도달해야 하는 알림입니다. 계약 갱신·만료 같은 통지가 누락되면 분쟁의 소지가 됩니다. 그런데 "DB에 계약 상태를 저장하는 것"과 "고객에게 알림을 발행하는 것"은 서로…
March 13, 2026
관리비 및 공과금 데이터를 크롤링하는 파이프라인을 구축했습니다. 로컬 개발 환경에서는 크롤러를 Docker 컨테이너로 구동하여 정상 동작을 확인 했고, 스케줄링은 Apache Airflow를 활용했습니다. 그러나 해당 크롤러를 dev 환경(AWS ECS)에 배포하여 실행하자, 로컬에서 정상 처리되던 태스크가 Airflow에서 실패(Failed) 상태로 종료…
November 23, 2025
현재 저희 서비스의 DEV 환경은 다음과 같이 구성되어 있습니다. 오케스트레이션: AWS EKS 위에 Spring Boot 애플리케이션을 파드로 배포 배포: ArgoCD(GitOps)로 매니페스트를 동기화, 갱신은 기본 전략인 롤링 업데이트(rolling update) 트래픽 인입: ALB Ingress + AWS Load Balancer Controll…
April 30, 2025
이 글은 "S락·X락·갭 락·락 승격 — InnoDB 락 노트"에 이어지는 2편입니다. 1편에서 정리한 공유락(S)·배타락(X)·락 승격 개념을 그대로 가져다 씁니다. 운영 DB 모니터링에서 데드락(deadlock) 기록을 발견했습니다. 데드락 로그가 지목한 문장은 에 행 하나를 넣는 upsert 쿼리였습니다. 단순해 보이는 INSERT 한 번이 교착에 …
April 21, 2025
운영 DB에서 데드락(deadlock) 로그를 읽다가, , 같은 표현이 어떤 락을 가리키는지는 알아도 어떤 문장이 왜 그 락을 잡았는지는 바로 설명하기 어려웠습니다. 그래서 데드락 추적에 앞서 락부터 정리했습니다. 이 글은 그 정리 노트입니다. InnoDB가 행을 어떻게 잠그는지 따라가며, 다음 편에서 다룰 데드락의 배경을 먼저 정리합니다. (개념 설명…
January 22, 2025
대용량 처리를 위해 엑셀 파일 생성 구현체를 변경했습니다. 로컬과 DEV 환경에서 검증을 마치고 운영 서버에 배포했는데, 운영 환경의 엑셀 다운로드 API에서 에러가 발생했습니다. 1. 현상 분석: 스프링 예외로 감싸인 네이티브 에러 로그에서 가장 먼저 확인한 것은 스프링 MVC의 예외였습니다. 로그 상단의 는 Spring MVC에서 요청을 처리(컨트롤…
December 26, 2024
핵사고날 아키텍처(Hexagonal Architecture)를 사용하는 프로젝트에 합류했습니다. 합류 초기에는 이 아키텍처를 도입한 이유를 파악하지 못한 상태였습니다. 포트(Port) 하나, 어댑터(Adapter) 하나, 그 사이를 잇는 매퍼(Mapper)까지. 기능 하나를 추가할 때마다 비슷한 파일이 서너 개씩 늘어났습니다. 이 정도 복잡도에 레이어마다…