웹 서버 공부

홈 서버 만들기 3 - 기초 네트워크 지식 및 웹 서비스 공개를 위한 방법

dhsama51 2024. 12. 30. 16:35

오늘은 웹 서버를 공개하기 전 필요한 지식과 내 웹 서버 연결 방법에 대해 적어보겠다.

앞부분은 지식, 뒷부분은 웹 서버 연결 방법이다.


 

우선 알아볼 것은 IP이다.

   IP는 인터넷 세상에서 나를 특정하기 위한 정보로, 따라서 전세계에서 유일해야 한다.

비유하자면 인터넷에서 나에게 편지를 전달하려고 할 때 내 주소를 알려주는 형식이 IP이다.

일반적으로 IP라고 하면 IPv4(IP version 4)를 말한다.

 

   IPv4는 2진수로 8자리씩 4개의 부분으로 나누어 표시한다. 2진수로 8자리이므로 각 자리는 0~255로 표시되고, 일반적으로 255.255.255.255처럼 10진수로 바꾸어서 적는다. 그러면 주소의 개수는 0.0.0.0~255.255.255.255로 (28)4 =232=4,294,967,296(약 43억개)가 된다.

   IP는 네트워크 ID, 호스트 ID로 구성돼있는데, 이는 데이터를 전달할 때 한번에 바로 전달되지 않고 네트워크 단위로 데이터를 전송하는 원리이기 때문에 필요하다. 이로 인해 나를 나타내는 정보로 네트워크의 크기, 다른 네트워크로 전송하는 IP가 추가로 필요하다. 아래는 간단히 정리한 네트워크 용어들이다.

 

 

   호스트: 네트워크에 연결된 기기를 의미한다. 후술할 서버, 클라이언트, 라우터, PC 등을 모두 포괄한다.

 

   네트워크 ID: 해당 IP를 포함하고 있는 네트워크를 가리키는 주소

   호스트 ID: 해당 네트워크 내의 호스트를 가리키는 주소
   서브넷: 네트워크의 크기를 나타내는 것

   서브넷 마스크: 네트워크의 크기를 알려주는 정보. IP주소처럼 적되 네트워크 ID를 1로, 호스트 주소를 0으로 적고, 이를 10진수로 변환해 255.255.255.0 또는 /24와 같이 표기한다.

   게이트웨이: 다른 네트워크 간 데이터를 전달하는 장치. 이것 또한 네트워크에 전달된 장치이므로 IP를 갖는데, 다른 호스트들은 이 G/W의 IP를 적어줘야 한다.

   위 정보들을 종합해서 데이터를 전달할 때, 같은 네트워크이면 직접 해당 노드로 전송하고 다른 네트워크이면 게이트웨이로 보내 다른 네트워크로 전송한다.

 

   라우터: 다른 네트워크 사이에서 '라우팅'을 해주는 장치. 라우팅은 데이터의 경로를 결정하는 과정을 말한다. G/W가 개념적인 용어라면 라우터는 실제 기기를 지칭한다. 따라서 G/W=라우터일 수도 있고 G/W=다른 장치 or SW일 수도 있다.

   네트워크 주소, 브로드캐스트 주소: 각각 호스트 ID가 전부 0, 호스트 ID가 전부 1인 주소. 네트워크 주소는 네트워크를 식별할 때 사용하며, 브로드캐스트 주소는 한 네트워크에 있는 호스트 전부에 데이터를 전송할 때 사용되는 전용 주소이다.

  루프백 주소: 127.0.0.0/8 범위의 주소. 로컬 시스템 테스트 용도로 예약된 주소로, 어떤 네트워크에 있더라도 사용할 수 있다. 다른 건 기억할 필요 없고 127.0.0.1이 자기 자신임만 알면 된다.

 

