vpc,igw,nat-gw, ec2, sg,eip 직접 구성 - 1

2026. 6. 4. 22:42·클라우드 컴퓨팅/AWS

AWS 네트워크 아키텍처 — 구축 순서 · 당위성 · OSI 7계층 매핑

My-VPC 실습 구성을 "전문가가 처음부터 설계·생성한다면 어떤 순서로, 왜 그렇게 하는가"의 관점으로 정리.
각 단계마다 ① 무엇을 ② 왜(당위성·비유) ③ 어떻게 연결 ④ OSI 계층 으로 설명.


0. 큰 그림 — 도시/건물에 빗댄 전체 구조

네트워크 구성은 "빈 땅에 보안이 갖춰진 사옥 단지를 짓는 일" 과 같습니다.

AWS 리소스 현실 비유
Region / AZ 도시 / 서로 떨어진 건물 부지(재해 분산)
VPC 울타리 친 내 사유지(부지 전체)
Subnet 부지를 나눈 구역(공개 구역 / 비공개 구역)
Internet Gateway 단지의 정문(외부 도로와 연결)
Route Table 이정표/내비게이션(어디로 가라)
VPC Router 이정표를 보고 운전하는 운전기사
Network ACL 구역 정문 경비(구역 출입을 양방향 명부로 확인)
Security Group 각 건물 현관 도어맨(방문자를 기억함)
EC2 건물 안의 직원/서버
NAT Gateway 내부인이 외부로 나갈 때 쓰는 대표 창구(우체국 사서함)
Elastic IP 바뀌지 않는 고정 간판 주소

이 순서로 짓는 이유: 바깥 골격(부지→구역→문)을 먼저 만들고, 그 안에 보안 장치(경비·도어맨)를 두고, 마지막에 사람(서버)을 들이고, 필요하면 외출 통로(NAT)를 뚫는다. 의존성이 낮은 것부터 높은 것 순입니다.


1단계 — VPC 생성 (My-VPC, 10.9.0.0/16)

무엇: AWS 안에 격리된 가상 네트워크. CIDR 10.9.0.0/16(약 6.5만 IP)을 부여.

왜(당위성): 모든 리소스는 어딘가에 "소속"돼야 합니다. 서버를 만들기 전에 그것이 살 땅(주소 공간) 부터 정의해야 하죠. 울타리를 쳐서 외부 인터넷·다른 사용자와 논리적으로 분리하는 게 첫걸음입니다. CIDR을 /16처럼 크게 잡는 건, 나중에 구역(서브넷)을 여러 개 나눠도 주소가 모자라지 않게 하기 위함입니다.

연결: 아직 없음(최상위 컨테이너).

OSI: L3(네트워크 계층) — IP 주소 공간 정의.


2단계 — Subnet 생성 (Public 10.9.1.0/24, Private 10.9.2.0/24)

무엇: VPC의 큰 주소 범위를 잘게 나눈 구역. 각 서브넷은 하나의 AZ에 소속.

왜(당위성): 모든 서버를 한 구역에 두면 보안·관리가 어렵습니다. 외부에 노출돼야 하는 것(웹 서버) 과 숨겨야 하는 것(DB·내부 서버) 을 물리적으로 분리해야 합니다. 그래서 공개 구역(Public)과 비공개 구역(Private)으로 나눕니다. 또 두 서브넷을 서로 다른 AZ(2c, 2d) 에 두는 건, 한 건물(AZ)에 불이 나도 다른 건물은 살아남게 하는 고가용성 설계입니다.

연결: VPC에 소속. (퍼블릭/프라이빗 성격은 아직 미정 — 4단계 라우팅에서 결정됨)

OSI: L3 — 주소 범위 분할.


3단계 — Internet Gateway 생성·연결 (My-IGW)

무엇: VPC와 인터넷을 잇는 양방향 관문. VPC당 1개 부착.

왜(당위성): 부지(VPC)는 기본적으로 외부와 단절돼 있습니다. 외부 도로(인터넷)와 연결하려면 정문(IGW) 이 있어야 합니다. 정문이 없으면 어떤 라우팅을 설정해도 인터넷으로 나갈 길 자체가 없습니다. 그래서 외부 통신을 하려면 IGW를 먼저 VPC에 부착합니다.

연결: VPC에 attach. (단, 정문만 달았다고 길이 생기는 건 아님 → 4단계에서 이정표 필요)

OSI: L3 + NAT 수행 시 L4 관여.


4단계 — Route Table 생성·연결 (Public-RT, Private-RT)

무엇: "목적지 IP를 어디로 보낼지" 정한 이정표. 서브넷에 연결(association)됨.

  • Public-RT: 10.9.0.0/16 → local + 0.0.0.0/0 → IGW
  • Private-RT: 10.9.0.0/16 → local (이 시점엔 아직 인터넷 경로 없음)

