Memory Leak 판별을 위한 Heap Dump
일본어 검색 API를 활용하는 서비스의 메모리 증가 문제를 로컬에서 재현하고, Heap Dump와 VisualVM으로 누수 여부를 판별해 “Memory Leak 아님” 결론에 도달한 과정을 정리했다.
일본어 검색 API를 활용하는 서비스의 메모리 증가 문제를 로컬에서 재현하고, Heap Dump와 VisualVM으로 누수 여부를 판별해 “Memory Leak 아님” 결론에 도달한 과정을 정리했다.
WebFlux 기반 BFF에서 multipart/form-data를 내부 서비스로 프록시할 때, multipart를 파싱한 뒤 재조립하면서도 원본 헤더(Content-Type/Content-Length)를 그대로 복사하면 boundary·길이가 body와 불일치해 “Unexpected end of form”이 발생한다. BodyInserters가 메시지를 재작성(write)한다는 관점과, 프록시를 “재작성(rebuild)”/“바이트 스트리밍(pass-through)” 모드로 구분하는 기준을 정리한다.
사내에서 JDK 버전 업데이트 태스크를 담당하며 개발계에서 마주한 장애와 이를 해결하는 과정을 다룬다.
AWS 환경에서 클라이언트(web) → 서버(VPC 내부) 호출 시, Internet Gateway(IGW)를 통한 첫 진입은 내부 통신보다 훨씬 비싸다. 요청 수를 줄이는 것은 단순한 최적화가 아니라, 가장 비싼 네트워크 경계를 덜 넘는 설계의 문제다.
필자는 강남언니(힐링페이퍼)의 기술블로그를 읽고 이벤트 소싱 패턴에 대해 관심을 가지게 되었고, 이에 대한 학습을 진행하면서 기존의 Platform Thread와 Virtual Thread에 대해 비교하는 글을 정리해보기로 하였다.
필자는 최근 프로젝트에서 Spring Security를 적용하며 JWT 기반 인증/인가 로직을 구현하였다. Spring Security는 기본적으로 모든 요청을 차단하고, 인증/인가 규칙에 따라 접근을 허용하는 보안 프레임워크이다. 본 글에서는 JWT 기반의 Stateless 인증 방식을 도입하며 마주한 이슈들과 해결 과정을 공유하고자 한다.
사이드 프로젝트를 진행하며 백오피스를 개발하게 되었고, 그 과정에서 관리자 로그인 페이지 구현을 맡게 되었다. 인증 방식으로 JWT 기반 접근 방식을 선택하였고, Access Token의 탈취를 방지하기 위해 짧은 TTL을 설정하였다. 그러나 구현 도중 “만약 Refresh Token이 탈취된다면 어떻게 대응해야 할까?”라는 의문이 생겼고, 이를 해결할 수 있는 방안을 탐색하게 되었다.
📉 빌드 34 → 6 초, 테스트 33 → 1.4 초. 7단계 분리를 거쳐서 모노리스를 “모듈화된 모노리스”로 탈바꿈했다. 이 글은 MSA를 향한 징검다리로서의 멀티모듈 전환기를 기록한 회고록이다.
스프링 부트를 멀티모듈로 개발하다보면 settings.gradle과 build.gradle의 책임이 헷갈릴 때가 있다. 필자는 이 글에서 둘의 역할과 차이점을 명확히 정리해보고자 한다.
필자는 모듈화된 Java / Kotlin 프로젝트에서 가장 자주 헷갈리는 api와 implementation 스코프의 차이와 선택 기준을 명확히 정리해보고자 한다.