한 네트워크에서 네트워크 주소, 브로드캐스트 주소, 게이트웨이 주소 3개는 일반 호스트가 쓸 수 없는 주소이다. 추가로 DHCP 주소, DNS 서버 주소 등도 있을 수 있지만 DHCP는 일반적으로 G/W와 같은 장치에 설정되고 DNS 서버(=네임 서버)는 외부 DNS 서버(Google DNS 8.8.8.8) 등을 사용할 수 있기 때문에 일반적으로 저 3개만이 필수이다.

 

   DNS: Domain Name Service. 외우기 힘든 IP 대신 외우기 쉬운 Domain Name을 사용하는 것. IP 주소만으로 인터넷을 사용한다면 각 사이트의 IP를 모두 외워야 하므로 힘들다. DNS에서는, 설정된 DNS 서버(=네임 서버)로 DNS 요청이 들어오면 전송된 도메인 네임을 DNS 정보가 저장된 DB인 DNS 쿼리와 비교한 후 변환해주고 IP 주소를 사용자에게 반송하여 접속이 이뤄지게 만든다.

 

   MAC 주소: 네트워크 카드나 인터페이스에 할당된 고유한 하드웨어 주소로, 00:1A:2B:3C:4D:5E처럼 6바이트 주소로 표현된다. 즉, 기기는 HW 주소인 MAC 주소와 SW 주소인 IP주소를 가질 수 있다는 것.

   허브: 네트워크를 물리적으로 연결하는 장치. 데이터를 모든 포트로 복사해 전송한다. 그런데 전송매체를 공유하는 호스트들이 경쟁하면서 충돌이 생기는데 이것이 생기는 범위를 Collision domain(충돌 도메인)이라고 한다. 허브에서는 네트워크 전체가 충돌 도메인이 되어 효율이 낮다.
   브리지: LAN에서 데이터를 전달하는 장치. MAC 주소 table을 이용해 필요한 경우 다른 세그먼트로 전달한다. 각 세그먼트가 별도의 충돌 도메인이기에 허브보다 효율이 높다.

   스위치: LAN에서 데이터를 전달하는, 브리지보다 발전된 장치. MAC 주소 table을 이용해 전달하는 것까지는 같지만, 모든 포트가 독립적이어서 충돌 도메인이 없고, 각 장치간 전용 통신 경로를 제공해 브리지에 비해 포트도 많으며 속도도 빠르다. 일부는 라우팅 기능도 제공한다.

 

   서버: 다른 기기에게 서비스를 제공하는 기기 또는 프로그램. ex) 웹 서버, DB 서버, 파일 서버 등

   클라이언트: 서버에게 서비스를 요청하는 기기 또는 프로그램. ex) 웹 브라우저, 이메일 프로그램, 어플리케이션 등

   ISP: Internet Service Provider=인터넷 서비스 제공자. 국내에서는 SKT, KT, U+가 예시가 된다.

 

 

   그런데 전세계 사람 수만 해도 이보다 많고 한 사람이 1개 이상의 기기를 사용하고 이제는 기기에도 IP를 사용하기 때문에 43억 개로는 한없이 부족하다. 이로 인해 IPv6이 등장하고 해결하기 위한 여러 가지 기술이 등장하였다. 대표적으로 DHCP, 주소 재활용, CIDR, 사설 IP 사용, NAT, CGNAT 등이 있다.

 

DHCP(Dynamic Host Configuration Protocol): IP 주소를 자동으로 할당하는 프로토콜이다. IP를 고정으로 할당하면 사용되지 않는 PC도 해당 IP를 점유하여 낭비가 생기고 직접 설정하다가 다른 PC와 동일한 IP를 할당하여 충돌이 나기도 한다. 이런 경우를 해결해주는데, Lease(임대), Renewal(갱신), Release(반환)의 개념이 등장한다.

 

Lease는 IP를 할당해주는 것을 의미한다. 이때 임대 기간을 설정해서 이후에는 반환된다. 아래의 DORA 과정을 거친다.

   DHCP Discover: IP가 할당되지 않은 Client는 네트워크에 자신의 MAC주소가 담긴 Discover 패킷을 Broadcast한다.

이를 DHCP 서버가 받으면 다음으로 넘어가고, 나머지 호스트들은 패킷을 폐기한다.

   DHCP Offer: 서버는 Offer 패킷을 Broadcast한다. 이때 아까 받은 패킷에 담겨있던 MAC주소를 담아 보낸다.

이를 아까의 Client가 받으면 다음으로 넘어가고, 나머지 호스트들은 패킷을 폐기한다.

   DHCP Request: Client는 DHCP 서버가 있다고 판단하고 Request 패킷을 Broadcast해 IP를 요청한다.

이를 DHCP 서버가 받으면 다음으로 넘어가고, 나머지 호스트들은 패킷을 폐기한다.

   DHCP ACK: DHCP 서버는 IP 임대 풀에서 할당 가능한 IP 주소를 찾고 이를 담아 Broadcast한다.

이를 Client가 받으면 앞으로 이 주소를 사용하고, 나머지 호스트들은 패킷을 폐기한다

Renewal은 매번 Release와 Lease를 반복하는 것이 불필요한 트래픽을 해결해주는 것. 임대 기간이 50%, 12.5% 남았을 때 갱신을 시도하여 성공하면 임대 기간이 다시 늘어나게 된다.

   DHCP Request: 서버에 Request 패킷을 Unicast로 보낸다. 서버가 패킷을 받으면 다음으로 넘어간다.

   DHCP ACK: Client에게 갱신에 대한 정보를 담은 ACK 패킷을 Unicast로 보낸다.

