[CS/네트워크] HTTP와 DNS 동작 원리

선우·2025년 12월 8일

CS

목록 보기
2/20

[CS/네트워크] 02. 응용 계층: 웹 서비스의 '통역사' HTTP와 '전화번호부' DNS

⚡ 한 줄 요약: 우리 눈에 보이는 웹 서비스가 실제로 어떻게 메시지를 주고 받고(HTTP), 복잡한 숫자로 된 주소를 어떻게 이름으로 찾아내는지(DNS) 그 동작 원리를 완벽하게 파헤칩니다.

1. 👋 들어가며: 우리가 매일 만나는 네트워크의 '얼굴'

우리가 브라우저 주소창에 URL을 입력하고 엔터를 누르는 그 찰나의 순간, 네트워크 세상에서는 수많은 '약속'이 오고 갑니다. 사용자와 가장 가까운 곳에서 우리가 원하는 서비스를 가능하게 만드는 '응용 계층'에 대해 알아봅니다.

  • 🧐 Why:

    • 프로그램끼리 대화하려면 공통의 언어가 필요합니다.
    • 우리가 웹을 서핑하고 메일을 보내는 모든 행위가 어떤 규칙으로 이루어지는지 알아야
      효율적인 개발과 문제 해결이 가능하기 때문입니다.
  • 🎯 Goal: (오늘의 목표)

    • 응용 계층의 5가지 핵심 프로토콜(HTTP, HTTPS, FTP, SMTP, POP3)의 역할을 구분하고,
      특히 웹의 근간인 HTTP의 구조와 DNS의 단계별 탐색 과정을 마스터합니다.

📂 2. 응용 계층, 네트워크의 '인포데스크'

📌 2-1. 응용 계층이 하는 일

  • 정의:
    • 우리가 실제로 사용하는 '애플리케이션'이 네트워크와 만나는 접점입니다.
  • 핵심 역할:
    • 사용자가 "이 페이지 보여줘"라고 요청하면, 응용 계층은 이를 상대방 서버가 이해할 수 있는 '메시지'라는 형태의 데이터로 번역합니다.
    • 이 번역된 메시지를 전송 계층으로 넘겨주는 역할을 합니다.
  • 통신의 전제 조건:
    • 클라이언트(내 컴퓨터의 크롬 등)와 서버(구글의 컴퓨터 등)가 대화를 나누려면,
      두 프로그램이 반드시 '동일한 응용 계층 프로토콜'이라는 같은 언어를 사용해야만 합니다.

📂 3. 용도에 따라 골라 쓰는 5가지 프로토콜

응용 계층에는 목적에 따라 여러 명의 '통역사(프로토콜)'가 대기하고 있습니다.

📌 3-1. 웹의 통역사: HTTP & HTTPS

  • HTTP:
    • 웹 브라우저가 웹 서버로부터 HTML 문서나 이미지 등을 받아올 때 쓰는 가장 대중적인 프로토콜입니다.
  • HTTPS:
    • HTTP에 Secure(보안)가 합쳐진 것입니다.
      데이터를 주고 받을 때 남들이 훔쳐볼 수 없도록 TLS 암호화라는 자물쇠를 채운 버전입니다.

📌 3-2. 인터넷의 전화번호부: DNS(Domain Name System)

  • 존재 이유:
    • 컴퓨터는 숫자로 된 IP 주소(125.209.222.141)만 알지만, 사람은 이름(naver.com)으로 기억합니다.
  • 역할:
    • 우리가 이름을 입력하면 이를 컴퓨터용 숫자로 바꿔주는 '전화번호부' 혹은 '114' 역할을 합니다.
    • 모든 통신은 여기서부터 시작됩니다.

📌 3-3. 파일 전용 화물차: FTP(File Transfer Protocol)

  • 역할:
    • 오직 '파일의 업로드와 다운로드'만을 위해 만들어진 프로토콜입니다.
  • 특징:
    • 웹 페이지를 보는 게 아니라, 순수하게 덩어리진 파일을 주고받을 때 가장 효율적인 화물차 같은 존재입니다.

📌 3-4. 이메일 전담 우체부: SMTP & POP3

  • SMTP(Simple Mail Transfer Protocol):
    • 내가 작성한 이메일을 '보낼 때' 사용하는 발송 전용 우체부입니다.
  • POP3(Post Office Protocol v3):
    • 메일 서버에 도착한 편지를 내 컴퓨터로 '받아올 때' 사용하는 수신 전용 우체부입니다.

