[혼공네] 05. 응용 계층

2026. 9. 26. 06:10·네트워크

DNS와 자원

  • 서버와 클라이언트는 ‘메시지를 주고받고자 하는 대상’과 ‘송수신하고자 하는 정보’를 식별
  • 메시지를 주고받고자 하는 대상을 파악
    • IP 주소
    • 도메인 네임
  • 송수신하고자 하는 정보를 식별
    • URL - 위치 기반 식별자
    • URN - 이름 기반의 식별자

 

도메인 네임과 네임 서버

  • 도메인 네임(domain name)
    • 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정
    • 예) www.example.com, developers.naver.com, git.kernel.org와 같은 문자열
  • DNS 서버
    • 도메인 네임을 관리하는 네임 서버
    • 도메인 네임 서버, 전화번호부
      • 정방향: 도메인 이름 → IP 주소 반환
      • 역방향: IP주소 → 도메인 이름
      • 포트: 53번
      • UDP 기본, TCP 가능
      • IP와 도메인 주소를 매핑한다.
  • 개인 전화번호부와 같은 hosts 파일
    • hosts 파일 - 호스트마다 유지하는 ‘개인’ 전화번호부 같은 파일
      • 도메인 네임과 IP 주소의 대응 관계를 담은 파일로, 이를 토대로 도메인 네임에 대응하는 IP 주소를 식별
      • hosts 파일 위치
        • 맥OS나 리눅스 - /etc/hosts
        • 윈도우 - %SystemRoot%\System32\drivers\etc\hosts
      • 127.0.0.1 naver.com 저장
        • etc/host → 도메인 관리 파일
        • 윈도우: c드라이브/windows/system32/drivers/etc/hosts
          • 메모장 관리자로 미리 열어두고 파일 열기
        • 해당 도메인을 해당 IP로 지정한다.
        • ping naver.com을 입력하면 127.0.0.1으로 향하도록 바뀐다.
    • 네임 서버는 공용 전화번호부

 

도메인 네임과 DNS

  • 도메인 네임은 점(.)을 기준으로 계층적으로 분류
    • 최상단에 루트 도메인(Root Domain)
    • 최상위 도메인 TLD(Top-Level Domain)
    • 2단계 도메인(Second-Level Domain)
    • 3단계 도메인
    • 전체 주소 도메인 네임 FQDN(Fully-Qualified Domain Name)
    • 호스트 네임(Host Name) - FQDN의 첫 번째 부분(www)
  • 도메인 네임 시스템( DNS, Domain Name System)
    • 분산된 도메인 네임(Domain Name)에 대한 관리 체계(System)
    • 계층적 구조, 타고 내려간다.
  • 도메인 구매
    • https://www.cloudflare.com/domains/
    • Route53, 가비아도 가능
  • 도메인 구매 후 도메인에 대한 정보를 저장해야 함.
  • 서브 도메인이란?
    • 서브 도메인(subdomain)은 다른 도메인이 포함된 도메인을 의미
      • google.com의 서브 도메인 - 모두 google.com을 포함
        • mail.google.com
        • www.google.com
        • scholar.google.com
        • drive.google.com
      • 마찬가지로 google.com은 com을 포함하고 있기에 com의 서브 도메인
  • example.com을 주소창에 입력
    • → 클라이언트의 호스트 파일( /etc/host) 확인 (자체 DNS를 찾는 것) → 없음 → 밖으로 나간다.
    • ISP 업체가 도메인을 매핑해놓는다.(DNS 서버) → 있다면 바로 주고, 없다면?
    • Root nameserver “.” : 얘한테 가서 묻는다. “.com”으로 된 도메인 네임서버 알아? → 알려준다.
    • TLD nameserver: “.com”한테 가서 “example.com”이 어디있는지 묻는다.
    • Authoritative nameserver: “www.example.com”을 묻는다.
    • Recursive resolver에서 조합해서 클라이언트에게 알려준다.
    • 클라이언트가 DNS 서버에서 보내는 질의가 재귀적 질의다. 너가 알아서 찾아와.
    • DNS 서버는 반복적 질의를 한다. 물어본 것만 알려준다.
    • 모든 사람이 루트에게 물어보면 루트가 힘들다 → ISP가 캐싱하고 있다. → 모든 요청이 루트까지 잘 가지 않는다. 또 컴퓨터, 브라우저에서도 캐싱을 해서 빠르게 인터넷에 접속이 가능하다.
    • example.com을 한번 갔다오면 캐싱한다. 그러나 캐싱은 무한하지 않다.
      • IP가 변경될 수 있다.
      • 메모리 자원을 위해서이다.
      • TTL 보통 300초이다. 설정가능하고 기본값이 300초이다.
    • google.com 입력 시 다양한 IP 주소가 있고 그 중에 가까운 곳으로 간다. (애니캐스트)
    • nslookup dns.google.com → 8.8.8.8 → 구글의 dns 서버였다.

 

