@yunhobb
녹차 주도 개발

R2DBC 환경에서 AWS Secrets Manager 적용하기

June 25, 2026

리액티브 스택(Spring Data R2DBC + MariaDB)으로 도는 배치 서비스의 DB 자격증명을 정적 비밀번호에서 AWS Secrets Manager 동적 조회로 옮겨야 했습니다. DB 비밀번호가 일정 주기로 자동 로테이션되도록 설정돼 있어서, 앱에 넣어 둔 정적 비밀번호로는 로테이션 직후 접속이 실패합니다. 같은 회사의 JDBC 서비스는 드라…


AWS Summit Seoul 2026 후기 — AI-DLC·에이전틱 AI·서버리스 온콜 세 세션을 개발자 시선으로

June 03, 2026

AWS Summit Seoul 2026에서 참여했던 세션을 간단하게 정리해서 공유합니다. # 세션 발표 한 줄 1 AI 기반 개발 라이프사이클(AI-DLC) AWS 김수현 · LG전자 박태진 코드 생성만 빨라져선 생산성이 안 오른다 — SDLC 전체를 AI-native로 2 Agentic AI로 만드는 비즈니스 성과 LG CNS 이상원 "AI를 도입했나…


Transactional Outbox 라이브러리에 기여하기 — CGLIB 프록시가 만든 핸들러 ID 불안정성

May 20, 2026

숙박과 장기 임대 도메인에서 개발을 하다 보면 거주자와 숙박 이용자에게 알림을 보낼 일이 자주 있습니다. 그중 계약 갱신·만료 같은 통지는 일부 누락되어도 되는 정도가 아니라, 계약 상태가 바뀌었다면 반드시 함께 나가야 하는 알림입니다. 상태는 바뀌었는데 통지가 나가지 않으면 분쟁의 소지가 됩니다. 그런데 "DB에 계약 상태를 저장하는 것"과 "알림을 발…


Toxiproxy로 Redis 장애를 주입해 캐시 fallback 검증하기 — 테스트 범위의 카오스 엔지니어링

March 20, 2026

저희 서비스는 조회 캐시와 분산락을 Redis로 처리합니다. Redis 장애로 timeout이 났을 때 조회 캐시는 원본(RDB)으로 우회하는 fallback(장애 시 대체 경로)을 두었는데, 이 fallback이 실제 장애에서 동작하는지는 확인하지 못했습니다. mock으로 예외를 던지는 테스트는 제가 의도한 예외를 확인할 뿐이었습니다. 그래서 카오스 엔…


로컬은 스킵, ECS에서는 실패 — Airflow EcsRunTaskOperator에 skip_on_exit_code 추가하기

March 13, 2026

관리비 및 공과금 데이터를 크롤링하는 파이프라인을 구축했습니다. 로컬 개발 환경에서는 크롤러를 Docker 컨테이너로 구동해 정상 동작을 확인했고, 스케줄링은 Apache Airflow로 처리했습니다. 그러나 이 크롤러를 dev 환경(AWS ECS)에 배포해 실행하자, 로컬에서 정상 처리되던 태스크가 Airflow에서 실패(Failed) 상태로 종료됐습니…


FixtureMonkey로 만든 엔티티가 저장되지 않던 이유: save()의 persist와 merge

November 19, 2025

통합 테스트(IntegrationTestSupport 상속, 실제 DB 사용)에서 FixtureMonkey로 엔티티를 만들어 저장한 뒤 다시 조회하는 코드가 있었습니다. 저장은 분명히 했는데 조회가 비거나 검증이 어긋났고, 원인은 FixtureMonkey가 필드에까지 랜덤 값을 채운 데 있었습니다. 이 글은 그 랜덤 ID가 어떻게 저장을 어긋나게 하는지…


어느 날 openjdk:21-slim이 사라졌다: deprecated 베이스 이미지에서 eclipse-temurin으로

November 04, 2025

여러 서비스(admin·customer·message·scheduler)의 Dockerfile이 모두 을 베이스 이미지로 쓰고 있었습니다. 한동안 잘 빌드되던 이미지였는데, 어느 날 빌드가 베이스 이미지를 받지 못하고 실패했습니다. 이 글은 그 원인이 "이미지 태그가 사라진 것"이었고, 왜 사라질 수 있었는지, 그리고 로 옮긴 과정을 정리합니다. 1. 현…


RDS 감사 로그에서 사용자 CUD 쿼리만 골라 Slack으로 알림 받기 — 구독 필터의 한계와 Lambda 우회

July 09, 2025

운영 DB(RDS for MySQL)는 감사 로그(audit log)를 켜 두면 모든 쿼리가 CloudWatch Logs로 쌓입니다. 여기서 원하는 건 좁습니다. 쓰기 권한이 있는 사람이 운영 DB에 직접 CUD(INSERT·UPDATE·DELETE 등) 쿼리를 날리면, 그 사실을 Slack으로 바로 알림받는 것입니다. 처음에는 "구독 필터에서 거르고 S…


INSERT 한 문장 안의 데드락 — 서브쿼리 S락과 트리거 X락, 두 단계 락의 순서 역전

April 30, 2025

이 글은 "S락·X락·갭 락·락 승격 — InnoDB 락 노트"에 이어지는 2편입니다. 1편에서 정리한 공유락(S)·배타락(X)·락 승격 개념을 그대로 가져다 씁니다. 운영 DB 모니터링에서 데드락(deadlock) 기록을 발견했습니다. 데드락 로그가 지목한 문장은 에 행 하나를 넣는 upsert 쿼리였습니다. 단순해 보이는 INSERT 한 번이 교착에 …


데드락 로그를 읽기 위한 InnoDB 락 정리 — S락·X락·갭 락·락 승격

April 21, 2025

1. 두 개의 기본 락: 공유락(S)과 배타락(X) InnoDB의 행 락은 두 종류에서 출발합니다. 공유락(Shared Lock, S): 읽기를 위한 락. 여러 트랜잭션이 같은 행에 동시에 S락을 쥘 수 있습니다. 단, 그 행을 바꾸려는 배타락은 막습니다. (과거 )로 명시적으로 걸 수 있습니다. 배타락(Exclusive Lock, X): 쓰기를 위한 락…