Spring Boot 애플리케이션을 Amazon ECS에 배포하기

Amazon ECS란 무엇인가요?
Amazon ECS는 컨테이너를 손쉽게 관리할 수 있는 AWS의 서비스입니다. 개발자는 서버 설정이나 오케스트레이션 복잡도를 줄이고, 애플리케이션을 자동으로 배포·확장·모니터링할 수 있습니다.
준비물 체크
배포를 시작하려면 다음이 필요합니다:
Java & Spring Boot 프로젝트
Docker(이미지 빌드용)
AWS CLI(명령어 실행/이미지 푸시용)
Spring Boot Docker 이미지 만들기
Spring Boot 프로젝트를 준비했다면, 아래와 같이 Dockerfile을 이용해 이미지를 빌드합니다. 다중 단계(Docker multi-stage)를 활용하면 이미지가 더 작아집니다.
FROM bellsoft/liberica-runtime-container:jdk-21-musl as builder
WORKDIR /app
COPY .mvn/ .mvn
COPY mvnw pom.xml ./
COPY src src
RUN ./mvnw clean package -DskipTests
FROM bellsoft/liberica-runtime-container:jre-21-slim-musl AS optimizer
WORKDIR /app
COPY /app/target/*.jar app.jar
RUN java -Djarmode=tools -jar app.jar extract --layers --destination extracted
FROM bellsoft/liberica-runtime-container:jre-21-slim-musl AS final
WORKDIR /app
EXPOSE 8080
COPY /app/extracted/dependencies/ ./
COPY /app/extracted/spring-boot-loader/ ./
COPY /app/extracted/snapshot-dependencies/ ./
COPY /app/extracted/application/ ./
RUN rm -rf src .mvn mvnw pom.xml target /var/cache/apk/*
ENTRYPOINT [java, -jar, /app/app.jar]
빌드 명령:
docker build . -t demo-app-liberica-multi-stage -f Dockerfile-liberica-multi-stage
ECR에 Docker 이미지 저장하기
ECR(Elastic Container Registry)에 저장하면 AWS 서비스에서 이미지를 쉽게 가져올 수 있습니다.
AWS 콘솔에서 새 ECR 저장소 생성
이미지에 ECR URL로 태그 지정
docker tag demo-app-liberica-multi-stage:latest [ECR-URL]/demo-app-liberica
로그인 후 이미지 푸시
aws ecr get-login-password --region [region] | docker login --username AWS --password-stdin [ECR-URL]
docker push [ECR-URL]/demo-app-liberica
ECS에서 태스크 정의하기
ECS 콘솔에서 태스크 정의(task definition)를 생성하면서 이미지 위치, 포트, 리소스(메모리/CPU 등)를 설정합니다.
컨테이너 이름 지정
이미지 URI 입력(ECR URL)
포트 매핑(예: 웹앱이면 80 포트)
필요 리소스 설정: vCPU, 메모리(애플리케이션 특성에 맞게 선택)
ECS 클러스터 만들기
배포할 공간인 클러스터를 생성합니다.
이름 지정
Fargate 선택(서버 관리 필요 없음)
몇 초 안에 클러스터가 생성됨
서비스 배포 및 관리
클러스터 안에서 서비스를 배포하면 자동으로 컨테이너가 실행되고, 장애 시 자동 복구됩니다.
서비스 이름과 태스크 정의 지정
원하는 수의 태스크(1개 이상) 선택
FARGATE 타입, 필요 시 롤링 업데이트 설정
보안을 위해 Security Group 연결
배포 상태 확인 및 접근
서비스가 생성되면 ECS에서 상태 확인이 가능하고, 퍼블릭 IP를 통해 애플리케이션을 바로 테스트할 수 있습니다. 예시: /welcome API 호출 시 정상 응답 확인
확장 및 업데이트 방법
서비스의 태스크 수만 바꾸면 바로 확장(Scale Up/Down) 가능
새로운 이미지 배포 시 ‘Force new deployment’ 옵션으로 이전 버전이 남지 않게 강제 갱신
팁과 주의사항
Docker 이미지는 가능하면 최적화해서 용량을 줄이는 것이 좋습니다(빨리 배포됨)
사용하지 않는 이미지는 삭제하여 불필요한 비용 발생을 막습니다
ECS 활용 시 자동화, 확장, 모니터링이 쉬워집니다
마무리
Amazon ECS를 이용하면 Spring Boot 컨테이너 앱을 클라우드에 쉽고 안전하게 배포할 수 있습니다. 단계별로 따라 하면 누구나 시작할 수 있습니다!