계층적 네임 서버

  • IP 주소를 모르는 상태에서 도메인 네임에 대응되는 IP 주소를 알아내는 과정
    • ‘도메인 네임을 풀이 resolve한다’라고 표현하며,
      영어로는 ‘리졸빙(resolve+ing)한다’고 표현
  • 네임 서버의 유형
    • 로컬 네임 서버
    • 루트 네임 서버
    • TLD(최상위 도메인) 네임 서버
    • 책임 네임 서버
  • 로컬 네임 서버(local name server)
    • 클라이언트와 맞닿아 있는 네임 서버
    • 클라이언트가 도메인 네임을 통해 IP 주소를 알아내고자 할 때 가장 먼저 찾게 되는 네임 서버
    • 로컬 네임 서버의 주소는 일반적으로 ISP에서 할당
    • 공개 DNS 서버 public DNS Server를 이용할 수도 있음
  • 루트 네임 서버(root name server)
    • 루트 도메인을 관장하는 네임 서버
    • 로컬 네임 서버가 대응되는 IP 주소를 몰라 루트 네임 서버에게 해당 도메인 네임을 질의할 때 TLD 네임 서버의 IP 주소를 반환
  • TLD 네임 서버
    • TLD를 관리하는 네임 서버
    • TLD 네임 서버는 다음 그림과 같이 질의에 대해 TLD의 하위 도메인 네임을 관리하는 네임 서버 주소를 반환
    • 하위 도메인 네임을 관리하는 네임 서버는 그보다 하위 도메인 네임을 관리하는 네임 서버 주소를 반환
  • 책임 네임 서버(authoritative name server)
    • 특정 도메인 영역(zone)을 관리하는 네임 서버
    • 자신이 관리하는 도메인 영역의 질의에 대해서는 다른 네임 서버에게 떠넘기지 않고 곧바로 답할 수 있는 네임 서버
    • 즉, 책임 네임 서버는 로컬 네임 서버가 마지막으로 질의하는 네임 서버
    • 일반적으로 로컬 네임 서버는 책임 네임 서버로부터 원하는 IP 주소를 얻어냄

 

