DevOps 의 과정 2편 - 네트워크

김재형_LittleTale·2026년 4월 21일

dev_ops

목록 보기
2/2

들어가기에 앞서

이제 Terraform을 제대로 이해하기 위해
가장 먼저 필요한 네트워크 개념을 정리해보자.

Terraform은 인프라를 코드로 정의하는 도구지만,
실제로 만들게 되는 것은 결국 네트워크 + 서버 구조다.

  • VPC를 만들고
  • Subnet을 나누고
  • 서버를 배치하고
  • 외부와 통신을 설계하는 것

이 모든 것이 결국 네트워크 위에서 이루어진다.

그래서 Terraform을 배우기 전에
"이 리소스들이 왜 필요한지"를 이해하는 것이 훨씬 중요하다.

What VPC

AWS 안에서 내가 쓰는 네트워크 영역

AWS 내부에서 직접 만드는 가상네트워크 공간
다시말해 AWS 라는 큰 건물이 있다면 내가 따로 쓸 전용 공간

  • 서버들이 배치될 공간 생성
  • IP 대역 정하기
  • subnet 분할
  • 외부 인터넷 연결할지 & 내부끼리만 통신할지
    핵심은 가장 바깥쪽 틀

What Subnet

VPC 내부의 또 나뉜 구역
서버를 한 공간에 다 넣었을때 보안과 관리가 어려워진다.

  • 외부에서 접근이 가능한 서버 (Web Server)
  • 내부에서 접근 가능한 서버 (DB)

등 이와 같은 것들을 한 곳이 아닌 여러 구역을 나눠서 관리하려는 목적 즉
Subnet 이다.

🌍 Public Subnet / Private Subnet

Public Subnet

  • 인터넷과 직접 통신이 가능한 영역
  • ALB, Bastion Host 같은 것 들이 위치하다.

( ALB: 외부 요청을 받아 내부 서버로 분산 하는 로드밸런서 )
( Bastion Host: 외부에서 내부 서버에 안전 접속위한 중간 서버 )

Private Subnet

  • 인터넷 직접 접근 X
  • 내부 서비스 (App Server, DB ...)

핵심 포인트

  • 단순 분리가 X = 접근 가능 범위를 분리!

🔗 Terraform에서의 의미

Terraform에서는 VPC 안에 Subnet을 생성해서
서버를 어디에 둘지 결정한다.

다시말해,

  • VPC = 나라 전체
  • Subnet = 행정구

자 우리는 지금 나라와 행정구를 나누었다.
이제 나라간 소통을 하려면 인터넷이 필요하고
인터넷은 과연 어떻게 연결되는 것일까?

What Internet Gateway

VPC 와 인터넷은 바로 연결하는 것은 불가능하다.
외부 인터넷과 완전 분리된 사설 네트워크 공간이기에 즉,
보안과 격라를 위해 인터넷과 바로 연결하기는 힘들다.

VPC가 외부 인터넷과 통신할 수 있는 문지기가 있으면 되겠다!
그것이 IGW Internet Gateway

🤔 왜 필요한지 좀 더 고민해보자.

서버를 생성하였다.
외부에서 접근이 불가하고, 반대로 외부로 나가는 것도 불가하다.

이는 매우 안전한 상태가 되었다.
다만 실서비스를 지원하려면 결국 Internet으로 사용자에게 제공해야 한다.
그렇다고 하여도 모든것을 Open 해줄 수 있는것도 아니다
일정 부분 공개 하지 말아야 할 것들이 있을것이다.

필요한 경우에만 외부와 소통할 수 있는 장치가 필요하다.

🌍 어디에 연결되는걸까?

Internet Gateway는 VPC에 연결된다.
즉, 이말은 하나 하나 Subnet에 연결하는 것이 아닌 그들을 관리하는
전체 VPC 가 연결 된다는 것이다.

다만, 전체에 연결 되었다고 하여서
모든 Subnet이 바로 인터넷과 통신하는 것이 아니다.

VPC에 IGW를 연결하는 것은 단순히 인터넷으로 나가는 출입문 만들기를 한 것
그래서 Subnet 쪽에서 어떤 출입문을 사용할지는 지정이 필요하게 된다.
이때 필요한 개념이 Route Table 이다.

  • VPC 생성
  • Subnet 생성
  • Internet Gateway 연결
  • Route Table에 경로 설정

해당 과정을 거치면 Public Subnet이 동작!

🔗 Terraform에서의 의미

Terraform에서는

  • VPC를 만듬
  • aws_internet_gateway 리소스로 IGW를 연결

What Route Table

"어디로 가야 하는지" 를 알려주는 경로 정보가 필요하다.
네트워크의 길안내판 같은 개념이라고 생각해 보자

Subnet 안의 서버가 외부와 통신하려고 할 때,
그 요청이 어디로 나가야 하는지 정해져 있지 않다면
패킷은 목적지를 찾지 못한다.

  • 인터넷으로 나갈지?
  • 다른 내부 네트워크로 갈지?
  • NAT Gateway 쪽으로 보낼지?

이런 경로를 미리 정해줘야 한다.
"이 Subnet의 트래픽이 어디로 향할지 결정하는 규칙표"

