[DevUnion] 프로젝트 시 기본 AWS 설정하기 (실무형)

김지섭·2025년 8월 4일
0

DevUnion 프로젝트 AWS 인프라 구성 문서


프로젝트 개요

DevUnion 프로젝트는 Spring Boot 백엔드와 React 프론트엔드를 AWS 클라우드에 배포하기 위한 인프라를 구축합니다. 이 문서는 고가용성(High Availability), 보안(Security), 확장성(Scalability)을 고려한 실무 수준의 아키텍처 구성을 설명합니다.


1. 네트워크 (VPC) 인프라 구축

1.1. VPC 및 서브넷 구성

프로젝트 전용 네트워크 공간을 마련하고, 리소스의 역할에 따라 네트워크를 분리합니다.

  • VPC 이름: devunion-vpc
    • CIDR: 10.0.0.0/16
  • 서브넷 (4개):
    • devunion-public-az1 (10.0.10.0/24)
    • devunion-private-az1 (10.0.11.0/24)
    • devunion-public-az2 (10.0.20.0/24)
    • devunion-private-az2 (10.0.21.0/24)
  • 인터넷 게이트웨이 (IGW): devunion-igw
    • VPC에 연결되어 Public 서브넷의 외부 통신을 담당.
  • NAT Gateway: devunion-nat-gw-az1
    • Public 서브넷에 위치하여 Private 서브넷의 외부 통신을 안전하게 처리.
  • 라우팅 테이블:
    • devunion-public-rt: Public 서브넷과 연결, devunion-igw를 통한 라우팅 설정.
    • devunion-private-rt: Private 서브넷과 연결, devunion-nat-gw-az1을 통한 라우팅 설정.

1.2. 보안 그룹 (Security Groups) 구성

각 리소스의 가상 방화벽을 정의하여 최소 권한 원칙을 적용합니다.

  • devunion-alb-sg:
    • 설정: HTTP:80, HTTPS:443 포트의 인바운드를 0.0.0.0/0에서 허용.
  • devunion-app-sg:
    • 설정: 포트 8080 인바운드를 devunion-alb-sg에서 허용. SSH 인바운드를 devunion-bastion-sg에서 허용.
  • devunion-db-sg:
    • 설정: 포트 5432(PostgreSQL) 인바운드를 devunion-app-sg에서 허용.
  • devunion-bastion-sg:
    • 설정: SSH 인바운드를 개발자의 My IP에서만 허용.

2. 핵심 컴퓨팅 및 데이터베이스 리소스

2.1. RDS 데이터베이스 생성

  • 인스턴스 이름: devunion-db
  • 엔진: PostgreSQL
  • 인스턴스 클래스: db.t4g.micro (비용 효율적인 Graviton 프로세서)
  • 배포: Multi-AZ 구성
  • 네트워크: devunion-vpcdevunion-db-subnet-group (Private 서브넷 포함) 사용.
  • 보안 그룹: devunion-db-sg 할당.
  • 퍼블릭 액세스: 아니요 (Private 서브넷에만 존재).

2.2. EC2 Bastion Host 생성

  • 이름: devunion-bastion-host
  • OS: Ubuntu Server 22.04 LTS
  • 인스턴스 유형: t3.micro
  • 네트워크: devunion-public-az1 서브넷에 위치, 퍼블릭 IP 자동 할당.
  • 보안 그룹: devunion-bastion-sg 할당.
  • 키 페어: devunion-key.pem 사용.

2.3. ECR 저장소 생성

  • 이름: devunion-backend
  • 가시성: Private
  • 목적: Spring Boot 애플리케이션의 Docker 이미지를 저장하고 관리.

3. 프론트엔드 정적 파일 호스팅

  • S3 버킷: devunion-frontend-static
    • 설정: 서울 리전에 생성. 모든 퍼블릭 액세스 차단.
  • CloudFront:
    • 원본: devunion-frontend-static S3 버킷.
    • 보안: OAI/OAC를 통해 CloudFront만 S3에 접근 허용.
    • 정책: HTTP 요청을 HTTPS로 리디렉션.
    • 기본 루트 객체: index.html.

4. 컨테이너 오케스트레이션 (ECS)

  • ECS 클러스터: devunion-cluster
    • 인프라: AWS Fargate (서버리스) 사용.
  • Task Definition: devunion-backend-task
    • 컨테이너: devunion-backend-container (ECR 이미지 사용).
    • CPU/메모리: 0.5 vCPU, 1 GB.
    • 환경 변수: SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORD 설정.
    • IAM 역할: ecsTaskExecutionRole 할당.
  • Application Load Balancer (ALB): devunion-alb
    • 유형: Application Load Balancer
    • 리스너: HTTP:80 (추후 HTTPS:443 추가 예정).
    • 대상 그룹: devunion-backend-tg (컨테이너 포트 8080과 연결).
  • ECS Service: devunion-backend-service
    • Task Definition: devunion-backend-task 할당.
    • Desired tasks: 2 (고가용성을 위해).
    • 네트워크: Private 서브넷에 배치, devunion-app-sg 할당.
    • 로드 밸런싱: devunion-albdevunion-backend-tg 연결.

5. 비용 관리 및 유지보수

  • 비용이 발생하는 리소스:
    • Application Load Balancer
    • NAT Gateway
    • RDSEC2 (프리티어 한도 초과 시)
  • 비용 절감 조치:
    • 개발을 하지 않을 때는 ALB와 NAT Gateway를 삭제하고, RDS와 EC2 인스턴스를 중지해야 함.
    • 개발 재개 시 다시 생성/시작.
  • 모니터링: CloudWatch를 통해 리소스 상태와 로그(CloudWatch Logs)를 모니터링.

profile
백엔드 행 유도 미사일

0개의 댓글