도메인 네임 리졸빙 과정의 문제점과 DNS 캐시

  • 앞의 그림처럼 도메인 네임을 리졸빙하기 위해 8개의 단계를 거치게 됨
    • 시간이 오래 걸리고 네트워크상의 메시지 수가 지나치게 늘어날 수 있음
    • 만약 전 세계 모든 호스트가 도메인 네임 리졸빙을 위해 루트 네임 서버에 도메인 네임을 한꺼번에 질의한다면 루트 네임 서버에 과부하가 생길 것임
  • DNS 캐시(DNS cache)
    • 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 이를 활용
    • DNS 캐시를 저장하는 용도로만 사용되는 서버도 있음
    • DNS 캐싱은 이전에 조회한 DNS 쿼리 결과를 저장해두고 재사용하여 네트워크 트래픽을 줄이고 응답 속도를 빠르게 하는 기술
    • DNS 캐시를 활용하면 더 짧은 시간 안에 원하는 IP 주소를 얻어낼 수 있음
    • DNS 캐시는 영원히 남아있는 것은 아님
      → 무한히 DNS 캐싱을 하지 않는 이유: IP 주소가 변경될 수도 있고, 메모리 문제가 있을 수 있기 때문
      • 임시 저장된 값은 TTL(Time To Live 캐시될 수 있는 시간) 값과 함께 저장
  • traceroute 1.1.1.1, tracert 1.1.1.1
    • 동작하는 방식
    • 최종적인 서버까지 가는데 거쳐가는 라우터들의 IP주소가 나온다.
    • 라우터에 대한 정보가 없다.
    • ICMP ping은 라우터들에 대한 대답을 꺼둔다. 보안적인 이유로. + 방화벽
      • 우회하는 방식으로 동작해서 대답을 받는다.
    • 3계층의 TTL - 홉
    • 4계층의 TTL - 캐싱이 날아가는 시간
    • src = 2.2.2.2
    • dst = 8.8.8.8
    • ttl = 1
      • ttl → 0, 답이 와서 첫번째 라우터 주소를 알게 된다.
    • ttl → 2
      • ttl → 2, 두번째 라우터 주소를 알게 된다.
    • 8.8.8.8에 도착할 때까지 숫자를 늘려가며 시도한다.

 

자원을 식별하는 URI

  • 자원(resource) - 네트워크상의 메시지를 통해 주고받는 대상을 의미
    • 두 호스트가 네트워크를 통해 서로 정보를 주고받을 때, 송수신하는 대상
      • HTML 파일
      • 이미지나 동영상 파일
      • 텍스트 파일 등
  • 자원은 ‘HTTP 요청 메시지의 대상’
    • 거의 대부분 HTTP 통신을 한다.
  • 자원을 식별할 수 있는 정보 URI(Uniform Resource Identifier)
    • 자원을 식별하는 통일된 방식
    • URL(Uniform Resource Locator)
      • 위치를 이용해 자원을 식별
    • URN(Uniform Resource Name)
      • 이름을 이용해 자원을 식별
  • URL
    • URL은 오늘날 인터넷 환경에서 자원 식별에 더 많이 사용되는 식별자
    • 대부분 이것을 쓴다.
    • URL의 구조
      1. scheme
      2. authority
      3. path
      4. query
      5. fragment
    • scheme
      • URL의 첫 부분은 scheme은 ‘자원에 접근하는 방법’을 의미
      • 일반적으로 사용할 프로토콜이 명시
        • HTTP를 사용하여 자원에 접근할 때는 http://를
        • HTTPS를 사용하여 자원에 접근할 때는 https://를 사용
    • authority
      • authority에는 ‘호스트를 특정할 수 있는 정보’, 이를테면 IP 주소 혹은 도메인 네임이 명시
      • 콜론(:) 뒤에 포트 번호를 덧붙일 수도 있음
    • path
      • path에는 ‘자원이 위치한 경로’가 명시
      • 자원의 위치는 슬래시(/)를 기준으로 계층적으로 표현되고, 최상위 경로 또한 슬래시로 표현
      • 트리구조
        • 루트 - 최상단 “/”
    • query, 쿼리 스트링
      • 쿼리 문자열(query string) 또는 쿼리 파라미터(query parameter)
      • ? 뒤에서 시작되는 값
      • 쿼리 문자열은 물음표(?)로 시작되는 <키=값> 형태의 데이터로, 앰퍼샌드(&)를 사용하여 여러 쿼리 문자열을 연결
      • url 주소에 데이터를 넣어서 보내는 것 (key=value 형식)
      • HTTP는 요청-응답 기반의 프로토콜
        • 클라이언트는 서버에게 URI(URL)가 포함된 HTTP 요청 메시지를 보내고,
        • HTTP 서버는 이에 대해 HTTP 응답 메시지를 보냄
      • [참고] 쿼리 문자열을 활용한 URL 설계
        • 부동산 검색 웹 사이트 / 도서 판매 웹 사이트
      • url로 생각보다 많은 정보를 알 수 있다.
      • site:co.kr inurl:"index of /" 는 국내(.co.kr) 도메인 중 웹 서버의 디렉토리 목록(Directory Listing)이 노출된 취약한 페이지를 찾는 구글 해킹(Google Dorking) 검색식입니다.
    • fragment
      • fragment는 ‘자원의 한 조각을 가리키기 위한 정보’
        • HTML 파일과 같은 자원에서 특정 부분을 가리키기 위해 사용
      • 아래의 URL은 위의 HTML 파일 자원 내의 특정 부분을 나타냄
        • 위키 페이지 같은 도큐멘테이션 형식 페이지에서 사용된다. 좌/우측 메뉴 클릭 시 #뒤가 생기거나 변경되며 이동한다.
  • URN
    • 보기가 어렵고 크게 중요하지 않다.
    • URL의 문제를 해결한다. URL은 자원의 위치가 변경되면 404 Not Found가 된다.
    • 자원의 고유의 이름을 붙여서 위치와 무관하게 식별한다.
    • 그냥 텍스트 정보이다. 인터넷에 검색하는 정보가 아니다. 그 자체로 식별자인다.
    • ISBN → 텍스트 자체가 정보이다.
    • URL의 단점
      • 위치를 기반으로 자원을 식별하는데 자원의 위치는 언제든 변할 수 있음
      • 즉, 자원의 위치가 변경되면 기존 URL로는 자원을 식별할 수 없음
    • URN의 장점
      • 자원에 고유한 이름을 붙이는 이름 기반 식별자이기에 자원의 위치와 무관하게 자원을 식별
    • URN은 아직 URL만큼 널리 채택된 방식은 아님
    • [예시]
      • ISBN이 0451450523인 도서를 나타내는 URN

 