🌍 어떻게 동작하는가?

Route Table은 보통
Destination(목적지) 과 Target(대상) 으로 구성된다.

  • 10.0.0.0/16 → local
  • 0.0.0.0/0 → Internet Gateway

같은 VPC 내부 주소로 가는 트래픽은 내부에서 처리하고
그 외 모든 외부 요청은 Internet Gateway로 보내라는 뜻이다.

0.0.0.0/0 = 모든 외부 주소

🌍 Public Subnet / Private Subnet 차이

Public Subnet

  • Route Table에 0.0.0.0/0 → Internet Gateway 경로가 있음
  • 외부 인터넷과 통신 가능

Private Subnet

  • Internet Gateway로 직접 가는 경로가 없음
  • 외부에서 직접 접근 불가능

정리하기

  • IGW만 있으면 문만 있는 상태
  • Route Table까지 연결해야 실제로 그 문을 사용할 수 있음

🔗 Terraform에서의 의미

Terraform에서는 aws_route_table 로 경로 규칙을 만들고,
aws_route_table_association 으로 특정 Subnet에 연결한다.

VPC에 인터넷 출입문을 만들고
어떤 Subnet이 그 출입문을 사용할지 정하는 것

What NAT GateWay

private subnet은 보안때문에
외부 인터넷 직접 접근이 불가하게 구성한다.

하지만, private subnet도 외부 인터넷과 통신해야 할 때가 있다.
예를들어

  • 서버 패키지 설치
  • 보안 업데이트 다운로드
  • 외부 API 호출
  • Docker 이미지 다운로드

이럴 때 사용하는 것이 NAT Gateway

다만, 외부에서 직접 들어올 수 없게 하는 것 이게 핵심

  • 외부에서는 직접 접근 불가
  • 내부 서버는 필요할 때 외부로 나갈 수 있음

🌍 어떻게 동작하는가?

NAT Gateway는 보통
Public Subnet에 생성된다.

Private Subnet의 Route Table에서
외부로 가는 경로(0.0.0.0/0)를 NAT Gateway로 설정

  • Private Subnet의 서버가 외부 요청을 보냄
  • 그 요청이 NAT Gateway를 거쳐 인터넷으로 나감
  • 응답은 다시 NAT Gateway를 통해 돌아옴

흠 왜 Public 한 Subnet이지?

외부 인터넷과 연결된 상태여야 역할을 할 수 있는데,
Internet Gateway와 연결 가능한 Public Subnet에 위치에 있어야
인터넷 통신이 가능하기 때문

  • NAT Gateway는 인터넷과 연결된 곳에 있고
  • Private Subnet은 NAT를 통해서만 외부와 통신하는 구조

다시말해

  • Public Subnet = 외부와 직접 통신 가능
  • Private Subnet = 외부에서 직접 접근 불가
  • NAT Gateway = Private Subnet이 필요할 때만 외부로 나갈 수 있게 해줌

🔗 Terraform에서의 의미

Terraform에서는 Public Subnet에 NAT Gateway를 생성하고,
Private Subnet의 Route Table에서 외부 경로를 NAT Gateway로 연결한다.

즉, NAT Gateway는
"Private Subnet 서버의 아웃바운드 인터넷 통신을 위한 구성요소"
라고 이해하면 된다.

Security Group

인스턴스에 붙는 상태 기반 방화벽
EC2 앞에서 트래픽을 허용/차단 하는 필터

  • 인스턴스 단위로 동작
  • 네트워크 레벨이라기 보단 서버 바로 앞
[인터넷]
   ↓
[Internet Gateway]
   ↓
[VPC]
   ↓
[Subnet]
   ↓
[Security Group]
   ↓
[EC2]

그래서 역활이 ... 👀

이 요청을 받아도 되는지 판단!

규칙 구조 Rule

  • port ( 어디로? )
  • protocol (TCP/UDP...)
  • source / destination ( who? )

💡 예시

TCP / 22 / 내 IP
→ “내 컴퓨터만 SSH 접속 허용”
TCP / 80 / 0.0.0.0/0
→ “모든 사람이 웹 접속 가능”

Allow only

  • 허용 규칙만 있음
  • 나머지는 전부 자동 차단

Stateful 하다.

❌ Stateless (예: NACL)

  • 요청 따로
  • 응답 따로 허용해야 함

✅ Stateful (SG)

  • 요청 허용하면
  • 응답은 자동 허용

Inbound / Outbound

Inbound (들어오는 것)

👉 외부 → EC2

  • SSH 접속
  • HTTP 요청
  • DB 접속

🔼 Outbound (나가는 것)

👉 EC2 → 외부

API 호출
패키지 설치 (apt, yum)
DB 외부 연결

기본적으론 기본값: 전부 허용 이다.

문제 생기면:

  • SG inbound 확인
  • 포트 확인
  • Source 확인

마무리 하면서

네트워크를 이번에 조금더 다루면서 다음편 부터는
Terraform 을 직접 사용해보려고 합니다.

profile
IOS 개발자 새싹이, 작은 이야기로부터

0개의 댓글