AWS에서 동적 웹 애플리케이션 배포하는 방법 (초보자 친화 가이드)

발행: (2026년 2월 22일 오전 06:39 GMT+9)
8 분 소요
원문: Dev.to

Source: Dev.to

AWS에 동적 웹 애플리케이션을 배포하는 것은 처음에 많은 서비스가 얽혀 있어 압도적으로 느껴질 수 있습니다. 이 가이드는 클라우드 컴퓨팅과 DevOps를 배우는 초보자에게 완벽한 간단하고 실용적인 접근 방식을 단계별로 안내합니다.

동적 웹 애플리케이션이란?

정적 웹사이트와 달리 동적 웹 애플리케이션은:

  • 사용자 입력을 처리합니다
  • 데이터베이스에 연결합니다
  • 실시간으로 콘텐츠를 생성합니다

일반적인 예로는 로그인 시스템, 대시보드, 전자상거래 사이트, 그리고 PHP로 구축된 웹 앱 등이 있습니다.

AWS Services We’ll Use

배포는 EC2, VPC, 보안 그룹, S3, IAM, RDS, 애플리케이션 로드 밸런서(ALB), Auto Scaling 및 관련 네트워킹 구성 요소와 같은 핵심 AWS 서비스에 의존합니다.

Source:

단계별 배포

1. 리전 선택

애플리케이션을 호스팅할 AWS 리전을 선택합니다.

2. VPC 생성

VPC에 DNS 호스트 이름을 활성화합니다.

3. 보안 그룹 설정

보안 그룹목적인바운드 규칙
EICE‑sg (EC2 Instance Connect Endpoint)연결 엔드포인트SSH (VPC CIDR 로 제한)
ALB‑sgApplication Load BalancerHTTP & HTTPS (전체 허용)
web‑sg웹 서버HTTP & HTTPS (ALB‑sg 로부터 허용), SSH (EICE‑sg 로 제한)
db‑sg데이터베이스MySQL (web‑sg 로부터 허용)
dms‑sg데이터 마이그레이션SSH (EICE‑sg 로 제한)

4. EC2 Instance Connect Endpoint 생성

  • 프라이빗 서브넷(예: private-app-az2)에 배치합니다.
  • EICE‑sg 를 연결합니다.

5. S3 버킷 생성

애플리케이션 코드를 버킷에 업로드합니다.

6. IAM 정책 생성

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret"
      ],
      "Resource": "*"
    }
  ]
}

연습용으로 모든 리소스를 허용해도 되지만, 실제 운영 환경에서는 ARN을 제한하세요.

7. IAM 역할 생성

  • 신뢰 엔터티: EC2.
  • 앞서 만든 정책을 연결합니다.
  • 역할에 의미 있는 이름을 지정합니다(예: WebAppS3AccessRole).

8. DB 서브넷 그룹 생성

VPC와 서로 다른 AZ에 있는 두 개의 프라이빗 서브넷을 선택합니다.

9. RDS MySQL 인스턴스 시작

  1. Standard createMySQL (최신 엔진 버전).
  2. Free Tier 를 선택합니다.
  3. DB 인스턴스 식별자와 초기 데이터베이스 이름을 설정합니다.
  4. 인증 정보를 위해 AWS Secrets Manager 를 활성화합니다.
  5. 앞서 만든 Subnet groupdb‑sg 를 사용합니다.
  6. AZ를 선택하고 필요에 따라 추가 설정을 구성합니다.

10. 데이터 RDS 로 마이그레이션

  1. 프라이빗 서브넷(private-app-az2)에 dms‑sg 를 적용한 임시 EC2 인스턴스(키 페어 없음)를 시작합니다.
  2. 7단계에서 만든 IAM 역할을 연결합니다.
  3. 콘솔을 통해 접속하고 마이그레이션 스크립트를 실행합니다.
  4. 스크립트는 다음 위치에 있습니다:

마이그레이션이 끝나면 임시 EC2 인스턴스를 종료합니다.

11. 웹 서버 배포

  1. 프라이빗 서브넷에 web‑sg 를 적용한 또 다른 EC2 인스턴스(키 페어 없음)를 시작합니다.
  2. S3 접근 역할을 연결합니다.
  3. 배포 스크립트(위 GitHub 저장소와 동일)를 실행해 S3에서 코드를 가져오고 애플리케이션을 시작합니다.

12. 대상 그룹 생성

  • 유형: Instance
  • VPC: 생성한 VPC
  • 헬스 체크 경로: 기본값(또는 사용자 정의) – HTTP 상태 코드 200,301,302 포함.
  • 웹 서버 인스턴스를 등록합니다.

13. Application Load Balancer 설정

  1. VPC와 두 개의 퍼블릭 서브넷(각 AZ당 하나)을 선택합니다.
  2. ALB‑sg 를 연결합니다.
  3. 리스너:
    • HTTP → HTTPS(전체 URL) 로 리다이렉트.
    • HTTPS → 앞서 만든 대상 그룹으로 포워드; SSL 인증서를 연결합니다.

14. DNS 구성

ALB를 가리키는 DNS A (Alias) 레코드(예: www.example.com)를 생성합니다.

이제 도메인 이름을 통해 웹 애플리케이션에 접근할 수 있습니다.

15. 트래픽 급증 대비 – Auto Scaling

  1. 실행 중인 웹 서버 인스턴스에서 AMI 를 생성합니다(작업 → 이미지 → 이미지 생성).
  2. Launch Template: AMI, 인스턴스 유형, 보안 그룹, IAM 역할 등을 정의합니다.
  3. Auto Scaling Group:
    • VPC: 프라이빗 서브넷을 선택합니다.
    • ALB와 대상 그룹을 연결합니다.
    • 헬스 체크 및 원하는 용량(최소/최대/desired)을 설정합니다.

Auto Scaling 그룹은 트래픽이 증가하면 추가 인스턴스를 자동으로 시작하고, 부하가 감소하면 인스턴스를 종료합니다.

최종 생각

AWS를 배우는 가장 쉬운 방법은 실제 프로젝트를 만드는 것입니다. 동적 웹 애플리케이션을 배포하는 것은 클라우드 서비스가 어떻게 함께 작동하는지 이해하기 위한 훌륭한 초보자 연습입니다. 한번 시도해 보고, AWS, Docker, 그리고 클라우드 컴퓨팅에 관한 실용적인 포스트를 계속 기대해 주세요.

0 조회
Back to Blog

관련 글

더 보기 »

서브넷팅 설명

Subnetting이란 무엇인가? 큰 아파트 건물을 여러 층으로 나누는 것과 같다. 각 층 서브넷은 자체 번호가 매겨진 유닛(hosts)을 가지고, 그리고 건물…