백엔드 깊이보기

Spring, JPA, Kotlin, 대용량 트래픽 — 한국 백엔드 개발자를 위한 실전 기술 블로그.

/healthz 아래 어드민 API가 인증 없이 열려 있었다

spring bootactuatorcve보안인증 우회health check

운영 서버의 /healthz/admin 엔드포인트에 인증을 걸어놨는데, 브라우저에서 토큰 없이 접근이 됐다. 처음엔 Spring Security 설정을 잘못 한 줄 알았다. 설정 파일을 세 번 뒤져봐도 문제가 없었다. 알고 보니 Spring Boot Actuator가 인증 정책을 통째로 삼키고 있었다. #Health Group 경로가 인증을 먹는 구조 CV

코루틴 도입하고 서버 메모리가 새기 시작했다

kotlincoroutinespring bootstructured concurrency장애대응intellij

새벽 2시 반, 슬랙 알림이 울렸다. "API 응답 지연 3초 초과." Kotlin + Spring Boot 서버였고, 코루틴을 "제대로" 도입한 지 2주째. 그라파나를 열어보니 힙 메모리가 톱니바퀴처럼 올라가다 GC 한 번에 뚝 떨어지는 패턴이 아니라, 그냥 일직선으로 우상향하고 있었다. 코루틴 자체의 문제가 아니었다.

Spring Boot 3.x에서 4.0으로 — 마이그레이션 전에 확인할 것들

spring boot마이그레이션spring framework 7jakarta eejava

Spring Boot 4.0 마이그레이션은 코드 변경보다 서드파티 라이브러리 호환성이 진짜 병목이며, 빌드를 올리기 전에 의존성 전수 조사부터 해야 한다. Spring Boot 4.0.5까지 나온 마당에, 여전히 3.x에서 업그레이드를 미루고 있는 팀이 꽤 많다. 2에서 3으로 넘어갈 때 javax에서 jakarta로 패키지를 전부 바꾸느라 며칠을 통째로

Virtual Thread 켜고 HikariCP가 죽었다

virtual threadhikaricpconnection poolspring boot장애대응

운영 서버에 Virtual Thread를 켰다. 성능 테스트에서 처리량이 3배 올랐다. 팀 전체가 기분 좋았다. 그리고 다음 날 새벽, 슬랙 알람이 터졌다. #뭐가 문제였나 Java 21의 Virtual Thread는 스레드를 거의 무제한으로 만들어준다. 기존 플랫폼 스레드 200개 제한이 사라지니까, 동시 요청이 수천 개까지 올라간다. 문제는 DB 커넥션

Spring Security가 보안 헤더를 조용히 삼킨 날

spring securitycve보안장애대응http 헤더

Spring Security가 설정한 보안 헤더를 조용히 삼켜버리는 CVE-2026-22732가 3월에 공개됐는데, 영향 범위가 5.7부터 7.0까지 사실상 운영 중인 거의 모든 버전이다. 금요일 새벽 2시, 슬랙에 보안팀 알림이 떴다. 🚨 주간 보안 스캔 결과: CSP 헤더 미탐지, HSTS 미탐지, X-Frame-Options 미탐지 처음엔 스캐너 오