[Spring JPA] 클라우드_아키텍처 설계 & 배포 Lv.1

김재진·2026년 1월 30일

내일배움캠프

목록 보기
43/70

1. 선요약

Spring Boot 애플리케이션을 AWS EC2(t4g.small) 환경에 Docker Compose를 활용하여 배포함. 특히 로컬 환경과 서버 환경의 CPU 아키텍처 차이(x86 vs ARM64)로 인한 문제를 해결하며 멀티 플랫폼 빌드의 중요성을 학습함.

2. 주요 학습 내용

1. VPC 및 인프라 설계

  • Public Subnet: 외부 접속이 필요한 EC2 인스턴스 배치.
  • Security Group: 서비스 포트(8080)와 관리 포트(22)를 분리하여 보안 설정.

2. Spring Boot 운영 설정

  • Multi-Profile 관리: local(H2)과 prod(MySQL) 프로파일을 분리하여 환경별 유연한 설정 적용.
  • Actuator: /actuator/health 엔드포인트를 통해 애플리케이션의 상태를 실시간으로 모니터링(UP 상태 확인).
  • Logging: INFO 레벨로 요청 로그를 남기고, 예외 발생 시 스택트레이스를 포함한 ERROR 로그 전략 수립.

3. Docker를 이용한 가상화 배포

  • Multi-stage Build: 빌드 스테이지(Gradle)와 실행 스테이지(JRE)를 분리하여 최종 이미지 크기 최적화 및 보안 강화.
  • Docker Compose: 애플리케이션과 DB(MySQL)를 하나의 네트워크로 묶어 서비스 간 가용한 환경 구축.

3. 해결한 트러블슈팅 (Troubleshooting)

문제 상황: no matching manifest for linux/arm64/v8

  • 현상: EC2(t4g.small)에서 docker-compose up 실행 시 이미지를 불러오지 못하거나 실행 시 exec format error 발생.

  • 원인: 로컬 PC(Intel x86)와 EC2 서버(AWS Graviton ARM64)의 CPU 아키텍처가 불일치하여 발생한 문제.

  • 해결: Docker 이미지 빌드 시 --platform linux/arm64 옵션을 추가하여 서버 아키텍처에 맞는 바이너리 생성.
    docker-compose.yml 내 MySQL 이미지 설정에 platform: linux/arm64 명시.

4. 깨달은 점

운영 환경의 중요성: 로컬에서 잘 돌아가는 코드가 서버에서 실패할 수 있는 변수(아키텍처, 환경 변수 등)가 많음을 체감함.
Docker의 위력: 환경이 바뀌어도 컨테이너 설정만 잘 맞추면 어디서든 동일하게 구동할 수 있다는 점이 강력함을 배움.
Health Check: 단순히 서버를 띄우는 것보다, Actuator를 통해 실제 서비스 가능 여부를 체크하는 과정이 운영의 필수 요소임을 알게 됨.

profile
개발공부 처음해보는 사람

0개의 댓글