DNS 레코드

  • CNAME
    • example.com
    • www.example.com 별칭(www)을 사용한다.
    • 똑같은 것을 가리키게 된다.
  • A 레코드
    • 특정 호스트에 대한 도메인 네임과 IP주소를 대응하는 것
    • 도메인 네임이 해당 IP주소에 대응된다는 사실을 네임 서버에 알리기 위해 도메인 레코드를 추가해야 한다.
    • example.com 질의 → 1.2.3.4를 응답받는다.
    • 구매한 도메인 주소를 1.2.3.4로 대응해줘.

 

HTTP

  • HTTP의 중요한 네 가지 특성
    1. 요청과 응답을 기반으로 동작
    2. 미디어 독립적
    3. 상태를 유지하지 않음
    4. 지속 연결을 지원

 

HTTP의 특성

  • 요청-응답 기반 프로토콜
    • HTTP는 ‘클라이언트-서버 구조 기반의 요청-응답 프로토콜’
      • 같은 HTTP 메시지일지라도 HTTP 요청 메시지와 HTTP 응답 메시지는 메시지 형태가 다름
      • 웹 브라우저의 개발자 도구를 열어 [Network] 탭을 클릭한 후, 특정 웹 사이트에 접속하여 확인
      • 클라이언트 → 서버 (Http Request)
      • 클라이언트 ← 서버 (Http Response)
      • 앞의 접속 화면에서 임의의 자원을 클릭 - 예)example.com
      • HTTP 요청 메시지 헤더(Request Headers)와 HTTP 응답 메시지 헤더(Response Headers) 확인
  • 미디어 독립적 프로토콜
    • HTTP를 정의한 공식 문서(RFC 9110)
      • 자원 - HTTP가 요청하는 대상 → 어떤 자원?
      • HTTP는 자원의 특성을 제한하지 않으며, 단지 자원과 상호 작용하는 데 사용할 수 있는 인터페이스를 정의
      • 대부분의 자원은 URI로 식별
      • HTTP를 통해 다양한 자원을 주고 받는다.
    • 미디어 타입(media type)
      • HTTP에서 메시지로 주고받는 자원의 종류
        • MIME 타입(Multipurpose Internet Mail Extensions Type)이라고도 함
        • HTTP는 주고받을 미디어 타입에 특별히 제한을 두지 않고 독립적으로 동작이 가능한 미디어 독립적인 프로토콜
        • 미디어가 독립적이다.
        • 종류를 제한 X, 무엇이든 보낼 수 있지만 지금 보내는 것의 타입이 뭔지 알려줘야 처리한다.
    • 미디어 타입의 구성과 종류
      • 슬래시를 기준으로 하는 ‘타입/서브타입(type/subtype)’ 형식으로 구성
        • 타입(type) - 데이터의 유형
        • 서브타입(subtype) - 주어진 타입에 대한 세부 유형
      • 미디어 타입의 종류는 매우 다양하며, 필요에 따라 새로운 미디어 타입을 등록할 수도 있음
        • 따라서 모든 미디어 타입을 암기할 필요는 없고, 필요할 때마다 찾아보는 것이 일반적
      • 미디어 타입에는 부가적인 설명을 위해 선택적으로 매개변수가 포함매개변수
        • ‘타입/서브타입;매개변수=값’의 형식으로 표현

 