Release는 임대 기간이 끝났거나 IP를 더 사용하지 않을 때 IP를 반환하는 것이다. 서버와 Client 모두 임대 기간 정보를 가지고 있기에 임대 기간이 끝나면 서버는 해당 주소를 사용 가능한 주소 풀로 보낸다.

 

※DHCP 서버와 연결하지 못했거나 IP를 할당받지 못하면 Client는 169.254.0.0/16의 주소를 받는다. 이를 해결하기 위한 윈도우 명령은 다음과 같다.

ipconfig /renew		DHCP 서버에 임대 생성 또는 갱신을 요청하는 명령
ipconfig /release	DHCP Client가 임대 반환을 하겠다는 명령

 

주소 재활용: 말그대로 사용하지 않는 IP를 다시 사용하는 것이다.

ISP(인터넷 서비스 제공자. SKT, KT, U+ 등)는 사용되지 않는 IP를 다시 다른 사용자에게 분배한다.

집의 공유기를 끄고 잠시 기다렸다가 다시 켜면 새로운 IP를 할당받는데, 이는 DHCP 서버에서 내 IP가 회수되고 다른 사람이 사용하지 않는 IP를 임대받은 것으로 해석할 수 있다.

 

CIDR: 위에서 일부러 언급하지 않았는데, 원래는 IP를 A, B, C, D, E 클래스로 나누어 사용하였다. 2진수 기준 A는 맨 앞이 0, B는 10, C는 110, D는 1110, E는 11110이고, 일반적으로 A, B, C까지만 사용하며 A, B, C는 각각 서브넷 마스크가 /8, /16, /24로 고정이다. 지금도 이렇게 쓰기도 하지만, 현재에는 네트워크 ID를 더 세밀하게 조정할 수 있어 /8, /16, /24 말고 다른 형식의 서브넷 마스크도 쓸 수 있다. 이를 통해 작은 범위의 네트워크를 사용할 수 있게 되어 IP 할당을 유연하고 효율적으로 관리할 수 있게 된다.

 

사설 IP: 위에서 설명한 IP는 사실 공인 IP를 말하고, 내부 네트워크에서 사용하는 IP가 사설 IP이다. 결론적으로 사설 IP는 내부에서 사용하기에 다른 네트워크에서의 IP와 겹쳐도 된다. 내부 네트워크에서만 다르면 된다는 것이다. 집에서 공유기가 공인 IP를 받으면 공유기가 유선 또는 무선으로 네트워크 연결을 시켜준다. 이때 공유기가 각 기기에 부여하는 IP는 사설 IP로, 공유기를 거쳐 사설 IP를 공인 IP로 바꾸어 외부로 전송되는 것이다. 반대로 사설 IP는 내부에서만 쓰이기 때문에 외부에서 적으면 정상적으로 전송되지 않는다.

한편 고정 IP와 유동 IP라는 개념도 있는데, 고정 IP는 말그대로 바뀔 일이 없는 상태를 말하고 유동 IP는 계기가 생기면 바뀔 수 있는 상태의 IP를 말한다. ISP에서 공유기로 주는 IP는 공인 IP이긴 하지만 껐다가 키면 IP가 바뀌기 때문에 유동 IP라고 할 수 있다.

 

NAT: 위에서 설명한 공인 IP를 사설 IP로 바꾸는 기술을 Network Address Translation이라고 한다. 공유기, 방화벽 등에서 사용하게 된다. 이에 따라 공인 IP를 절약할 수 있고 내부 네트워크를 외부로부터 보호하는 보안 효과도 있다. 다만 P2P 연결이나 특정 앱은 포트 포워딩을 해줘야 한다. 포트 포워딩은 후술.

 

CGNAT: Carrier-Grade NAT. NAT의 확장판으로, ISP가 다수의 사용자에게 공인 IP 하나를 공유하도록 하는 기술이다. 공인 IP의 각 포트를 할당하는 방식이다. IP 주소 추적이 어려워지고 특정 앱에서 문제가 발생할 수 있다는 단점이 있다.

 


 

자, 빌드업은 끝났다. 이제 내가 웹 서버를 어떻게 연결할 지에 대해 생각한 것을 얘기해보겠다.

https 서비스를 위한 SSL 인증서 발급에는 도메인이 필요하고, 우선 IP도 고정하거나 바뀌더라도 해결할 수 있는 DDNS(Dynamic DNS) 기능이 필요하다. 따라서 도메인 발급, DDNS, SSL 인증서가 필요한데, 이를 통합적으로 제공하는 곳에는 No-IP, DuckDNS 등이 있다고 한다. 오늘은 여기까지 하고 다음 글에 위 3가지를 하는 것을 올리겠다.