효율적이면서 보안상 문제가 없고, scalable(확장가능한) 애플리케이션/서비스를 개발하는데 인터넷을 이해하는 것은 필수적이고, 백엔드가 대체로 웹개발에서 일을 하다 보니 인터넷에 대해 자세히 알아볼 필요가 있다. 이번에는 간단히 훑는 정도로만 알아보도록 하자.
서로 연결된 컴퓨터들의 모임을 Network(네트워크)라고 말한다. Internet(인터넷)은 Network들의 모임을 일컫는 말이다.
현재는 전지구의 사람들을 연결하는 복잡한, 최적화된 네트워크로 진화했다. 원래는 그런 의도가 아니었지만.
크게 세개의 구역으로 나눌 수 있다.
흔히 웹과 인터넷을 동의어로 생각하는 사람이 많으나 웹은 인터넷을 활용한 application 중 하나일 뿐이다. 다른 유명한 예시로는 email, BitTorrent 등이 있으나 여기선 설명 안하겠다.
(참고할만한 영상)
What is the Internet?
The Internet : Wires, Cables, and Wi-Fi
추상적으론 규격화된 protocol(프로토콜) 하에 장치들과 컴퓨터 시스템들이 연결되는 방식으로 인터넷은 작동한다.
프로토콜은 여러개가 있는데, 각기 연결된 장치들끼리 어떻게 정보교환을 하는지를 정하고 reliable data transfer(신뢰성 있는 정보 전달)이나 secure data transfer(안전한 정보 전달)을 보장하는 녀석들도 몇몇 있다.
하지만 프로토콜은 체계를 지정할 뿐이고, 물리적으로 데이터 전달을 담당하는 곳은 router(라우터)이다. 전송할 데이터는 일반적으로 packet(패킷)이라는 단위로 쪼개져서 router들 사이를 이동해 최종 목적지에 도달한다.
아까 프로토콜이 여러개가 있다고 했는데, 인터넷에서 주로 사용하는 프로토콜은 IP(Internet Protocol)와 TCP(Transmission Control Protocol)이다. 전자는 packet들이 router들을 통해 올바른 목적지에 도달하도록 보장해주고, 후자는 packet들의 reliable transfer과 올바른 순서로 도달하는 것을 보장해준다.
직접적으로 사용하는 위 2개 말고도 인터넷 기반 통신을 돕는 protocol로 DNS(Domain Name System), HTTP (Hypertext Transfer Protocol), SSL/TLS(Secure Sockets Layer/Transport Layer Security) 등이 있다.
이들이 어떻게 상호작용해 인터넷이 문제 없이 작동하게 하는지 꼭 알아야 한다.
그 전에 용어 정리를 좀 하겠다.
google.com
이 대표적이다.앞으로도 자주 볼 용어니 꼭 기억해두자.
(참고할만한 영상)
The Internet : Packets, Routing & Reliability
아까 protocol이 장치들 사이에 정보교환을 어떻게 할지에 대한 규칙을 지정한다고 했다.
위에 이미 봤다시피 그 규칙들은 매우 많은데, 대체 왜 사람 피곤하게 protocol이 이렇게 많을까? 이게 궁금하면 다음 링크를 읽는걸 추천한다.
Apurv Mittal - Why do we have so many protocols?
위랑 별개로 또 이렇게 프로토콜이 많이 생긴 이유는 상상 이상으로 다양한 장치들이 상호작용을 해서 다른 protocol이 필요 + 특정 상황에 더 적합한 체계를 만들기 위해서라고 생각한다. 당장 위에 소개한 protocol들을 보면 각기 제 역할이 다른 것처럼 말이다.
그래도 적어도 '특정 protocol'에 대해서는 이를 사용하는 사람들끼리 그 protocol에서 지정한 체계화된 통신을 하는 것이 보장이 되며, 이것이 protocol의 역할이다. 여러 사람이 각기 자기 원하는 방식대로 정보교환을 하면 아비규환이 되는건 물론이거니와 정보교환 자체가 제대로 안될 확률이 높기 때문에 protocol은 인터넷을 위해 꼭 필요하다.
특히 개발자의 경우 본인이 개발한 프로그램이 인터넷 상에서 원할히 상호작용할 수 있도록 protocol들을 잘 이해하는게 중요하다. 그럼 하나씩 간략히 설명해보겠다.
IP address가 device 구별을 위한 네트워크 내 고유값임을 말했었다. 보통 4개의 0~255 사이의, .
으로 구별된 숫자로 이루어져있다. 192.168.1.0.
처럼 말이다.
Domain Name은 사람이 읽을 수 있는 웹주소인것도 방금 말했었다.
사실 브라우저에 Domain Name을 입력하면 브라우저가 해당 Domain을 운영하는 server에다가 자료를 요청하게 되는데, 그러면 자료를 제공할 곳이 어디인지를 인터넷이 이해할 필요가 있고, 이를 위해서는 IP address가 필요하다. 이 변환을 담당하는 곳이 DNS다.
사용자가 브라우저에 주소를 입력 -> 컴퓨터가 DNS Server에 웹주소가 포함된 DNS Query를 전송 -> DNS Server에서 그 웹주소에 대응되는 IP address를 컴퓨터에 전송 -> 컴퓨터가 그 IP 주소를 활용해 원하는 data를 취득.
간단하게는 위와 같은 과정을 거쳐 통신이 이루어진다고 생각하면 된다.
아무래도 단일 DNS 서버에서 관련 정보들을 전부 저장하기 힘들기에 hierarchical structure (계층 구조)의 형태로 이루어져 있는데 자세히 설명하지는 않겠다.
DNS 서버의 내용을 조작해가지고 특정 domain의 주인인것'처럼' 행동하는 공격 방식도 있으며, 이를 막기 위한 표준인 DNSSEC이라는 것도 존재를 한다. 다만 이 표준이 만들어진지 꽤 시간이 많이 지났어도 21년 기준, second-level DNS 측에서는 5%정도밖에 사용이 안되고 있다.
IP 주소를 device에 할당하는 것은 ICANN (Internet Corporation for Assigned Names and Numbers) 부설의 Internet Assigned Numbers Authority에서 담당한다. 중복된 주소가 할당되는 것을 방지해준다.
다만 위의 IP 주소들만으로 이 세상의 모든 device를 구별하는 것이 슬슬 힘들어지자 (대략 43억개까지 표현이 가능했음) IPV6라는 것이 만들어졌다. 얘는 8개의 16진수로 이루어져있으며, 각 숫자의 범위는 0~65535나 된다. 대략 43억의 네제곱만큼 (약 3.4 * 10^38개)의 주소들을 나타낼 수 있다. 현재는 구글 접속자들 기준 약 45%가 활용하고 있다.
Domain Name의 할당도 ICANN에서 한다.
일반인이 컴퓨터를 사용할 때 할당받는 IP 주소는 보통 ISP (Internet Service Provider)에서 제공하는 주소를 활용한다. 예를 들어 집에서 인터넷을 사용할 때 kt에서 제공하는 인터넷을 사용한다면 ISP가 kt인 것이고, kt에서 제공하는 주소를 활용하는 것이다.
Local Area Network같은 근거리 통신망의 경우에는 ISP에서 IP를 제공받는게 아니라 본인이 IP를 직접 설정하거나, DHCP (Dynamic Host Configuration Protocol)로부터 IP 주소를 받아야 한다.
(참고할만한 영상)
The Internet : IP Addresses & DNS
인터넷 기반 애플리케이션 / 서비스에서 보통 활용하는 protocol이다. 아까 브라우저가 Domain Name을 입력시 자료를 Domain을 운영하는 server에 요청한다고 했는데, 이때 활용되는 것이다. 이때 요청을 HTTP Request, 답변을 HTTP response라고 하며 정상적인 통신에서는 HTTP response에 원하는 자료가 들어 있다.
HTTPS는 HTTP에 SSL/TLS encryption을 추가해서 secure communication을 보장해준다.
HTTPS를 활용하고 있으면 secure communication을 보장해주기에 위와 같이 자물쇠가 나타나게 된다.
참고할만한 영상
The Internet : HTTP and HTML
그러나 HTTP는 단순히 애플리케이션과 서버 사이의 메세지 규칙을 정할 뿐이다. 이 메세지들을 전달하는것과 관련된 protocol은 TCP(Transmission Control Protocol)와 IP다.
IP는 아까 자세히 다뤘으니 넘어가고, TCP에 대해 좀 얘기해볼건데, 앞에 말했듯이 reliable transfer, 올바른 순서 도달을 보장해주며 전달받은 data에 오류가 있는지도 확인해준다. 여기서 몇개의 용어를 더 알아볼 필요가 있다.
단순히 애플리케이션에서 흔히 사용되는 HTTP, FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol)만 알아서는 안된다. 애플리케이션 사이의 정보 교환을 돕는 TCP를 잘 이해하고, 본인의 application/service가 적절한 port, socket 상에서 놀고 connection을 다른 device와 적절히 구축하고 있는지 인지할 필요가 언제나 있다.
이를 기반으로 앞에 말한 효율적이고 scalable하면서 보안상 안전한 application, service를 만들 수 있게 되는 것이다.
위에서 설명한 개념들은 사실 하나의 계층 구조로도 볼 수 있으며, 이를 protocol stack이라고 부른다.
protocol stack은 흔히 다음과 같은 layer로 구별이 된다.
위에서 아래로 갈수록 관련 layer의 정보들이 전송될 data에 추가가 된다. 아래에서 위로 갈수록 이것들이 보통 적출되고 최종적으로 실제 필요한 data만 user에게 제공이 된다.
secure connection을 위한 protocol이라고 앞에서 말했다. 여기서도 몇개의 용어를 알아볼 필요가 있다.
application/service는 SSL, TLS를 잘 이해해가지고 개인정보가 유출되지 않고 보안상 안전하게, 원하는 대상에게만 전달 될 수 있도록 활용하는 것이 중요하다.
특히 service를 운용하는 서버 관리자는 유효한 SSL/TLS certificate을 확보하고, SSL/TLS 연결을 구축하기 위한 가장 효과적인 방법을 생각하는 것도 중요하다. 그래야 integrity(무결성)랑 confidentiality(기밀성)를 인터넷상에서 확실히 보장받을 수 있기 때문.
(참고할만한 영상)
The Internet : Encryption and Public Keys
The Internet : Cybersecurity & Crime
요즘은 무선 인터넷 접속을 안 쓰는 사람은 없을 것이다. Wifi라든가.
무선 인터넷 접속은 크게 wifi, cellular이 두 개로 구별이 가능하다.
wifi의 특징은
cellular의 특징은
인터넷을 활용한 컴퓨팅으로 현실에서 자주 볼 수 있다. 사용자의 소프트웨어 설치, 파일 관리를 위한 기술적인 조치를 할 필요가 없게 해준다. 또 사용자 입장에서 reliability도 크게 증가함.
대표적인 예시들로는
인터넷과 관련된 요즘 유행하는, 혹은 최근에 많이 발전된 기술들로는
당연하지만 이렇게 최근에 유행하는 기술들이 뭔지 이해하는것도 개발자 입장에서 매우 중요하다.
참고 자료
cs.fyi - How does the Internet Work?
Vox(Timothy Lee) - The Internet Explained
Stanford(Rus Shuler) - How Does the Internet Work?
roadmap.sh - How does the internet work?