💡 비유로 이해하기

  • HTTP/HTTPS: 웹 서핑이라는 대화를 나누는 기본 언어
    (HTTPS는 여기에 비밀번호를 건 것)
  • DNS: 이름만 대면 번호를 알려주는 전화번호부
  • FTP: 무거운 짐(파일)만 전문적으로 옮기는 화물 트럭
  • SMTP/POP3: 편지를 보내고(SMTP) 받는(POP3) 우체국 서비스

📂 4. HTTP의 뿌리: 하이퍼텍스트

  • 개념:
    • 단순히 읽는 텍스트가 아니라, 문서 안에 다른 문서나 정보로 연결되는 링크가 포함된 텍스트를 말합니다.
  • 하이퍼링크:
    • 우리가 클릭하는 그 링크가 바로 하이퍼텍스트를 완성하는 핵심 요소입니다.
      즉, 전 세계의 정보를 거미줄처럼 연결하는 기술이 바로 HTTP의 출발점입니다.

📂 5. HTTP의 독특한 성격: 비연결 지향(Stateless)

HTTP는 '기억상실증'에 걸린 통역사와 같습니다. 방금 한 대화도 기억하지 못하죠.
이게 왜 웹에서 좋을까요?

  • 작동 방식:
    • 서버는 클라이언트가 누구인지, 이전에 무슨 요청을 했는지 전혀 기억하지 않습니다.
    • 왜 이렇게 만들었을까? (효율성):
      • 수많은 사람이 동시에 서버에 접속합니다.
      • 모든 사람과의 대화 내용을 서버가 일일이 기억하려면 메모리가 터져버릴 겁니다.
      • 그래서 "한 번 대답하면 끝!"인 방식을 선택했습니다.
      • 덕분에 서버는 가볍게 유지될 수 있고, 이는 패킷 교환 방식과도 아주 잘 맞아떨어집니다.
  • 치명적인 단점과 해결책:
    • 쇼핑몰에서 로그인을 해도 페이지를 넘길 때마다 "너 누구니?"라고 묻게 됩니다.
    • 이를 해결하기 위해 쿠키, 세션, 토큰이라는 별도의 인증 기술을 추가하여 '기억'을 보완합니다.

📂 6. HTTP 메시지: "이렇게 요청하고 저렇게 답한다"

HTTP는 요청(Request)과 응답(Response)이 항상 한 세트로 움직입니다.

📌 6-1. 클라이언트의 '요청'서 (Request)

  1. 요청줄: POST /submit HTTP/1.1
    • POST: 서버야, 내가 데이터를 보낼 테니 처리해줘! (의도를 나타내는 메서드)
    • /submit: 서버 안의 이 위치(리소스)로 갈게
    • HTTP/1.1: 우리 이 버전의 언어로 대화하자
  2. 헤더: 요청에 대한 부가 정보
    • Host: 내가 요청하는 사이트 주소는 여기야. (서버에게 목적지를 명확히 알림)
    • User-Agent: 내 기기는 아이폰이고, 브라우저는 사파리야. (내 정보를 알림)
    • Content-Type: 내가 지금 보내는 건 'JSON' 형식의 데이터야.
  3. 본문: 실제 전송할 데이터 내용 (POST일 때 주로 사용)

📌 6-2. 서버의 '응답'서 (Response)

  1. 상태줄: HTTP/1.1 200 OK
    • 200 OK: 문제없어! 성공적으로 처리했어. (결과를 알려주는 상태 코드)
  2. 헤더:
    • Content-Type: 내가 주는 데이터는 'HTML 문서'야.
    • Content-Length: 이 데이터의 전체 크기는 1234 바이트야.
  3. 본문: 실제 전달할 데이터 (HTML 코드, 이미지 파일 등)

📂 7. HTTP의 눈부신 진화: 버전별 특징

인터넷이 빨라진 것은 HTTP 버전이 업그레이드되었기 때문입니다.

  • HTTP/1.1 (완성형):
    • 가장 오랫동안 쓰인 표준입니다.
    • 연결을 재사용하는 Keep-Alive 기술 등이 도입되며 완전히 성장했습니다.
  • HTTP/2 (효율성):
    • 데이터를 쪼개어 한꺼번에 여러 개를 보냅니다.
    • 순서대로 기다릴 필요가 없어 매우 빠릅니다.
  • HTTP/3 (혁신):
    • 지금까지 고집했던 TCP를 버리고 UDP를 채택했습니다.
    • 연결 설정을 더 빠르게 줄여서 지연 시간을 극단적으로 단축했습니다.