스테이트리스 프로토콜

  • HTTP는 상태를 유지하지 않는 스테이트리스(stateless) 프로토콜
    • 서버가 HTTP 요청을 보낸 클라이언트와 관련된 상태를 기억하지 않는다는 의미
    • 클라이언트의 모든 HTTP 요청은 기본적으로 독립적인 요청으로 간주
  • 상태를 유지하지 않는 특성의 장점
    • HTTP 서버는 일반적으로 많은 클라이언트와 동시에 상호 작용
      • 동시에 처리해야 할 요청 메시지의 수는 수천 개가 될 수도 있고, 많게는 수백만 개
      • 모든 클라이언트의 상태 정보를 유지하는 것은 서버에 큰 부담
      • 상태를 기억하지 않으므로 기본적으로 독립적으로 작동
    • 서버는 하나가 아니라 여러 대로 구성될 경우
      • 모든 서버가 모든 클라이언트의 상태를 유지할 경우 클라이언트는 여러 서버를 동시에 이용하기가 어려워짐 → 상태를 공유한다면 하나의 서버에 물려있게 된다.
      • 서버가 모든 클라이언트의 상태 정보를 공유하는 작업은 매우 번거롭고 복잡
  • 특정 클라이언트가 특정 서버에 종속되는 상황 방지
    • HTTP가 상태를 유지하는 프로토콜이었다면 클라이언트는 자신의 상태를 기억하는 특정 서버하고만 상호 작용할 수 있게 되어, 특정 클라이언트가 특정 서버에 종속될 수 있음
      • 이러한 상황에서 어느 한 서버에 문제가 발생하면 해당 서버에 종속된 클라이언트는 직전까지의 HTTP 통신 내역을 잃어버리는 상황이 발생
  • 확장성(scalability)과 견고성(robustness)
    • HTTP가 처음 만들어졌을 때부터 오늘날까지 이어지는 중요한 설계 목표
    • 상태를 기억하지 않으니까 서버를 언제든지 추가해서 확장성이 높다.
    • 서버 하나에 문제가 생겨도 다른 서버로 언제들지 대체될 수 있어 견고성이 높다.
  • 그렇다고 해서 아예 클라이언트를 모르는 것은 아니다. 서버가 매번 처음보는 것처럼 대하지는 않는다는 것이다.
    • 만약에 그렇다면 매번 로그인이 풀린다. → 쿠키 정보를 사용한다.
    • 쿠키는 스테이트 리스 상태에서 정보를 기억할 수 있게 해주는 방법이다.
    • https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm?hl=ko&utm_source=ext_sidebar

 