왜(당위성): 정문(IGW)을 달았어도 "인터넷으로 가려면 정문으로 가라"는 이정표 가 없으면 패킷이 길을 못 찾습니다. 바로 이 0.0.0.0/0 → IGW 이정표가 "이 구역은 공개 구역(Public)" 임을 결정합니다. 반대로 이 이정표가 없는 Private-RT에 연결된 구역은 자동으로 비공개가 됩니다. 즉 퍼블릭/프라이빗은 서브넷 자체 속성이 아니라 "라우팅 테이블에 인터넷 경로가 있느냐"로 갈립니다.

연결: Public-RT ↔ Public-subnet, Private-RT ↔ Private-Subnet. RT는 VPC 리소스이고 서브넷에 연결되며, 운전기사(라우터)가 이를 참조합니다(RT는 라우터 소유가 아님).

OSI: L3 — 라우팅(경로 결정).


5단계 — Network ACL (My-VPC-ACL)

무엇: 서브넷 경계에서 동작하는 방화벽. 서브넷에 연결. Stateless.

왜(당위성): 구역(서브넷) 단위로 출입을 통제하는 1차 경비초소 입니다. 건물(인스턴스)에 도달하기 전 구역 입구에서 먼저 거릅니다. NACL은 상태를 기억하지 못하므로(Stateless), 들어온 손님의 응답이 나갈 때도 "나가는 명부(아웃바운드 규칙)"를 따로 확인합니다. 광범위한 차단(예: 특정 IP 대역 전체 거부)에 적합합니다.

연결: 서브넷에 연결. (생성·연결 안 하면 기본 NACL이 자동 적용 — 전체 허용)

OSI: L3(IP) + L4(포트/프로토콜).


6단계 — Security Group (Public-Web-SSH-SG, Private-SSH-SG)

무엇: 인스턴스(ENI) 단위 방화벽. Stateful. 허용 규칙만.

왜(당위성): 각 건물 현관의 도어맨 입니다. 구역 경비(NACL)를 통과한 손님을 건물 입구에서 한 번 더 확인합니다.

  • Public-Web-SSH-SG: 웹(80)·관리(22)를 외부에 허용 → 웹 서버는 누구나 접속해야 하니까.
  • Private-SSH-SG: SSH(22)를 IP가 아니라 "Public SG에 속한 인스턴스" 로부터만 허용 → 외부에서 비공개 서버로 직접 못 들어오고, 반드시 공개 서버(Bastion)를 거치게 강제.

도어맨은 손님을 기억하므로(Stateful), 인바운드만 열면 응답은 자동으로 내보냅니다. EC2를 만들 때 함께 지정하므로 인스턴스보다 먼저 준비합니다.

연결: 인스턴스(ENI)에 적용. Private-SG는 소스로 Public-SG를 참조.

OSI: L3 + L4.


7단계 — EC2 인스턴스 생성 (PublicEC2, Private-EC2)

무엇: 실제 연산을 수행하는 가상 서버.

  • PublicEC2: Public-subnet에 배치, 공인 IP 자동 할당(3.35.195.121) → 웹 서비스 + Bastion 역할.
  • Private-EC2: Private-Subnet에 배치, 공인 IP 없음(10.9.2.240) → 외부 직접 노출 금지.

왜(당위성): 부지·구역·문·경비·도어맨이 모두 준비된 뒤에야 사람(서버)을 들입니다. 공개 서버는 외부 주소(공인 IP)가 있어야 손님이 찾아올 수 있고, 비공개 서버는 외부 주소를 주지 않아 애초에 외부에서 찾을 수 없게 합니다.

연결: 서브넷에 배치 + SG 적용.

OSI: L1~L7 전 계층(호스트는 통신의 종단).


8단계 — NAT Gateway + Elastic IP (My-NAT-GW, My-EIP)

무엇: 프라이빗 서브넷의 아웃바운드 전용 출구. 퍼블릭 서브넷에 배치하고 EIP를 부착.

왜(당위성): ★사용자가 든 예시 그대로★ — Private-EC2가 외부 인터넷과 통신(예: 패키지 업데이트)하기 위해 필요 합니다. 비공개 서버는 공인 IP가 없어 직접 인터넷에 못 나갑니다. 그렇다고 공인 IP를 주면 외부에 노출돼 버리죠. 그래서 "내부인은 대표 창구(NAT GW)를 통해서만 외출하고, 외부인은 그 창구로 들어올 수 없다" 는 단방향 출구를 둡니다. NAT GW가 출발지 IP를 대표 주소(EIP)로 바꿔 내보내므로, 외부에선 누가 나왔는지 개별 서버를 알 수 없습니다.

  • 퍼블릭 서브넷에 두는 이유: NAT GW 자신이 인터넷으로 나가려면 0.0.0.0/0 → IGW 경로가 있는 구역(=퍼블릭)에 있어야 하기 때문. 프라이빗에 두면 동작하지 않음.
  • EIP가 필요한 이유: 대표 주소가 자꾸 바뀌면 곤란하므로 고정 공인 IP 를 부여.

