본문 바로가기

전체 글3

추측하지 말고 측정하라: 엑셀 다운로드 OOM 분석기 Java 8 / Spring MVC / Tomcat 8.x 레거시 시스템에서 발생한 엑셀 다운로드 OOM을 힙 덤프로 추적하고, 수치로 검증한 과정을 기록한다.장애 발생어느 날 운영 서버에서 알람이 울렸다.java.lang.OutOfMemoryError: Java heap space at ....CommonUtil.makeExcel(CommonUtil.java:842)엑셀 다운로드 요청 하나에 -Xmx2GB JVM이 죽었다. 처리하던 데이터는 외부 상품권 API에서 받아온 약 139,699건이었다.첫 반응은 "데이터가 너무 많아서 그런 거 아냐?" 였다. 맞다. 근데 그게 전부가 아니었다. 왜 139,699건에서 2GB가 모자란지를 알아야 진짜 해결책이 나온다.추측 대신 힙 덤프추측으로 코드를 고치는 .. 2026. 5. 22.
Spring Boot Data Source Test 스프링 부트 테스트 환경에서 H2 데이터베이스로 연결되지 않는 현상을 경험했습니다.왜 이런 일이 발생했을까요?현상src/main/resources/application.ymlspring: application: name: 2026-springboot-datasource datasource: hikari: jdbc-url: jdbc:postgresql://localhost:5432/postgres username: postgres password: 5432 driver-class-name: org.postgresql.Driver테스트 환경에서는 H2 를 설정 했습니다.src/test/resources/application-test.ymlspring: da.. 2026. 4. 1.
2025년 12월 31일이 2026년으로 출력되는 이유 (yyyy vs YYYY) 자바에서 날짜를 포맷팅할 때 yyyy 와 YYYY 가 다른게 동작하는거 알고 계셨나요?연말에 날짜가 미래로 찍히는 황당한 버그를 만났습니다.문제 현상: 2025년이 2026년으로?2025년 12월 28일은 일요일입니다. 이 날짜를 YYYYMMdd 패턴으로 포맷팅하면 어떤 결과가 나올까요? 놀랍게도 결과는 20261228이 됩니다.실제 테스트 코드로 확인해 보겠습니다.@Test@DisplayName("SimpleDateFormat에서 대문자 YYYY를 사용하면 2025년 12월 28일은 2026년으로 출력된다")void simpleDateFormatTest() { // Given: 2025년 12월 28일 설정 (일요일) Calendar cal = Calendar.getInstance(); .. 2026. 4. 1.