💡 비유로 이해하기: Stateless vs Keep-alive

  • Stateless (무상태):
    • 기사님이 같은 문 앞에 여러번 배달하러 오지만, 각 상자는 서로 다른 주문(독립된 요청)인 것과 같습니다.
    • 기사님은 앞의 상자와 뒤의 상자가 같은 사람의 주문인지 상관하지 않고 오직 '배달'이라는 각 임무에만 집중합니다.
  • Keep-alive (연결 유지):
    • 택배 기사님이 물건을 내리기 위해 집 앞 대문(통로)을 계속 열어두는 기술적인 상태입니다.

📂 8. DNS(Domain Name System)의 정체

  • 개념:
    • 사람이 읽기 쉬운 도메인 이름을 컴퓨터가 이해하는 IP 주소로 변환해주는 시스템입니다.
  • 필요성:
    • 전 세계의 수많은 사이트 IP를 하나하나 적어둘 수 없기에,
      분산된 서버들이 정보를 나누어 관리하는 거대한 전화번호부 역할을 합니다.

📂 9. DNS의 핵심 철학: "차근차근, 위에서 아래로!"

DNS는 결코 한 번에 정답을 알려주지 않습니다.
마치 '스무고개'를 하듯 위계질서에 따라 단계별로 물어봐야 합니다.

📌 9-1. DNS의 계층 구조 (위계질서)

  1. Root 네임 서버(최상위):
    • 모든 도메인 탐색의 시작점입니다.
    • 전 세계에 몇 대 없으며, ".com"이나 ".kr" 같은 대장급 관리자들의 위치만 알고 있습니다.
  2. TLD(Top Level Domain) 네임 서버:
    • ".com", ".net", ".org" 등 도메인의 꼬리표를 관리하는 서버입니다.
  3. 권한 네임 서버:
    • 실제로 naver.com 같은 최종 주소의 IP를 관리하는 진짜 주인 서버입니다.

📂 10. DNS의 6단계 탐색 여행 (1:1 매칭)

사용자가 주소창에 www.naver.com을 입력했을 때 벌어지는 일입니다.

  1. PC의 질문:
    • "로컬 DNS 서버야, 혹시 naver.com 주소 알아?" (보통 통신사 서버에 먼저 물어봅니다.)
  2. 로컬 DNS의 1차 시도:
    • "나도 모르네. Root 서버님, 혹시 주소 아세요?"
  3. Root의 답변:
    • "난 모르지만, .com 관리자(TLD) 주소는 알아. 거기로 가봐."
      (위에서 아래로 내려가는 첫 번째 단계)
  4. 로컬 DNS의 2차 시도:
    • ".com 관리자님, naver.com 주소 아세요?"
  5. TLD의 답변:
    • "내가 가진 장부에는 없네. 대신 naver.com의 진짜 주인인 권한 네임 서버 주소를 줄게."
      (차근차근 내려가는 두 번째 단계)
  6. 최종 획득:
    • 진짜 주인 서버에 물어봐서 드디어 IP 주소를 받아오고, 이를 브라우저에 전달합니다.

💡 비유로 이해하기: "학교에서 학생 찾기"

DNS는 한 번에 답을 주지 않고 단계적으로 찾아갑니다.

  1. 교문 (Root):
    • "너네 학교에 홍길동이라는 학생 있어?" → "어느 학년인지만 알려줄게. 3학년 건물로 가봐."
  2. 학년 교무실 (TLD):
    • "3학년에 홍길동 있어?" → "어느 반인지만 알려줄게. 7반으로 가봐."
  3. 7반 교실 (권한 서버):
    • "7반에 홍길동 있어?" → "네, 저기 3분단에 앉아있네요! (IP 획득)"

🎁 11. 정리

🔑 요약

  • 응용 계층은 사용자의 요청을 서버가 이해할 수 있는 '메시지'로 번역하는 통역사 역할을 하며,
    목적에 따라 HTTP, DNS, FTP, SMTP, POP3 등 다양한 프로토콜을 사용합니다.

  • HTTPS는 보안이 취약한 HTTP에 TLS 암호화라는 자물쇠를 채워 안전하게 통신하는 버전입니다.

  • HTTP는 이전 대화를 기억하지 않는 비연결 지향(Stateless) 방식을 채택하여
    수많은 요청을 효율적으로 처리하지만, 로그인 유지를 위해서는 쿠키나 세션 같은 별도의 기술이 필요합니다.

  • HTTP 메시지는 요청과 응답이 한 세트로 움직이며,
    헤더를 통해 데이터 형식이나 호스트 정보 같은 부가 정보를 꼼꼼하게 전달합니다.

  • DNS는 사람이 기억하기 쉬운 도메인을 IP 주소로 바꾸기 위해
    Root → TLD → 권한 서버 순으로 위에서 아래로 차근차근 내려가며 정답을 찾는 단계적인 탐색 과정을 거칩니다.

0개의 댓글