연결: Public-subnet에 생성 + EIP 할당.

OSI: L3 + L4(IP·포트 변환).


9단계 — Private-RT에 NAT 경로 추가 (0.0.0.0/0 → NAT-GW)

무엇: Private-RT에 0.0.0.0/0 → My-NAT-GW 라우팅을 추가.

왜(당위성): NAT GW(창구)를 만들기만 해선 안 됩니다. "외부로 갈 땐 NAT 창구로 가라"는 이정표 를 비공개 구역의 라우팅 테이블에 넣어줘야 비로소 길이 연결됩니다. 이 경로가 없으면 Private-EC2는 여전히 밖으로 못 나갑니다. (8·9단계가 짝)

연결: Private-RT → NAT-GW.

OSI: L3.


10단계 — 검증 (통신 흐름 확인)

구축이 끝나면 의도대로 동작하는지 확인합니다.

  • PublicEC2: 외부에서 웹(80) 접속 가능 / SSH(22) 가능.
  • Private-EC2: 외부 직접 접속 불가, Bastion(PublicEC2) 경유 SSH만 가능, ping·yum update 같은 아웃바운드는 NAT GW로 가능.

OSI 7계층 종합 매핑

구축 단계 / 리소스 OSI 계층 무엇을 보고 동작하나
VPC, Subnet L3 네트워크 IP 주소 공간
Route Table, VPC Router L3 네트워크 목적지 IP → 경로
Internet Gateway L3(+L4) 공인↔사설 IP 변환(NAT)
NAT Gateway L3+L4 출발지 IP·포트 변환(SNAT/PAT)
Network ACL L3+L4 IP + 프로토콜 + 포트(Stateless)
Security Group L3+L4 IP + 포트 + SG참조(Stateful)
EC2 / ENI L1~L7 호스트(전 계층)
HTTP·SSH·ping L7 / (ping은 L3 ICMP) 서비스·도달성

핵심 한 줄: 아래 계층(L3 라우팅: 어디로 갈지)을 먼저 깔고 → 그 위에 L3/L4 방화벽(NACL·SG: 통과 여부)을 얹고 → 최종적으로 L7 서비스(웹·SSH)가 그 길 위에서 동작합니다. 계층을 쌓는 순서가 곧 구축 순서와 닮아 있습니다.


한눈에 보는 구축 순서 요약

1. VPC               (땅 = 주소 공간)              L3
2. Subnet ×2         (구역: 공개/비공개)            L3
3. Internet Gateway  (정문: 외부 연결)              L3
4. Route Table ×2    (이정표 → 퍼블릭/프라이빗 결정)  L3
5. Network ACL       (구역 경비, Stateless)         L3+L4
6. Security Group ×2 (현관 도어맨, Stateful)         L3+L4
7. EC2 ×2            (서버 입주)                    L1~L7
8. NAT GW + EIP      (내부인 전용 외출 창구)         L3+L4
9. Private-RT 경로    (NAT로 가는 이정표 추가)        L3
10. 검증             (흐름 확인: ping/curl/SSH)      L7
저작자표시 (새창열림)

'클라우드 컴퓨팅 > AWS' 카테고리의 다른 글

실습 1-3 _ Subnet  (0) 2026.06.06
실습 1-2 _ Network ACL  (0) 2026.06.06
실습 1-1 _ 라우팅 테이블 - 1  (0) 2026.06.06
실습1 - VPC  (0) 2026.06.06
vpc,igw,nat-gw, ec2, sg,eip 직접 구성 - 2(sequence diagram)  (0) 2026.06.04
'클라우드 컴퓨팅/AWS' 카테고리의 다른 글
  • 실습 1-2 _ Network ACL
  • 실습 1-1 _ 라우팅 테이블 - 1
  • 실습1 - VPC
  • vpc,igw,nat-gw, ec2, sg,eip 직접 구성 - 2(sequence diagram)
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (301) N
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (17) N
        • 도커 (2)
        • AWS (15) N
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • 정보보안기사 (1)
        • 네트워크관리사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    SAA
    ecs
    reactor
    취업리부트
    Spring WebFlux
    EC2
    파이썬
    celery
    그리디
    Python
    완전탐색
    백준
    FastAPI
    항해99
    Docker-compose
    mybatis
    OOP
    AWS
    Redis
    Spring Boot
    WebFlux
    java
    spring
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    시험
    RDS
    docker
    DP
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
vpc,igw,nat-gw, ec2, sg,eip 직접 구성 - 1
상단으로

티스토리툴바