개발/infra

[infra/terraform] aws 네트워크 구조 - ALB, VPC, 서브넷, 보안그룹

2ivii 2025. 11. 21. 13:40

지난 글까지 Docker 이미지가 생성되고, ECR에 저장되고, ECS(Fargate)가 실행해서 컨테이너가 뜨는 과정까지 살펴봤다.

그런데… 컨테이너가 떠 있다고 해서 바로 외부에서 접속되는 건 아니다. 중간에 반드시 이해해야 할 AWS 네트워크 구조가 있다.

이 글에서는 AWS 네트워크를 구성하는 4개의 핵심 요소 — VPC, Subnet, Security Group, ALB를 한 번에 정리해보겠다!

 

 


VPC (Virtual Private Cloud)란?

VPC는 AWS 안에서 나만 사용하는 독립 네트워크 공간이다. 내가 쓰는 AWS 자원(EC2, RDS, ECS 등)은 전부 “VPC 안에만” 존재한다.

 

이걸 집으로 비유하면:

  • VPC = 아파트 단지
  • 그 안의 건물, 방, 주차장 = AWS 리소스들

VPC가 있으면 좋은 점:

  • 나만의 독립 네트워크 공간 확보
  • IP 대역 내가 원하는 대로 구성 가능
  • 보안 규칙을 완전히 커스터마이징

Subnet이란?

VPC가 아파트 단지라면, 서브넷은 동(빌딩) 같은 개념이다. AWS에서는 보통 서브넷을 2개로 나눈다:

  • Public Subnet → 외부 인터넷과 직접 연결됨
    ALB, NAT Gateway 같은 리소스가 여기 배치됨
  • Private Subnet → 외부에서 직접 접근 불가
    ECS, RDS 같은 서비스는 보안 때문에 Private에 둠

AWS VPC를 아래처럼 구성한 이유는 간단하다:

Public Subnet ALB, NAT Gateway 외부랑 직접 통신해야 함
Private Subnet ECS Fargate, RDS 외부에서 접근되면 위험

 

이 구조는 99% 실무에서 쓰는 표준 패턴이다.

Security Group이란?

Security Group(SG)은 리소스에 붙는 방화벽이다. 간단히 누가 들어올 수 있는지, 어떤 포트를 열지를 정하는 규칙이다. 이 SG설정은 매우매우 중요하다. 아무나 들어오면 안되기 때문이다!! 그래서 아래와 같이 SG를 설정한다.

 

예를 들면:

 

ALB SG

  • 80, 443 포트(HTTP/HTTPS) 열기
  • 전 세계(0.0.0.0/0)에서 요청 받을 수 있음
    → 웹사이트니까

ECS 앱 SG

  • 오직 ALB SG만 접근 허용
    → 외부에서 ECS로 직접 요청 불가
    → ALB를 통해서만 접근 가능

RDS DB SG

  • 오직 ECS 앱 SG만 접근 허용
    → DB 해킹 방지

이렇게 엄격하게 접근을 제한하는 것이 클라우드 보안의 핵심이다.

ALB (Application Load Balancer)이란?

ALB는 모든 요청이 통과하는 대문이다. 외부 요청은 이렇게 흐른다:

클라이언트 → ALB → (헬스 체크 확인) → ECS 컨테이너

 

ALB가 하는 일은 크게 3가지가 있다.

 

1) HTTPS 인증서(ACM) 연결

 

url로 들어오는 HTTPS 요청을 처리한다.

즉, 인증서(SSL)를 ALB에 연결해준 덕분에 우리 서비스는 HTTPS 트래픽을 사용할 수 있게 되는 것이다!

 

2) Target Group을 보고 어떤 ECS로 보낼지 결정

 

여기서 target group이란 ALB가 트래픽을 보낼 목표(타겟)들을 모아둔 그룹으로,  어떤 타입의 타겟인지 (EC2, IP, ECS 등),타겟들의 주소 (IP + 포트), 헬스 체크 경로 (/actuator/health 같은 거), 프로토콜 (HTTP/HTTPS) 등을 갖고있다.  ALB는 요청을 혼자 처리하지 않는다. 요청을 반드시 Target Group → ECS Task로 넘긴다.

 

3) 헬스 체크 후 “살아있는 컨테이너”에게만 요청 전달

 

ECS 컨테이너가 살아있는지 계속 체크한다.

Spring Boot의 /actuator/health를 확인해서 OK일 때만 트래픽을 연결한다. 만약 컨테이너가 죽어 있으면?

  • ALB가 요청을 보내지 않음
  • ECS가 새 컨테이너를 자동으로 띄움
  • 서비스는 다운되지 않음

그래서 !! ALB + ECS 조합은 자동으로 무중단 배포를 지원한다!! 대박이다

흐름 정리

사용자 요청
    ↓
[ALB] ― HTTPS 수신 / 인증서 적용 / 헬스체크
    ↓
(Target Group)
    ↓
[ECS Fargate Task] ― 컨테이너 실행
    ↓
(Private Subnet 내부)
    ↓
[RDS] DB 접속 허용 (SG 기반)

 

이 전체 설계가 바로 현대적인 AWS 배포 구조의 정석이다.


마무리

  • VPC = 네트워크 전체 공간
  • Subnet = Public / Private 구역
  • Security Group = 리소스 방화벽
  • ALB = HTTPS 트래픽 관문 & 라우팅
  • ECS(Fargate) = 컨테이너 실행 엔진
  • ECR = 이미지 저장소
  • RDS = DB

이것들을 이해하면

“도커 → 배포 → 네트워크 → 인증서 → DB” 전체 구조가 완전하게 연결된다!!