ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 애플리케이션을 Amazon ECS에 배포하기 (on ECS)
    CICD 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 서비스에서 이미지를 쉽게 가져올 수 있습니다.

    1. AWS 콘솔에서 새 ECR 저장소 생성
    2. 이미지에 ECR URL로 태그 지정
    docker tag demo-app-liberica-multi-stage:latest [ECR-URL]/demo-app-liberica
    1. 로그인 후 이미지 푸시
    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에-배포하기 [정리를 해보아요:티스토리]

    반응형
Designed by Tistory.