본문 바로가기
728x90

분류 전체보기76

Java ForkJoinPool의 함정: OutOfMemoryError 장애 분석기 32코어 서버에서 초당 10건의 요청만으로 32,000개의 스레드가 생성되어 서버가 다운된 이유를 추적한 기록TL;DR증상: OutOfMemoryError: unable to create native thread 발생으로 서버 다운트래픽: 최대 10 TPS (초당 10건 요청)원인: 요청마다 new ForkJoinPool(32)을 생성하고 shutdown()을 호출하지 않아 스레드가 무한 누적1. 장애 발생어느 날 아침, 금칙어 필터링 서버에서 다음과 같은 에러가 발생하며 프로세스가 죽었습니다.java.lang.OutOfMemoryError: unable to create native thread:possibly out of memory or process/resource limits reached .. 2026. 1. 31.
n8n으로 Redmine 일감 생성 자동화하기 - 개발자를 위한 워크플로우 자동화 가이드 개요최근 AI를 통한 업무 자동화에 관심이 생겨 관련 기술을 탐색하던 중 n8n이라는 툴을 접하게 되었다. n8n은 GUI 기반으로 다양한 연동을 지원하여 손쉽게 업무 자동화를 가능하게 해주는 오픈소스 워크플로우 자동화 도구다. 제공되는 기능 외에 필요한 기능이 있다면 JavaScript 또는 Python으로 직접 코드를 작성하여 연동할 수 있기 때문에 개발자에게 특히 적합하다고 생각했다. 업무 중 개발 외적으로 해야 하는 여러 반복 작업들이 있는데, 그중에서 자동화할 만한 작업을 찾던 중 매주 초에 운영팀에 배포 요청 Redmine 일감을 만드는 작업을 자동화하기로 결정했다. 우리 팀은 총 5개의 서비스를 관리하고 있는데, 모든 서비스에 수정사항이 있다면 5개의 일감을 각각 만들어 요청해야 한다. 귀찮.. 2026. 1. 30.
Spring Boot 3 업그레이드 [5] - 인프라 구축 및 배포 준비 개요코드 수정이 완료되었다면 이제 실제 배포를 위한 인프라를 구축해야 한다. 이번 포스트에서는 신규 서버에서의 Redis 설정, Tomcat 설정, 그리고 배포 스크립트 작성까지 전체 배포 준비 과정을 정리한다. Tomcat 설정1. 캐시 설정Tomcat 기동 시 캐시 부족 관련 warning이 발생하여 설정을 추가했다:WARNING [main] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/classes/templates/...] to the cache because there was insufficient free space available해결: tomcat/conf/context.x.. 2025. 12. 29.
Spring Boot 3 업그레이드 [4] - Thymeleaf 3 마이그레이션 개요Thymeleaf 2에서 3으로 업그레이드하면서 문법이 일부 변경되었다. 프로젝트 전체에 걸쳐 수백 개의 HTML 파일이 있었기 때문에 수동으로 변경하기에는 무리가 있었다. 이번 포스트에서는 IntelliJ의 정규식 기능을 활용한 일괄 변경 방법과 Thymeleaf 3에서 마주친 렌더링 이슈 해결 방법을 공유한다. Deprecated 문법 변경Thymeleaf 3에서 변경된 주요 문법은 다음과 같다:th:include → th:insertth:replace="template" → th:replace="~{template}"layout:decorator → layout:decorate정규식을 활용한 일괄 변경프로젝트 내에 이런 구문이 수백 개 있기 때문에 IntelliJ의 정규식 치환 기능을 사용했다... 2025. 12. 29.