Fredko Dev Log

Long-Lived Transactions의 한계와 Saga

Intro 단일 DB에서 복잡한 다단계 비즈니스 흐름을 ACID 트랜잭션으로 구현하다 보면, 외부 API 호출이 없더라도 순수 DB 작업만으로 트랜잭션이 길어지면서 다양한 문제가 발생합니다. 락 경합, 타임아웃, 동시성 이슈 등으로 인해 시스템 안정성이 흔들리고, 결국 확장성에 한계를 느끼게 되는 경우가 많습니다. 이번 글에서는 1987년 Saga...

파편화된 개발 환경을 통합하자 - mise로 구축하는 No-Shim 통합 환경

Intro 개발 환경을 구성할 때 우리는 늘 선택의 기로에 섭니다. Node.js 관리를 위해 fnm이나 Volta를 설치하고, Java 기반 프로젝트를 위해 다시 SDKMAN을 설정하는 과정은 이제 개발자의 통과 의례와도 같습니다. 하지만 도구가 늘어날수록 관리 포인트는 파편화됩니다. 각 도구마다 다른 설정 파일(.nvmrc, .sdkmanrc ...

분산 시스템 PK 전략 - UUIDv7은 과연 AUTO_INCREMENT를 대체할 수 있는가? 성능은?

Intro 현대적인 백엔드 아키텍처를 설계할 때, Primary Key(PK) 선택은 시스템의 확장성과 성능을 결정짓는 가장 기초적이면서도 중요한 의사결정입니다. 과거에는 AUTO_INCREMENT가 표준이었으나, MSA(Microservices Architecture)와 분산 시스템이 주류가 되면서 UUID의 필요성이 대두되었습니다. 특히 최근 ...

Ephemeral Port Exhaustion - 대량의 트래픽 처리 시 발생하는 임시 포트 고갈 문제와 해결 전략

Intro MSA(Microservices Architecture) 환경이나 외부 API 연동이 잦은 시스템을 개발하다 보면, CPU나 메모리 리소스는 여유가 있음에도 불구하고 갑자기 외부 요청이 실패하거나 타임아웃이 발생하는 현상을 마주할 때가 있습니다. 로그를 자세히 살펴보면 EADDRNOTAVAIL 같은 에러를 발견하게 되는데, 이는 애플리케이...

Write Forwarding - 코드 변경 없이 Read - Write 부하분산하기

Intro 이번 포스트에서는 운영 중인 서비스에서 DB 부하를 분산하기 위해 도입한 ‘Write Forwarding’에 대해 공유하려 합니다. 트래픽 증가로 인해 단일 DB 인스턴스가 한계를 드러낼 때, 코드 변경 없이 효과적으로 스케일링하는 방법을 찾는 분들에게 도움이 되기를 바랍니다. AWS Aurora 환경을 중심으로 설명하겠지만, 비슷한 고민...

Vault 이전을 위한 HashiCorp Vault MCP 서버 개발

Intro 쿠버네티스 클러스터를 새로 이전하면서 기존 자원을 안전하게 이관해야 했다. Stateful 서비스 중 HashiCorp Vault의 시크릿 마이그레이션이 가장 까다로웠다. 과거에는 스크립트로 대응했지만, 이번에는 “Vault MCP 서버”라는 전용 도구를 개발했다. 이 접근은 운영 리스크를 구조적으로 줄이는 데 초점을 맞췄고, 결과는 만족...