ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Amazon ECS에 Spring Boot 어플리케이션 배포 한눈에 보기
    CICD 2025. 9. 4. 15:18
    반응형

    Amazon ECS란 무엇인가요?

    Amazon ECS는 컨테이너 관리와 오케스트레이션을 자동으로 처리해주는 AWS 서비스입니다. 도커 이미지를 쉽게 배포, 관리, 확장할 수 있어서 많은 기업들이 선택하고 있습니다.

    준비사항

    Spring Boot와 Java로 개발한 애플리케이션, Docker 파일, 그리고 AWS CLI(명령줄 도구)가 필요합니다. AWS CLI는 인증 정보를 미리 세팅해야 다양한 AWS 자원을 사용할 수 있습니다.

    Spring Boot 애플리케이션을 도커로 빌드하기

    Spring Boot 프로젝트를 아래와 같이 Docker 이미지로 패키징할 수 있습니다. 멀티 스테이지로 이미지를 최적화하는 Dockerfile 예시입니다.

    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에 이미지 저장소 만들기

    만든 도커 이미지는 Amazon ECR(이미지 저장소)에 올려야 ECS에서 사용할 수 있습니다. AWS 콘솔에서 저장소를 새로 만들고 이름만 입력하면 완료됩니다.

    ECR로 도커 이미지 푸시하기

    이미지 태그 수정 및 로그인, 푸시 방법은 다음과 같습니다.

    docker tag demo-app-liberica-multi-stage:latest <계정ID>.dkr.ecr.<리전>.amazonaws.com/<레포명>
    aws ecr get-login-password --region <리전> | docker login --username AWS --password-stdin <계정ID>.dkr.ecr.<리전>.amazonaws.com
    docker push <계정ID>.dkr.ecr.<리전>.amazonaws.com/<레포명>

    이제 도커 이미지는 ECR에 올라가고 ECS에서 바로 가져다 쓸 수 있습니다.

    ECS 태스크 정의 만들기

    ECS 대시보드에서 태스크 정의를 만듭니다. 실행 환경(Fargate, 리눅스, 리소스)과 도커 이미지 위치, 포트 설정 등을 입력합니다. 리소스 옵션(메모리, vCPU)은 앱 요구에 맞게 조절하세요.

    ECS 클러스터 생성

    클러스터는 태스크들을 묶어 관리하는 그룹입니다. Fargate 타입을 선택하면 서버 관리 없이 클러스터를 만들 수 있습니다. 클러스터 이름만 정하면 준비 완료!

    서비스를 통한 태스크 배포하기

    클러스터에 태스크 정의를 붙여 ‘서비스’ 형태로 배포하면 확장/관리가 쉬워집니다. 서비스는 항상 원하는 태스크 개수(예: 1개)를 유지해서 장애 발생 시 자동으로 복구해줍니다. 네트워킹(보안 그룹) 설정도 이 단계에서 진행합니다.

    운영 관리: 확장과 재배포

    서비스의 desired tasks 숫자만 바꾸면 자동으로 배포되는 태스크 수가 늘거나 줄어듭니다. 이미지 업데이트가 필요하다면 “Force new deployment” 옵션을 반드시 선택하세요.

    실전 팁 & 마무리

    도커 이미지가 작을수록 배포가 빠릅니다. 불필요한 이미지는 비용이 발생하니 꼭 주기적으로 삭제하세요. Amazon ECS를 활용하면 개발자가 인프라 고민 없이 손쉽게 Spring Boot 앱을 서비스할 수 있습니다.

     

    반응형
Designed by Tistory.