-
[생활코딩] Home ServerServer 2022. 10. 1. 04:32
HOME SERVER
※ 주의사항
본 내용은 생활코딩 유튜브 채널의 WEB2-Home Server 강의를 듣고 제가 나름대로 이해한 내용을 잊지 않기 위해 기록한 것입니다. 따라서, 여기에 담긴 정보는 적확한 정보가 아닐 수 있으며 수많은 개념들을 후려친 설명일 수 있으니 생활코딩 강의를 통해 학습하실 것을 권합니다.
1. Router
라우터는 우리가 집에서 사용하는 공유기이다. 인터넷은 컴퓨터들을 관계짓는(네트워킹) 기술이다. 누군가와 관계를 맺을 때 통성명을 하듯, 컴퓨터도 외부의 컴퓨터와 네트워킹 하기 위해서는 서로를 부를 이름이 필요하다. 그 이름을 우리는 IP(Internet Protocol)이라고 한다. 즉, 인터넷 환경을 사용하기 위해서 모든 컴퓨터(기기)는 IP 주소를 가져야한다.
라우터는 우리의 컴퓨터가 외부의 여러 기기가 연결될 수 있도록 돕는 장치인데, 이때 IP 주소를 활용한다.
라우터에는 WAN(Wide Area Network), LAN(Local Area Network) 포트가 있다. WAN 포트는 우리가 인터넷 서비스를 사용하기 위해 통신사와 계약하면 통신사가 설치해주는 인터넷망 선을 연결하는 포트이다. 그 선을 WAN포트에 연결하게 되면 우리는 인터넷망에서 사용할 IP 주소(public IP address)를 부여받는다. 그리고 그 주소는 공유기의 주소가 된다.
LAN 포트는 공유기에 연결된 인터넷 서비스를 사용하고자 하는 기기와 연결하는 포트이다. 우리가 집에서 사용하는 노트북, 데스크탑, 스마트폰 등은 공유기를 통한 인터넷 서비스를 이용하기 위해서 이 LAN 포트와 연결되어야 한다. 와이파이로 이 공유기에 연결하는 행위는 LAN 포트에 자신의 기기를 연결하는 것과 같은 행위다.
위에서 WAN 포트를 통해 라우터가 부여받는 IP주소를 public IP address라고 부른다고 했는데, 이것은 광역 네트워크(Wide Area)안에서 부여 받는 IP 주소이며 공인 IP 주소, 외부 IP 주소라고 부른다. 또한, 라우터는 지역 네트워크(Local Area)안에서도 IP 주소를 부여받는데 그 주소를 Gateway address, Router address라고 부른다.
그리고 LAN 포트를 통해 연결된 각각의 기기들 또한 IP 주소를 부여받는데 private IP address, 내부 IP 주소라고 부른다.
회사가 대표번호를 통해 각 부서의 내선번호로 전화를 연결해주는 개념과 public IP address private IP address 개념과의 관계는 유사하다. 회사의 대표번호가 외부 IP이고 내선번호가 내부 IP인 것이다. 그리고 대표번호로 전화가 왔을때 내선으로 연결해주는 교환원이 바로 라우터이다.
그런데, 왜 IP주소는 왜 이렇게도 복잡하게 구성되어 있는 것일까? IP주소의 개수 물리적으로 정해져있다는 한계를 극복하는 과정에서 IP 주소가 복잡해졌다. 이 말이 무슨말인고 하면, 쉽게 후려쳐서 말하면 라우터 때문이다.
라우터가 없다고 가정해보자.(개념 후려침 주의)
우리가 데스크탑을 인터넷에 연결하려면 가정집 벽면에 있는 WAN포트에 데스크탑을 연결해야 한다. 그러면 우리는 공인 IP만 있으면 된다. 공인 IP만으로도 광역 네트워크와 연결될 수 있기 때문이다. 그런데, 내 노트북도 인터넷에 연결하고 싶다면? 라우터가 없다면 새로운 회선을 증설해서 그 회선을 직접 노트북에 연결해야한다. 즉 새로운 공인IP 주소를 광역 네트워크로부터 부여받아야 한다. 그렇다면 스마트폰도 연결하고 싶다면?? 또 회선 하나를 증설해야한다.
연결하고 싶은 기기는 많아지는데 IP주소는 제한적이다. 이렇게 되면 인터넷 서비스를 공급하는 통신사, 그리고 인터넷 서비스를 사용하는 우리는 서로 lose-lose 완전 쌉손해다. 쓰고싶은 사람은 많은데 공급이 적으니 인터넷 요금이 엄청 비싸진다. 그리고 통신사는 이렇게 비싼 가격으로 조금 파는것이 박리다매보다 손해다.(인터넷이 비싸서 500만명 쓰는 것과 인터넷이 싸서 모든 사람에게, 모든 곳에 쓰이는 것, 무엇이 이득이려나?)
그래서 라우터가 생겨났다.
라우터가 있다면 하나의 외부 IP로 여러 내부 IP를 부여해(0~255, 256개 정도??) 물리적 한계를 개선할 수 있다. 물론 이 한계를 극복하기 위한 여러 기술들이 더 있다고 소개는 되어있지만, 일단 이정도로도 물리적 개수를 256배 향상시켰으니까.
생활코딩 이고잉님은 라우터가 있었기에 지금의 인터넷 환경이 구축될 수 있었다고 보고있다. 맞는 말이다. 무선통신(와이파이)가 안되는데 인터넷 환경 구축은 불가능하다.
2. NAT
NAT는 Netwrok Address Translation의 약자인데, 사설 IP를 쓰는 HOST가 사설 IP 바깥 쪽의 공인 IP를 사용하는 외부의 세계에 접속할 수 있게되고 그 때 사용하는 기술이 NAT이다. 외부 네트워크에서 알려진 공인 주소와 다른 IP주소를 사용하는 내부 네트워크에서 IP주소를 변환하는 것(네이버 지식백과)을 말한다. 위의 라우터가 하나의 외부 IP를 사용하여 여러대의 호스트가 인터넷에 접속할 수 있도록 도울 수 있는 것은 NAT 기술 덕분이다.
라우터가 NAT 기술을 통해 우리(내부IP)가 외부의 인터넷에 접속할 수 있도록 돕는다.
그런데, 이 기술이 왜 필요할까?
여기서 후려쳐서 이해해본다.
위키디피아에 노트북에서 'NAT'를 검색했다고 가정해보자. 이는 내가 나의 내부 네트워크 외부에 있는 다른 지역 네트워크(위키디피아)에 'NAT'에 대한 검색 결과 정보를 '요청'하는 것과 같다. 그러면 이러한 요청을 라우터가 받는다. 그런데, 이 요청을 라우터는 외부의 지역 네트워크에 직접 전송할 수 없다. 라우터는 외부의 지역 네트워크와 직접 연결되어있는 것이 아니라, 광역 네트워크와 직접 연결되어있기 때문이다. 그렇다면 라우터가 광역 네트워크를 통해 외부 지역 네트워크로 우리의 요청을 보낼 수 있도록 어떤 방법이 필요하다. 여기선 일종의 "통역"이 필요한 것이다. 그 방법, 기술을 NAT라 한다.
다시 돌아와서 NAT를 위의 예를 통해 설명하면,
우리가 노트북에서 'NAT'를 검색하면 노트북은 Gateway address를 통해 라우터에게 요청을 보낸다. 라우터는 노트북의 내부 IP를 공유기에 기록한다.(그 이유는 뒤에서 설명한다.) 그리고 그 요청 내용을 외부 IP로 변경하여 위키디피아 공인 IP에 보내고 그쪽 지역 네트워크에서 검색결과를 그들의 라우터를 통해 나의 공인 IP로 보내온다. 그 정보를 받은 라우터는 이 정보를 내 노트북으로 보내야 하는데, 그때 아까 기록했던 내용을 바탕으로 내 노트북으로 그 검색 결과를 가져다준다.
즉, NAT는 내부 IP와 외부 IP간에 의사소통이 가능하도록 돕는 번역기술인 셈이다.
여기까지는 내 노트북을 클라이언트로 사용했을때 NAT가 동작하는 방법을 살펴본 것이다. 그렇다면 내 노트북을 Server로 사용할 때는 어떤 과정으로 동작할까?
3. Port
내 노트북을 server로 만들었다고 가정하자. 내가 위키디피아가 된 것이다. 그러면 누군가가 라우터의 외부 IP를 통해 내 서버가 있는 로컬 IP로 접근하고자 할 것이다. 그러나 접근할 수 없다. 왜냐하면 라우터는 지금까지의 정보로는 외부 IP로 그 요청을 받았지만 어떤 호스트에게 이 요청을 전달해줘야 하는지 알 수 없기 때문이다. 내 노트북이 클라이언트였던 위의 예시에서는 내가 요청한 내용을 라우터가 기록해두었기 때문에 그 요청에 대한 응답이 오면 내게 쏴줬지만 내가 서버(위키디피아)가 되었을 때는 외부에서 들어오는 어떤 요청이 내게 오도록 설정해주지 않으면 라우터는 얼을 탄다. 라우터가 호스팅하는 기기가 여러대일 수 있고, 한 대의 호스트가 여러 서버를 운영할 수도 있기 때문이다. 내가 카카오라면 카카오톡 서버도 운영하고 카카오 페이 서버도 운영하는데 라우터가 카톡 메시지 전송 요청을 카카오톡 서버로 보내야하는지, 카카오 페이 서버로 보내야하는지 지정해주지 않으면 안된다는 이야기와 같다. 이때 필요한 것이 Port ForWarding이라는 기술이다.
내 노트북으로도 여러대의 서버를 돌릴 수 있다고 했다. 그것이 어떻게 가능할까? 바로 Port 번호이다. 하나의 컴퓨터에는 서버를 설치할 수 있는 여러개의 포트가 내장되어있고 우리는 포트번호마다 다른 서버를 설치할 수 있다.
포트번호는 총 65,535개가 있으며 이중에 1023번까지의 포트는 예약된 포트라고 하여 잘 알려진 포트(Well-known 포트)라 부르는데 여기에는 말 그대로 잘 알려진, 즉 컴퓨터에게 필수로 설치되어야 하는 서버가 할당되어 있다. 따라서 이 번호는 우리가 임의로 서버를 지정할 수 없다. 예를들어, http라는 웹의 포트 번호는 80번이다. 이 포트를 우리가 임의의 서버로 지정한다면? 시스템에서 막고있지만 그것을 막지 않는다고 하면 웹 서비스 자체를 사용할 수 없게 된다.
그렇다면 포트를 통해 외부에서 내 서버로 어떻게 접속할 수 있을까?
4. Port Forwarding
위의 설명대로 외부에서 나의 서버로 접속하도록 하려면 공인 IP를 통해 내 사설 IP로 들어와야 한다. 그러면 그 유입경로를 뚫어주면 된다. 이때 이용하는 것이 포트 번호라고 위에서 설명했다.
우리의 공인 IP에 어떤 포트로 외부에서 접속해오면 그 포트는 내부 IP의 특정 포트로 보내는 작업을 하면 된다. 이것을 Port Forwading이라 한다.
예시를 들면, 내 라우터에 이런 포트포워딩을 설정했다고 하자.
카카오톡 서버가 깔린 내 노트북 서버에 누군가 접근하고자 할때 이렇게 안내한다. 내 공인 IP에 8081 포트로 누군가 접속을 해오면, 내 노트북의 내부 IP에 80 포트로 보낸다고 설정하는 것이다.
그리고 내 공인 IP의 8080 포트로 들어온다면 카카오 페이 서버가 깔린 내 데스크탑으로 보낸다고 위와 같이 설정하는 것이다.
물론 내 노트북에도 8081과 다른 포트로 설정한다면 카카오 페이 서버를 개설할 수 있다.
포트 포워딩은 라우터 관리자(게이트 웨이 주소를 웹 주소창에 입력하면 확인 가능)에서 포드포워딩을 설정해주면 된다.
5. Dynamic & Static IP address
어쨌든 IP 주소는 물리적으로 개수가 정해져 있다. 라우터로도 커버가 불가능한 것이다. 그래서 유동 IP 기술이 생겨났다.
예를들면
ISP(인터넷 서비스 제공자)는 나에게 IP를 제공한다. 그리고 모든 인터넷 서비스 가입자에게도 제공한다. 그러면 IP가 부족하다. 그래서 내가 한동안 인터넷 서비스를 이용하지 않으면 그 IP주소를 다른 사용자에게 부여한다. 그리고 내가 다시 인터넷 서비스를 이용할 때 다른 휴면 IP를 부여한다. 즉, IP 주소를 돌려막는 것이다. 이것을 Dynamic IP Address, 동적 IP 주소라고 하는 것이다.
여기서 동적 IP의 IP는 외부 IP를 뜻한다.
그런데 문제는, 내가 server를 운영할 때 발생한다. 나의 외부 IP 주소가 바뀌면 내 서버로 접근하는 주소가 바뀌는 것이기 때문에 IP주소가 동적으로 바뀌면 외부에서 내 서버에 접근하는 것이 불가능해진다.
그래서 이런 문제 발생을 막기 위해 통신사에서는 특정 금액을 지불하면 고정 IP, Static IP Address를 제공한다.
6. DHCP(Dynamic Host Configuration Protocol )
기기에 랜선, 와이파이를 연결하면 그 순간 각각 기기는 동적으로 IP와 서브넷마스크, 게이트 주소, DNS 서버와 같은 값들이 세팅된다. 다른건 차치하고, IP가 동적으로 할당된다. 이것이 DHCP이다.
DHCP란 동적으로 호스트를 구성해주는 통신규약, 즉 IP 주소와 같은 TCP/IP 통신을 수행하기 위한 네트워크 구성 파라메터들을 동적으로 설정하기 위해 사용되는 표준 네트워크 프로토콜이다.(네이버 지식백과)
보통 로컬 네트워크에는 수많은 호스트가 네트워크에 빈번하게 접속을 연결하고 다시 갱신하기 때문에, 접속을 위해 네트워크 구성 파라메터들을 수기로 입력하게 되면 그 과정이 번거로울 뿐더러 파라메터 '중복'의 문제가 발생한다.
예를들면 지금 내가 쓰고 있는 노트북의 내부 IP을 다른 누군가가 사용하여 로컬 네트워크로 접속요청을 할 수도 있다는 뜻이다. 위에서 IP는 서로의 존재를 규정짓는 '이름'과 같기 때문에 IP는 같으면 안된다. 같으면 IP 충돌로 인해 인터넷 사용이 불가능해진다.
하여튼, DHCP 서비스를 가능하게 하기 위해서는 DHCP 서버가 필요하다. 그리고 라우터는 DHCP 서버를 내장하고 있다. 동시에 호스트에는 DHCP Client라는 프로그램이 내장되어 있다. 또한 우리가 사용하는 통신 부품들은 부품마다 공장에서 기록된 고유한 식별자를 가지고 있다. 이를 MAC주소(Media Access Control Address)라고 부른다.
DHCP 서비스가 동작하는 과정은 다음과 같은 과정으로 이루어진다.
[새로운 기기로 인터넷을 연결할때]
인터넷 연결 설정하여 연결하고자 하는 네트워크를 선택한다. 그 이후로는
[이미 연결했던 기기가 인터넷을 연결할때]
1. 컴퓨터가 부팅되며 DHCP 서버가 존재함을 탐지(by 라우터 MAC주소)하고 자신의 MAC주소를 알려준다.
-> 이미 연결 경험이 있기 때문에 서버와 클라이언트는 구면이다. MAC주소를 서로 알고있다 이마.
2. DHCP 서버는 컴퓨터에 IP 주소 등이 할당되어 있는지 확인한다.
-> 이론적으로는 기기가 매번 부팅할 때마다, 즉 IP 할당 요청이 발생할 때마다 IP 주소가 변경되어야 하지만 많은 기기의 접속 요청이 빈번하지 않다면 기존 IP 주소 그대로 재할당 받는 경우가 많다.
3. 컴퓨터가 DHCP 서버에 IP 주소 할당을 요청한다.
4. DHCP 서버는 IP 주소 할당 현황에 따라 IP 주소 등의 정보를 컴퓨터에 할당한다.
위에서 동적인 외부 IP를 정적으로 바꾸는 것은 통신사에 비용을 지불하는 것으로 가능했다.
그렇다면 내부 동적 IP를 정적으로 바꾸는 방법은 무엇일까? 이것 또한 라우터 관리자>고급설정>네트워크관리>내부네트워크설정>DHCP 서버 주소 관리 에서 고정하고 싶은 기기의 MAC 주소에게 고정시킬 IP를 등록해주면 된다.
'Server' 카테고리의 다른 글
HTTP 상태코드 정리 (0) 2022.12.23 REST API (path parameter, query parameter) (0) 2022.11.20 API METHOD PATCH vs PUT (0) 2022.11.15 백엔드 API 패턴 - Layered Architecture (0) 2022.11.15