지속 연결 프로토콜

  • 비지속 연결
    • 기본적으로 TCP 위에서 동작한다.
    • 초기의 HTTP 버전(HTTP 1.0 이하)은 쓰리 웨이 핸드셰이크를 통해 TCP 연결을 수립한 후, 요청에 대한 응답을 받으면 연결을 종료하는 방식으로 동작
    • 추가적인 요청-응답을 하기 위해서는 다시 TCP 연결을 수립이라고 합니다
    • 과거에 쓰던 것
  • 지속 연결(persistent connection) 또는 킵 얼라이브(keep-alive)
    • 최근 대중적으로 사용되는 HTTP 버전(HTTP 1.1 이상)
    • 하나의 TCP 연결상에서 여러 개의 요청-응답을 주고받을 수 있는 기술
    • 매번 쓰리웨이 핸드셰이크를 하면 자원 낭비가 발생한다.

 

HTTP 메서드

  • 각각의 메서드는 서버에게 어떤 식으로 말을 걸지 형식적으로 정해놓은 것이다.
  • GET - 가져다주세요
    • 특정 자원을 조회할 때 사용되는 메서드
      • 클라이언트가 서버에게 ‘이것(자원)을 가져다주세요’라고 요청을 보내는 것과 같음
      • 자원은 HTML,, JSON, 이미지 파일이나 일반 텍스트 파일 등
    ① 요청 메시지
    • 예) http://www.example.com/example-page에 대한 간략화된 GET 요청 메시지
    ② 응답 메시지
    • GET 요청 메시지가 성공적으로 처리되었다면 이에 대한 응답으로서 요청한 자원을 전달받음
    ③ 요청 메시지
    • GET 요청 메시지에서는 메시지 본문보다 쿼리 문자열이 사용되는 경우가 많음
    • HEAD - GET이랑 동일한데 헤더만 가져다주세요.
  • POST – 처리해 주세요
    • 서버로 하여금 특정 작업을 처리하도록 요청하는 메서드
      • 예) http://example.com/posting에 접속했을 때의 화면이 다음과 같고, 어떤 클라이언트가 입력 폼에
      • 글을 입력한 뒤, [게시하기] 버튼을 눌렀다고 가정
      • 로그인 등 범용성이 높다.
      • 서버에 새로운 자원을 생성할 때
      • POST 메서드가 사용
        • 처리할 대상은 흔히 메시지 본문으로 명시
    • POST 메서드는 많은 경우 ‘클라이언트가 서버에 새로운 자원을 생성하고자 할 때’ 사용
      • 성공적으로 POST 요청이 처리되어 새로운 자원이 생성되면 서버는 응답 메시지의 Location 헤더를 통해
      • 새로 생성된 자원의 위치를 클라이언트에게 알려 줌
      • 다음 응답 메시지의 붉은색 글자 부분 - 새로 생성된 자원은 /posting/1에서 확인할 수 있다는 의미
  • PUT – 덮어써 주세요
    • 요청 자원이 없다면 메시지 본문으로 자원을 새롭게 생성하거나, 이미 자원이 존재한다면
      • 예) 그림에서처럼 example.com/posts/1에 우측 상단과 같은 자원이 있다고 가정(회색 테두리 박스)
        • 이에 대해 좌측 하단과 같이 PUT 요청 메시지(붉은색테두리 박스)를 보낼 경우
      • PUT 요청은 마치 덮어쓰기와 같으므로 example.com/posts/1의 자원은 다음과 같이 갱신
    • 메시지 본문으로 자원을 완전히 대체하는 메서드
  • PATCH - 일부 수정해 주세요
    • PUT 메서드가 덮어쓰기, 완전한 대체에 가깝다면 PATCH 메서드는 부분적 수정
      • (아래 화면) 앞 예제에서의 요청 메서드를 PATCH 메서드로 바꿔 보낸 결과
      • PUT 메서드로 요청을 보냈을 경우 메시지 본문으로 덮어써졌지만, PATCH 메서드로 요청을 보낼 경우 메시지 본문에 맞게자원이 일부 수정
  • DELETE – 삭제해 주세요
    • 특정 자원을 삭제하고 싶을 때 사용하는 메서드
      • 예) example.com/texts/a.txt라는 자원을 삭제하도록 요청하는 메시지
  • 서버 개발자 입장의 메서드 설계
    • 어떤 URI(URL)에 어떤 메서드로 요청을 받았을 때 서버가 어떻게 행동해야 하는지 설계하는 것은
      • 어떤 메서드는 구현할 수도 있고, 어떤 메서드는 구현하지 않을 수도 있음
      • 같은 URL에 대한 요청일지라도 사용된 메서드가 다르면 각기 다른 요청으로 간주하기 때문에,
      • 때로는 같은 URL에 대해 메서드별 동작을 여러 개 구현할 수도 있음
    • 오로지 개발자의 몫
  • API 문서(1)
    • 데이터를 가져갈 수 있는 경로와 메서드 등에 대해 정리해놓은 문서
    • 공공데이터 포털 - https://www.data.go.kr/index.do
    • 예) 유튜브와 관련된 API
      • 어떤 URL에 어떤 메서드를 보낼 수 있는지,
      • 어떤 쿼리 문자열(매개변수)이 사용될 수 있는지,
      • 올바르게 요청을 보냈을 경우 어떤 응답 메시지를 받을 수 있는 지,
      • 그리고 올바르지 않은 요청을 보냈을 경우 어떤 오류 메시지를 받을 수 있는지가 명시
  • API 문서(2)
    • 예) 네이버의 뉴스 검색 결과를 확인할 수 있는 API
      • 어떤 URL에 어떤 메서드를 보낼 수 있는지,
      • 어떤 쿼리 문자열(매개변수)이 사용될 수 있는지,
      • 어떤 응답 메시지를 받을 수 있는지가 명시

 

