Pin-Up 프로젝트: AWS로 배포 및 운영 환경 구축
안녕하세요! 이번 블로그 포스트에서는 Pin-Up 프로젝트에서 AWS를 활용하여 Spring Boot 애플리케이션을 배포하고 운영하는 과정에 대해 소개하려고 합니다. EC2, S3, PostgreSQL, Docker, Nginx 등을 활용한 전체적인 흐름을 단계별로 나누어 설명할게요. 이 과정은 실제로 운영 환경을 구축하는 데 필요한 다양한 기술을 다뤘습니다.
프로젝트 개요
이번 프로젝트는 AWS 인프라를 기반으로 Pin-Up 애플리케이션을 배포하고 운영하기 위한 환경을 구축하는 것입니다. 이를 통해 서버 호스팅, 이미지 업로드 및 저장, 데이터베이스 운영, 리버스 프록시 설정 등의 다양한 기능을 설정했습니다. 그럼 각 단계별로 어떻게 진행했는지 살펴보겠습니다.
1. 프로젝트 개요
- 프로젝트 명: (예: 개인 프로젝트 AWS 배포)
- 목적: EC2, S3, RDS(PostgreSQL), Docker 등을 활용하여 Spring Boot 애플리케이션을 배포 및 운영하는 환경 구축
- 주요 기술 스택:
- AWS EC2 (서버 호스팅)
- AWS S3 (이미지 업로드 & 저장)
- AWS IAM (권한 관리)
- Docker (PostgreSQL 데이터베이스 운영)
- Spring Boot (백엔드 애플리케이션)
- Nginx (리버스 프록시 서버)
- Route 53 (도메인 네임 관리)
- Elastic IP (EIP) (고정 IP)
- AWS ECR (컨테이너 이미지 저장소)
2. AWS 인프라 구성
- EC2: 백엔드 서버 호스팅
- S3: 이미지 파일 저장
- IAM: EC2가 S3 및 ECR에 접근할 수 있도록 권한 설정
- PostgreSQL (Docker): 데이터베이스 운영
- Nginx: 리버스 프록시 설정
- Route 53: 도메인 이름 관리 및 Elastic IP 연결
- Elastic IP (EIP): 고정된 IP 주소 사용하여 서버에 안정적인 접근 가능
- ECR (Elastic Container Registry): 컨테이너 이미지 저장 및 배포
3. 배포 과정
- EC2 인스턴스 생성 및 기본 설정
- SSH 접속 및 패키지 업데이트
- 방화벽 및 보안 그룹 설정
- Elastic IP 할당 및 EC2에 연결
- AWS S3 버킷 생성 및 이미지 업로드 연동
- 버킷 생성 및 퍼블릭 액세스 차단 설정
- IAM 역할 설정하여 EC2가 S3에 접근하도록 권한 부여
- PostgreSQL을 Docker로 실행 및 Spring Boot 연결
- Docker 설치
- PostgreSQL 컨테이너 실행 및 데이터베이스 구성
- Spring Boot 애플리케이션에 데이터베이스 연결 설정
- Spring Boot 애플리케이션 배포
- JAR 파일 빌드 및 EC2로 전송
- 애플리케이션 실행 및 테스트
- Route 53에서 도메인 연결
- Route 53에서 도메인 설정 및 Elastic IP에 연결
- DNS 레코드를 통해 도메인 네임과 서버 연결
- 도메인 소유권 인증 (Route 53 + Google 개발자 콘솔)
- 상황: 구글 로그인 기능을 설정하려고 했으나, Google 개발자 콘솔에서 도메인 소유권 확인을 요구하는 이메일을 받음.
- 요청 사항: 도메인 소유권을 확인하여 도메인과 앱을 연결해야 로그인 기능이 활성화됨.
- 해결: AWS Route 53에서 TXT 레코드를 추가하여 도메인 소유권을 인증함.
- Nginx 설치 및 리버스 프록시 설정
- Nginx 설치 및
proxy_pass를 이용한 Spring Boot 서버 연결
- HTTP 요청을 Spring Boot 애플리케이션으로 포워딩
- SSL 인증서 추가 (HTTPS 설정)
- Let's Encrypt 인증서 발급 (Certbot 사용)
- HTTPS로 보안 연결 설정
- 인증서 자동 갱신 설정
- AWS ECR과 보안 관리
- Docker Hub vs AWS ECR vs GCP GCR 비교
- AWS ECR을 선택한 이유: 보안 강화, AWS 서비스와의 원활한 통합, 비용 절감
- IAM을 활용한 ECR 접근 제어 설정
- 애플리케이션 운영
- EC2에서 애플리케이션 실행 상태 모니터링
- 로그 및 성능 모니터링을 위한 툴 사용 (예: CloudWatch) — 추후에 설정 예정
- 필요한 경우 자동 확장(Auto Scaling) 및 로드 밸런서 설정 — 추후에 설정 예정