우리가 아무리 많은 애플리케이션을 개발 및 구현해도 이것을 사용하지 않으면 아무 의미가 없다.
이번 포스팅에서는 우리가 만든 애플리케이션을 배포하기위해 필요한 네트워킹 지식을 작성한다.
한국의 IP할당은 KISA(한국인터넷진흥원)에서 수행한다. 하지만 모든 장비에 IPv4 IP를 부여하면 IP의 부족에 많은 문제가 생긴다. 이러한 문제점을 해결하기 위해 나온것이 ipv6이지만, 이 ipv6의 문제점은 기존 ipv4와는 다르게 128비트 주소 체계를 사용한다는 점이다. 우리의 IPv4환경의 보안이랑 IPv6보안 환경은 생각보다 큰 문제를 일으킨다.
ipv4환경에서는 ipv6의 장비들을 탐지할 수 없어, ipv6 장비로 해킹을 시도할 경우 문제를 인식할 수 없다.
또한 ipv6의 패킷의경우 DDOS공격이 하기 쉽다는 점이다. 일반적인 패킷의 경우 IPV4는 32비트이고 IPv6의 경우 128비트 이므로 하나의 패킷마다 크기가 4배가량 차이가 난다. 또한 기존 NAT프로토콜로 인한 IPv6 없이도 하나의 IP를 이용하여 라우팅을 해줌으로써 문제를 완벽히는 아니더라도 대체적으로 해결하고 있다. 또한 연동문제 때문에 사용하지 잘 사용하지 않는다고 알고있음
우리가 사용하는 IP는 공인IP라고 불리는 ISP에서 발급해주는 IP와 하나의 공인IP에 수많은 사설IP, 2가지와 OS내장 IP인 127.0.0.1인 Localhost로 나뉜다.
0. localhost(127.0.0.1)
우리는 로컬호스트를 그냥 127.0.0.1로 알고 있다. 하지만 여기에는 여러 의미가 담겨있다.
127.0.0.1은 모든 컴퓨터에 존재하는 것을 알 수 있을 것이다. 심지어 안드로이드 스튜디오의 애뮬레이터에도 localhost가 존재한다. 이 localhost는 loopback ip로 특수 목적의 ipv4로 분류되고 있다. 그렇다면 localhost랑
private는 차이는 바로 "네트워크 인터페이스를 거치느냐 or 거치지 않느냐"로 차이가 구분된다.
또한 이 localhost는 운영체제와 직접적으로 연결이 되어있다.
이 의미는 private ip보다 localhost가 테스트적인면에서 성능이 더 좋다는 의미이기도 한다.
1. private ip(사설 IP)
이름에서 사설ip라도 되어있어서 나는 처음에 이 사설ip라고 불리는 ip로 외부와 통신을 하는줄 착각하고 공인ip와
반대로 알고 있었다. 이 사설 ip는 내부망(intra net)에서만 쓰이며, 하나의 공인ip에 크게 3가지 대역으로 존재한다.
외부에서 직접적으로 연결은 불가능하며 NAT 혹은 NAPT 테이블에 정의된 경로를 활용하여 접근이 가능하다.
게이트웨이(공유기)를 통과하고 내부 IP들은 모두 사설IP라고 생각하면 된다. 우리가 흔히 사용하는 도커는 가상 eth0라는 브릿지에 사설ip를 하나 부여하고 그 밑에 더 낮은 대역의 ip들을 부여하는 방식으로 네트워크 인프라를
구축한다. 이 사설IP는 각 공인IP마다 존재한다.
2. public ip(공인 IP)
유일한 IP를 뜻함. ISP(Internet service provider)가 제공하는 IP주소이다. 각 공유기(게이트웨이)에 부여한다.
DHCP를 사용하여 공인IP가 부여되는 방식이다. 우리가 알고있는 방화벽도 이 게이트웨이에서 보안이 이루어진다.
3. VPC
이번 프로젝트에서 사용하는 VPC라는 개념을 사용해서 인프라를 구축한다.
이 VPC를 이용하여 직접 네트워크 인프라를 구축하게 되는데, 각각의 VPC는 완전히 독립된 서브넷, 라우팅 테이블, 게이트웨이를 구성하고 제어한다.
만약 VPC가 없다면 지저분한 네트워크 구조가 탄생된다. 이러면 보안의 취약점도 증가하고 유지보수 측면에서
문제가 생길 수 있다.
위 사진은 VPC를 구축하지 않았을 경우
지금 공모전에 참가하는 프로젝트에서 사용할 네트워크 인프라 구조이다. 모든 네트워크 트래픽은 게이트웨이를
통과하며, 라우터에 정의된 라우팅 테이블에서 네트워크 트래픽의 경로를 설정해준다. 저기서 추가하자면, 라우터에 S3저장소를 추가하여 데이터베이스를 연결할 수 있다.
VPC가 없는 경우와 비교했을 때 깔끔한 것을 볼 수 있다.
4. NAT(Network Address Translation)
3계층에서 작동하는 프로토콜이며, 라우터와 같이 동작한다. 사설IP <-> 공인IP 를 변환해주는 역할을 수행한다.
5. Gateway
우리가 알고 있는 방화벽이 존재하고, 서로 다른 프로토콜을 변환 및 서로 다른 네트워크 망을 연결해주는 장비이다.
특정 계층에 종속되어 있지 않는다고 한다.
6. route
3계층 장비이며 패킷이 목적지까지 가기 위한 경로를 지정해 준다.
5. NAPT(Network Address Port Translation)
도커에서 NAT의 단점인 사설IP와 공인IP와의 1:1 매칭으로 인한 여러 client가 접속하지 못하는 문제점을 해결한
라우터와 같이 동작하는 프로토콜이다. 이름에서도 알 수 있듯이, NAT프로토콜에서 Port만 추가되었다.
이 의미는 IP만 변환하지 않고 PORT도 같이 변환한다는 의미이다.
6. Load Balancer
네트워크 트래픽 부하를 방지하기 위한 기법 중 하나. 하나의 서버를 스케일 업 하면서 부하를 방지하면 엄청난
비용이 들어간다. 하둡, 엘라스틱 서치 등과 같이 스케일 아웃하면서 서버의 리소스를 늘려가는 방식이다.
여러개의 인스턴스에 서비스를 두고, 하나의 서버에 많은 트래픽이 흘러가지 않게 하는 방법이다.
여러개의 인스턴스에 트래픽을 돌리는 스케줄링 기법은 RR, SJF, HRN 등 다양한 기법이 있다.