HTTP 상태 코드

  • 상태 코드는 요청에 대한 결과를 나타내는 세 자리 정수
    • 웹서버에 대한 헬스 체크 시에 확인한다. 요청에 대한 응답에 있는 코드를 기반으로 한다.
    • 상태 코드의 종류는 200, 201, 304, 404, 505 등 다양한데, 백의 자리 수를 기준으로 유형을 구분
  • 200번대: 성공 상태 코드
    • 200번대 상태 코드는 ‘요청이 성공했음’을 의미
      • 주로 사용되는 상태 코드는 200(OK), 201(Created), 202(Accepted), 204(No Content)
    • 예) 클라이언트가 “http://example.com/images/a.png”로 GET 요청을 보냈다고 가정
      • 서버가 이 요청을 성공적으로 받아들이고 처리한 경우, 서버는 요청한 자원과 함께 상태 코드
      • 200(OK)을 포함하여 응답
  • 300번대: 리다이렉션 상태 코드
    • 리다이렉션(redirection)
      • ‘요청을 완수하기 위해 추가적인 조치가 필요한 상태(인터넷 공식 문서 RFC 9110)’
      • 문제가 생기거나 뭔가 이동했나보다.
      • 클라이언트가 요청한 URL의 자원이 다른 곳에 있을 때, 클라이언트의 요청을 다른 곳으로 이동시키는 것을 의미
    • 영구적인 리다이렉션(permanent redirection)
      • 자원이 완전히 새로운 곳으로 이동하여 경로가 영구적으로 재지정
        • 이 경우 기존의 URL에 요청 메시지를 보내면 항상 새로운 URL로 리다이렉트
    • curl -I http://google.com → “301 Moved Permanently” 이 나온다.
      • http에 대한 요청 자체를 안하므로, https로 리다이렉트해준다.
      • https://google.com → 301
      • curl은 개인 서버를 만들고 잘 동작하는지 확인을 위해 사용한다.
      • curl -I https://example.com → 응답에 200이 나오고 페이지 소스가 제공된다.
  • 400번대: 클라이언트 에러 상태 코드
    • ‘클라이언트에 의한 에러가 있음’을 알려 주는 상태 코드
    • 404
    • 401, 403 → 인증/인가와 관련된 상태 코드
    • 401 → 자신이 누구인지를 증명하는 것. 인증
    • 403 → 권한 부여. 인증된 주체에게 권한을 주는 것. 인가.
    • 상태 코드 401(Unauthorized)
      • 웹상에서 정보를 검색할 때 모든 자원에 접근이 가능한 것은 아니며 때로는
      • 특정 자원에 접근하기 위해 인증이 필요
      • 요청에 대한 인증이 필요할 경우 서버는 401(Unauthorized) 상태 코드를 응답
    • 상태 코드 403(Forbidden)
      • 클라이언트의 권한이 충분하지 않다면 상태 코드 403(Forbidden)을 응답
        • 인증(Authentication) 여부와 권한 부여(Authorization) 여부는 다른 개념
          • 인증 - ‘자신이 누구인지 증명하는 것’
          • 권한 부여 또는 인가 - ‘인증된 주체에게 작업을 허용하는 것’
    • 상태 코드 404(Not Found)
      • 접근하고자 하는 자원이 존재하지 않음을 알리는 상태 코드
      • 존재하더라도 공개하지 않는 자원에 대해 404(Not Found)를 응답하는 경우도 있음
    • 500번대: 서버 에러 상태 코드
      • 500번대는 클라이언트가 올바르게 요청을 보냈을지라도 발생할 수 있는 서버 에러에 대한 상태 코드
      • 개발 시 500번대 에러는 최대한 발생하면 안된다.
      • 상태 코드 500(Internal Server Error)
        • ‘서버의 예기치 못한 상황으로 인해 요청을 처리할 수 없음’
        • 상태 코드 500(Internal Server Error)은 서버 내 에러를 통칭
      • 상태 코드 502(Bad Gateway)
        • 클라이언트와 서버 사이에 위치한 중간 서버의 통신 오류를 나타내는 상태 코드
        • 프록시 등의 문제
      • 상태 코드 503(Service Unavailable)
        • ‘현재 서비스를 일시적으로 이용할 수 없음’
        • 서버가 과부하 상태에 있거나 일시적인 점검 상태일 때 볼 수 있는 상태

