AWS ECS에서 Java + Spring Boot 어플리케이션 메모리 설정

ECS에서 Java 애플리케이션을 운영할 때, JVM Heap을 얼마나 잡아야 하는지 정리합니다. 컨테이너 환경의 메모리 구조 기존 서버 환경에서는 OS가 물리 메모리를 먼저 차지하고, 나머지를 JVM이 사용했습니다. [VM/서버] 물리 메모리 → OS 커널 + 시스템 프로세스 → JVM ECS 컨테이너는 다릅니다. 호스트 OS 커널을 공유하기 때문에, Task에 할당된 메모리를 OS 몫 없이 컨테이너가 사용할 수 있습니다. 사이드카가 있으면 여러 컨테이너가 나눠 쓰지만, 이 문서에서는 메인 컨테이너만 있는 경우를 다룹니다. [ECS Task] Task 메모리 ≈ JVM 전용 “OS 몫을 남겨야 한다"는 상식은 컨테이너 환경에서는 불필요합니다. Fargate든 EC2든 Task 내부의 메모리 설정은 동일합니다. ...

2026년 2월 11일

Spring Boot 설정 파일 로딩

Spring Boot의 설정 파일 로딩 메커니즘과 외부 라이브러리 사용 시 발생하는 문제를 다룹니다. ConfigData API (Spring Boot 2.4+) Spring Boot 2.4 부터 설정 로딩 방식이 ConfigData API로 변경되었습니다. 주요 변경사항 Spring Cloud Bootstrap Context 대체 (bootstrap.yml → application.yml) 단일 ApplicationContext 사용 spring.config.import 도입 설정 파일 로딩 기본 동작 검색 위치 Spring Boot는 다음 위치에서 설정 파일을 검색합니다 (낮은 → 높은 우선순위): 1. classpath:/application.yml 2. classpath:/config/application.yml 3. file:./application.yml 4. file:./config/application.yml 5. file:./config/*/application.yml 로딩 규칙 다른 경로: 모두 로드 후 병합 같은 classpath 경로: 첫 번째만 사용 Oracle Java 문서: 여러 모듈이 동일한 클래스 로더에 정의되고, 둘 이상의 모듈이 주어진 이름의 리소스를 포함하는 경우, 모듈이 검색되는 순서는 명시되지 않으며 매우 예측할 수 없을 수 있습니다. 우선순위 나중에 로드된 것이 우선: ...

2025년 11월 26일

Spring Boot 애플리케이션 웜업

Spring Boot 배포 직후 첫 요청이 느린 이유를 JVM 동작 원리부터 설명합니다. 컴파일러와 인터프리터 컴파일러 언어 (C/C++) 전체 코드를 한번에 기계어로 변환 실행 속도 빠름 플랫폼 종속적 인터프리터 언어 (Python) 코드를 한 줄씩 해석하며 실행 실행 속도 느림 플랫폼 독립적 자바 동작 방식 자바 1990년대 설계 철학 이식성: Write Once, Run Anywhere 안전성: 메모리 보호, 타입 검증 개발 생산성: 자동 메모리 관리 HelloWorld.java (소스코드) → javac (컴파일) → HelloWorld.class (바이트코드) → java (JVM) → 실행 단점 바이트코드 인터프리터 실행으로 성능이 느렸습니다. ...

2025년 11월 25일