CICD
Spring Boot 애플리케이션을 Amazon ECS에 배포하기 (on ECS)
소금찍은사과
2025. 9. 4. 15:15
반응형

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 --from=builder /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 --from=optimizer /app/extracted/dependencies/ ./
COPY --from=optimizer /app/extracted/spring-boot-loader/ ./
COPY --from=optimizer /app/extracted/snapshot-dependencies/ ./
COPY --from=optimizer /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 컨테이너 앱을 클라우드에 쉽고 안전하게 배포할 수 있습니다. 단계별로 따라 하면 누구나 시작할 수 있습니다!
출처: https://jyha81.tistory.com/entry/Spring-Boot-애플리케이션을-Amazon-ECS에-배포하기 [정리를 해보아요:티스토리]
반응형