'네트워크' 카테고리의 다른 글

[혼공네] 04. 전송 계층  (0) 2026.09.26
[혼공네] 03-2. IP 주소  (0) 2026.09.26
[혼공네] 03-1. LAN을 넘어서는 네트워크 계층  (0) 2026.09.26
[혼공네] 02-4. 스위치(Switch)  (0) 2026.09.21
[혼공네] 02-1. 이더넷(Ethernet)  (0) 2026.09.21
'네트워크' 카테고리의 다른 글
  • [혼공네] 04. 전송 계층
  • [혼공네] 03-2. IP 주소
  • [혼공네] 03-1. LAN을 넘어서는 네트워크 계층
  • [혼공네] 02-4. 스위치(Switch)
youjeong_choi
youjeong_choi
  • youjeong_choi
    youjeong
    youjeong_choi
  • 전체
    오늘
    어제
    • 분류 전체보기 (120) N
      • HTML, CSS (7)
      • JavaScript (19)
        • 모던 자바스크립트 딥다이브 (4)
      • ReactJS (17)
      • TIL (17)
      • WIL (17)
      • 알고리즘 (17)
      • 네트워크 (13) N
      • Vue (4)
      • 재료 과학 (2)
      • 정보보안 (3) N
      • 리눅스 (3) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바스크립트
    항해99 주특기
    혼공스
    네트워크
    토스뱅크사이버보안엔지니어부트캠프
    항해99주특기
    알고리즘 문제
    파이썬
    항해99주특기리액트
    부트캠프
    정보보안
    항해99
    멀티캠퍼스부트캠프
    리눅스기초
    항해99리액트
    알고리즘
    모던자바스크립트딥다이브
    선언적 함수
    익명 함수
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
youjeong_choi
[혼공네] 05. 응용 계층
상단으로

티스토리툴바