들어가기 전
VPC를 실습하기 위해서는 사전 지식이 필요하다.
IP주소
모든 인터넷 사용 장치는 최소한 하나 이상의 IP주소를 가지고 있다. 이 주소를 통해 서로 통신할 수 있다.
IP주소는 네트워크와 호스트 부분으로 구분되어 있으며, 서브넷 마스크는 이 두 부분을 구분하는 데 사용된다. 예를 들어, IP주소가 192.168.1.1이고 서브넷 마스크가 255.255.255.0인 경우, 네트워크 부분은 192.168.1 이고 호스트 부분은 .1이다
- 네트워크 주소: 특정 네트워크를 식별하는 데 사용된다. 이 주소는 네트워크의 시작점을 나타내며, 특정 네트워크 전체를 대표하는 식별자 역할을 한다.
- 호스트 주소: 네트워크 내의 개별 장치(ex.컴퓨터, 프린터, 스위치 등)을 식별하는 데 사용된다. 각 장치는 네트워크 내에서 고유한 호스트 주소를 가진다
- 브로드캐스트 주소: 네트워크 상의 모든 장치에 데이터 패킷을 동시레 전송하기 위한 주소이다.
비전
- IPv4: 현재 가장 널리 사용되는 IP주소 체계로, 32비트 주소를 사용한다.
- IPv6: IPv4 주소 고갈 문제를 해결하기 위해 도입된 새로운 버전으로 128비트 주소를 사용한다
유형
- 공용 IP 주소(Public IP Address): 인테넷 상에서 유일하며, 외부 네트워크에서 접근할 수 있는 주소이다.
- 사설 IP 주소(Private IP Address): LAN 내에서만 유일하며, 인터넷 상에서는 직접 사용할 수 없는 주소이다. 사설 IP주소는 일반적으로 NAT을 통해 인터넷에 접속한다
NAT(Network Address Translation)
NAT는 사설 IP주소를 공용 IP주소로 변환하는 프로세스이다. 이 기술은 여러 장치가 하나의 공용IP 주소를 공유하여 인터넷에 접속할 수 있도록 한다. NAT는 특히 IPv4주소에 한정되어 있는 상황에서 IP주소를 보다 효율적으로 사용할 수 있게 해주며, 네트워크 보안 측면에서도 이점을 제공한다.
예시:
외부 인터넷은 공유기로 먼저 데이터를 보내고, 공유기는 포트를 통해 각 디바이스를 구분하여 데이터를 보내주게 된다. 다시 말해 공유기의 80번 포트는 192.168.0.1이 할당된 노트북이 공유기의 8080포트는 192.168.0.2가 할당 된 PC가 연결이 된 것이다.
- 포트포워딩: 하나의 공용 IP 주소를 가진 공유기가 자신의 포트를 통해 올바른 사설 IP 주소를 가진 디바이스에게 데이터를 주는 것
사설 공용 아이피 주소는 공유기에만 할당이 되고, 공유기에 연결한 디바이스들은 사설 아이피 대역을 받게 된다
서브넷
서브넷이란, 하나의 네트워크가 분할되어 나눠진 작은 네트워크이다. (즉, 네트워크 내부의 네트워크)
서브넷 마스크
서브넷마스크(Subnet Mask): IP주소의 어느 부분이 네트워크 주소를 나타내는지, 어느 부분이 호스트 주소를 나타내는지 결정하는 32비트 숫자
서브네팅
서브네팅은 IP 네트워크를 더 작은 네트워크 세그먼트로 분할하는 과정이다. 이렇게 분할하는 주된 이유는 네트워크의 관리를 용이하게 하고, 보안을 강화하며 IP주소의 효율적인 사용을 돕기 위함이다.
서브네팅의 필요성
- 주소 공간의 효율적 사용
- 네트워크 관리 용이
- 보안 강화
서브네팅 예시
192.168.1.0/24 네트워크를 두 개의 서브넷으로 나누는 경우를 생각해보자.
서브넷 마스크를 255.255.255.128(또는/25)으로 설정하면, 다음과 같이 두 개의 서브넷이 생성된다
첫 번째 서브넷: 192.168.1.0/25
- 사용 가능한 호스트 주소 범위: 192.168.1.1 ~ 192.168.1.126
- 브로드 캐스트 주소: 192.168.1.127
두 번째 서브넷: 192.168.1.128/25
- 사용 가능한 호스트 주소 범위: 192.168.1.129 ~ 192.168.1.254
- 브로드 캐스트 주소: 192.168.1.255
각 서브넷은 네트워크 주소와 브로드캐스트 주소를 제외하고 126개의 가능한 호스트 주소를 가진다.
이러한 구조는 네트워크 관리자가 네트워크를 더 효율적으로 관리할 수 있게 한다.
CIDR(Classless Inter-Domain Routing)
서브넷 마스크를 간단히 표현하는 방법으로, IP주소 뒤에 슬래시(/)와 함께 네트워크 부분의 길이를 나타낸다.
IP주소/서브넷 마스크의 비트 수(192.168.1.0/24)이다.
라우팅 프로토콜
라우팅 프로토콜은 라우터들이 네트워크의 토폴로지 변경 사항을 서로 공유하고, 최적의 경로를 결정하기 위해 사용하는 규칙과 알고리즘의 집합이다.
AWS 리전
서비스를 하기 위한 자원들을 여러 곳에 분산해서 배치를 해둔 것이다. AWS에서 수많은 컴퓨팅 서비스를 하려면 당연히 대규모의 서버 컴퓨터를 모아 둔 곳이 필요할 것이다.이때 한 곳에 전부 다 몰아두면 2가지 불편한 점이 생긴다.
1. 자연 재해가 발생할 경우 모든 서비스가 마비가 된다
2. 모든 자원이 북미에 있다면, 지구 반대편의 아시아 지역은 멀어서 서비스가 느리다
가용영역
가용영역은 리전을 한번 더 분산해서 배치한 것이다.
위와 같은 사전 지식이 있어야 VPC에 대해 이해할 수 있다..!
그럼 본격적으로 VPC 시작 🚩
VPC와 IP대역
VPC(virtual Private Clound): 클라우드 컴퓨팅 환경 내에서 사용자가 정의한 가상 네트워크이다. VPC를 통해 사용자는 공용 클라우드 인프라 상에서 격리된 네트워크 세그먼트를 생성하고 관리할 수 있다.
VPC는 기본적으로 가상의 네트워크 영역이기에 사설 아이피 주소를 가지게 된다
사설 아이피 대역은
10.0.0.0/8
172.16.0.0/12
192.168.0.0/24
이렇게 3개의 대역을 가지며, 하나의 VPC에는 위의 네트워크 대역, 혹은 서브넷 대역이 할당 가능하다
VPC의 주요 구성 요소
- 서브넷: VPC내에서 IP 주소 범위를 기반으로 생성된 네트워크 세그먼트이다. 서브넷을 통해 VPC 내부를 더 작은 네트워크 단위로 분할하여 관리할 수 있다.
- 라우트 테이블(Route Table): 네트워크 트래픽을 특정 목적지로 전달하기 위한 규칙을 정의한다. 라우트 테이블은 특정 목적지로 전달하기 위한 규칙을 정의한다. 라우트 테이블은 특정 서브넷 또는 VPC게이트웨이에 연결될 수 있다
- 인터넷 게이트웨이: VPC를 인터넷과 연결하는데 사용되는 구성요소. 이를 통해 VPC내부의 리소스가 인터넷과 통신할 수 있게된다.
- 보안그룹과 네트워크 ACLs: 인스턴스 수준과 서브넷 수준에서 각각 동작하는 방화벽 기능으로, 들어노는 및 나가는 트래픽을 제어한다.
VPC의 실제 사용
VPC는 실제로 사용시 VPC자체에서도 서브넷을 나눠 사용하게 된다
예시로 10.0.0.0/16의 아이피 주소를 VPC에 할당한 상황에서, VPC를 원하면 다른 서브넷으로 나눠서 각각 서브넷을 원하는 가용영역에 배치하여 사용하게 된다. (단, VPC를 나눈 서브넷을 다시 나누지는 못한다)
==> ⭐️⭐️ 즉, VPC 내부적으로 라우터가 있고 그렇다면 VPC 내부 서브넷끼리 통신이 된다.⭐️⭐️
**유의 할 점**
VPC의 서브넷 아이피 대역에서는 실제 네트워크와 달리, 총 5개의 아이피 주소를 호스트에 할당 할 수 없다.
5개의 주소는 아래와 같이 쓰인다.
- 서브넷의 네트워크 대역
- VPC 라우터에 할당
- Amazon이 제공하는 DNS에 할당
- 미래를 위해 예약
- 브로드 캐스트 주소
VPC와 외부 통신
기본적으로 사설 아이피 대역은 공용 아이피 대역과 통신이 불가능하다
근데, AWS 인프라를 구축하면 통신이 가능한 이유는?
Public Subnet과 Private Subnet
Public Subnet: VPC 서브넷 중 외부와 통신이 원활하게 되는 서브넷 대역
Private Subnet: 외부와 통신이 되지 않는 서브넷 대역
Public Subnet
AWS의 Internet Gateway를 통해 해당 서브넷을 퍼블릭 서브넷이 되게 할 수 있다
서브넷이 외부와 통신 할 때, Internet Gateway를 거치면 외부와 통신이 가능하게 된다
위 그림처럼 인터넷 게이트웨이를 만들고 라우팅 테이블에서
Destination: 0.0.0.0/0 (모든 IP 주소를 의미 = 외부 모든 IP = 밖으로 나갈 때)
Target: 만들어준 인터넷 게이트웨이 식별자
이렇게 만들어진 라우팅 테이블을 내가 원하는 서브넷에 연결하여 Public subnet을 만들게 된다.
Destination: 10.0.0.0/16
Target: Local
위의 라우팅이 의미 하는 바는
목적지: 10.0.0.0/16(VPC 주소 = VPC로 들어올 때)
Target: Local (내부 VPC 라우터가 알아서 잘 보내줄 것)
Private Subnet
Private Subnet은 Public Subnet과 달리, 아무런 조치를 취하지 않아 외부와 단절된 서브넷이다. (VPC가 기본적으로 사설 IP)
Private IP의 역할은
1. 부족한 IP 주소 문제를 완화
2. 높은 보안성
그래서 보통 우리가 프로젝트를 진행하며 인프라를 구축할 때 Private Subnet을 사용하지 않지만
릴리즈 서버의 경우는 실제 고객의 데이터가 저장되는 데이터메이스를 보호해야 하므로 데이터 베이스를 Private Subnet에 배치하는 것이 필요하다. 같은 VPC의 서브넷은 통신이 가능하기에 데이터베이스를 사용하는 EC2등과 같은 컴퓨터 자원을 같은 VPC에 배치하면 된다.
데이터베이스에 원격으로 접속하고 싶은 경우는?
(릴리즈 인프라에서 사용 될 데이터베이스를 보호하기 위해 Private Subnet에 배치하였고,
실제로 데이터가 잘 저장이 되었는지 Mysql Workbench 혹은 DataGrip으로 원격 접속하여 직접 눈으로 편하게 확인 하는 방법)
-> 현재 Database는 Private Subnet에 존재하여 DataGrip으로는 절대 원격 접속이 안된다.
이때, Private Subnet의 자원에 접속이 되도록 도와주는 호스트를 Bastion host(배스천호스트)라고 부른다.
따라서, 우리가 VPC 생성하고, IG(인터넷 게이트웨이) 생성하고 라우팅 테이블에서 서브넷과 연결해서 Public Subnet을 만들어주면
통신이 가능한 네트워크가 만들어진다 ..!
AWS VPC 만들기
1. VPC 생성
VPC는 AWS 클라우드 내에서 격리된 네트워크 공간을 제공한다.
사용자는 이 공간 내에서 자신만의 IP 주소 범위, 서브넷, 라우팅 테이블 등을 정의할 수 있다.
생성할 리소스: VPC 만
이름: 자유로 작성
IPv4 CIDR: 10.0.0.0/16
2. 서브넷 생성
서브넷은 VPC 내의 IP 주소 범위를 더 작은 단위로 나누어 관리할 수 있게 해준다.
서브넷을 생성할 때는 VPC 내에서 사용할 특정 IP 주소 범위를 지정한다.
VPC ID: 아까 만든 VPC 생성
서브넷 이름: 자유로 작성
가용 영역: 서울
IPv4 CIDR 블록: 10.0.1.0/24
3. 인터넷 게이트웨이 생성 및 VPC에 연결
인터넷 게이트웨이는 VPC를 인터넷과 연결하는 역할을 한다.
IG를 생성하고 VPC에 연결함으로써 VPC내의 리소스가 인터넷과 통신할 수 있는 경로를 만든다.
인터넷 게이트웨이와 VPC 연결
VPC -> 서브넷 -> 인터넷 게이트 웨이 생성
VPC-인터넷게이트 웨이 연결
4. 라우팅 테이블 수정 및 서브넷과 연결
라우팅 테이블은 네트워크 트래픽을 어디로 전송할지 결정하는 규칙을 담고 있다.
VPC에 기본적으로 생성괴는 라우팅 테이블에 인터넷 게이트웨이를 목적지로 하는 라우팅 규칙을 추가하고,
이 라우팅 테이블을 퍼블릿 서브넷에 연결한다.이렇게 하면 해당 서브넷에 속한 리소스가 인터넷과 통신할 수 있게 된다.
0.0.0.0/0(외부 아이피 대역)이 목적지일 때, 인터넷 게이트웨이로 나가도록 설정해준다
이제 외부로 나가도록(=외부와 통신이 가능하도록) 설정이 된 라우팅을 서브넷에 연결해주면,
해당 서브넷은 이제 퍼블릭 서브넷이 된다
기본적인 VPC 설정 끗
VPC에 EC2 만들기
보안그룹 만들기
VPC는 아까 만들었건 VPC를 선택하고, 위와 같이 보안그룹을 생성한다.
EC2 생성하기
매번 하던대로 하면 되는데 이번에 다른 점은 네트워크 설정에서 아까 만든 VPC를 선택해주는 것
그 후 탄력적 IP 설정도 해주기
탄력적 아이피는 인스턴스의 IG를 거쳐 통신 시 부여받을 IP주소를 고정시켜 인스턴스가 종료 된 후 다시 실행될 때 IP 주소가 바뀌지 않게 해준다.
브라우저에 접속
(이미 fastspi로 연동을 해준 상태)
실습도 끝 👍🏻🚩⭐️
회고
💡 사전 지식을 공부하며 서브넷 마스크, 서브네팅을 완벽하게 이해하는 계기가 되었다.
그리고 AWS에서 EC2 인스턴스만 다뤄봤는데 VPC 생성해서 직접 Public Subnet을 생성해보니
인프라 구축의 전체적인 흐름에 도움이 되었다. 네트워크 앞으로 더 열심히 기억해둘 것 !
'IT 동아리 > UMC' 카테고리의 다른 글
[Chapter 7] JPA를 통한 엔티티 설계, 매핑 & 프로젝트 파일 구조 이해 (0) | 2024.05.24 |
---|---|
[Chapter 6] API URL의 설계, REST API, 프로젝트 세팅 (0) | 2024.05.17 |
[Chapter 5] 실전 SQL - Query를 작성하는 방법 (1) | 2024.05.10 |
[Chapter 3] Web Server & Web Application Server(WAS), Reverse Proxy (1) | 2024.05.02 |
[Chapter 1] 서버란 무엇인가 (소켓 & 멀티 프로세스) (3) | 2024.04.07 |