2025-11-25
오늘 배운 것
05-1 DNS와 자원
도메인 네임과 네임 서버
- 도메인 네임 : 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보
- IP 주소에 비해 기억하기 쉬움
- 네임서버 : 도메인 네임과 IP 주소를 관리
- DNS 서버 : 도메인 네임을 관리하는 네임 서버
- 도메인 네임을 통해 IP 주소를 알아낼 수 있음
- IP 주소가 바뀌더라도 바뀐 IP 주소에 도메인 네임을 다시 대응하면 되므로 간편함
- DNS 서버 : 도메인 네임을 관리하는 네임 서버
- 전체 주소 도메인 네임(FQDN : Fully-Qualified Domain Name) 구성
- 루트 도메인 → .
- 도메인 네임의 마지막에 점이 찍힌 형태로 표기
- 일반적으로 루트 도메인을 생략해서 표기
- 최상위 도메인(TLD)
- 도메인 네임의 마지막 부분
- 예: com, net, org, kr
- 2단계 도메인
- www.example.com에서 example
- 3단계 도메인
- www.example.com에서 www
- 루트 도메인 → .
- 서브 도메인
- 다른 도메인이 포함된 서브 도메인
- mail.google.com → google.com의 서브도메인
- google.com → com의 서브 도메인
계층적 네임 서버
- 리졸빙
- IP 주소를 모르는 상태에서 도메인 네임에 대응되는 IP 주소를 알아내는 과정
- 로컬 네임 서버
- 클라이언트와 맞닿아 있는 네임 서버
- 클라이언트가 도메인 네임을 통해 IP 주소를 알아내고자 할 때 가장 먼저 찾게 되는 네임서버
- 로컬 네임 서버의 주소는 일반적으로 ISP에서 할당
- 공개 DNS 서버를 이용해서 할당 할 수 도 있음
- 예 : 구글의 8.8.8.8, 8.8.4.4, 클라우드 플레어의 1.1.1.1
- 공개 DNS 서버를 이용해서 할당 할 수 도 있음
- 루트 네임 서버
- 루트 도메인을 관장하는 네임 서버로, 질의에 대해 TLD 네임 서버의 IP 주소를 반환
- 로컬 네임 서버가 대응되는 IP 주소를 모를때 질의 하는 서버
- TLD 네임 서버
- TLD를 관리하는 네임 서버
- TLD의 하위 도메인 네임을 관리하는 네임 서버 주소 반환
- 책임 네임 서버
- 특정 도메인 영역을 관리하는 네임 서버로, 자신이 관리하는 도메인 영역의 질의에 대해서는 다른 네임서버에게 떠넘기지 않고 곧바로 답할 수 있는 네임 서버
- 로컬 네임 서버가 마지막으로 질의하는 네임 서버
- 재귀적 질의
- 클라이언트가 로컬 네임 서버에게 도메인 네임 질의
- 로컬 네임서버가 루트 네임서버에게 질의
- 루트 네임서버가 TLD 네임 서버에게 질의
- TLD 서버가 다음 단계에 질의하는 과정을 반복
- 최종 응답 결과를 역순으로 전달 받음
- 반복적 질의
- 클라이언트가 로컬 네임서버에게 도메인 네임 질의
- 로컬 네임서버가 루트 네임 서버에게 질의해 다음으로 질의할 네임서버 주소를 응답받음
- 그다음 로컬 네임서버가 해당 TLD 네임 서버에게 질의해서 다음으로 질의할 네임 서버의 주소를 응답 받는 과정을 반복
- 최종응답 결과를 클라이언트에게 알려줌
- DNS 캐시
- 리졸빙 과정은 시간이 오래걸리고 네트워크상의 메시지 수가 지나치게 늘어날 수 있음
- 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 이를 활용하기 위해 사용하는 캐시
- TTL이라는 값과 함께 저장되어 이게 만료되면 해당 정보 삭제
자원을 식별하는 URI
- 자원 : 네트워크 상의 메시지를 통해 주고받는 대상
- HTML, 이미지, 동영상, 텍스트 파일 등등
- URI(Uniform Resource Identifier) : 자원을 식별할 수 있는 정보
- URL(Uniform Resource Locator) : 위치를 이용해 자원을 식별
- URN(Uniform Resource Name) : 이름을 이용해 자원을 식별
URL

- scheme
- 자원에 접근하는 방법
- 일반적으로 사용할 프로토콜 명시
- http, https
- authority
- 호스트를 특정할 수 있는 정보
- IP주소, 도메인네임
- 콜론 뒤에 포트 번호를 덧붙일 수도 있음
- path
- 자원이 위치한 경로
- /(최상위 경로) 를 기준으로 계층적으로 자원의 위치를 표현
- query
- 물음표로 시작되는 <키=값> 형태의 데이터
- 앰퍼샌드를 사용하여 여러 쿼리 문자열을 연결하요 표현
- fragment
- 자원의 한 조각을 가리키기 위한 정보
- 흔히 HTML 파일과 같은 자원에서 특정 부분을 가리키기 위해 사용
05-2 HTTP
HTTP의 특성
- HTTP(Hypertext Transfer Protocol) : 응용계층에서 정보를 주고받는데 사용되는 프로토콜
요청-응답 기반 프로토콜
- HTTP 는 클라이언트-서버 구조 기반의 요청-응답 프로토콜
미디어 독립적 프로토콜
- HTTP는 주고받을 수 있는 자원의 특성을 제한하지 않고 그저 자원을 주고받을 수단의 역할만을 수행
- 미디어 타입 : HTTP 에서 메시지로 주고받는 자원의 종류
- MIME타입(Multipurpose Internet Mail Extension Type)이라고도 불림
- 타입/서브타입 형식으로 구성
- 타입 : 데이터의 유형
- 서브타입 : 주어진 타입에 대한 세부 유형
- text/html, text/plain, image/png
- 부가적인 설명을 위해 선택적으로 매개변수가 포함될 수 있음
- 타입/서브타입;매개변수=값
스테이트리스 프로토콜
- HTTP는 상태를 유지하지 않는 스테이트리스 프로토콜
- 클라이언트의 모든 HTTP 요청은 기본적으로 독립적인 요청으로 간주
- 장점
- 특정 서버에 종속되지 않아 장애 시에도 통신·서비스 영향 최소화
- 상태를 저장하지 않기 때문에 서버 간 상태 공유가 필요 없어 구조가 단순하고 관리가 쉬움
- 서버를 추가하거나 교체하기 수월해 확장성과 대응력이 높음
- 상태 저장 부담이 없어서 많은 동시 요청을 처리할 때 서버 부하가 줄어듦
지속 연결 프로토콜
- HTTP 1.0 이하는 비지속 연결
- HTTP 는 TCP상에서 동작
- HTTP는 비연결형 프로토콜, TCP는 연결형 프로토콜
- 쓰리 웨이 핸드셰이크를 통해 TCP 연결 수립 후 요청 응답 받으면 연결 종료
- 추가 요청-응답을 위해서는 다시 TCP 연결 수립해야함
- HTTP 1.1 이상은 지속 연결(킵 얼라이브)
- 매번 새롭게 연결 수립하고 종료하지 않아도 됨
HTTP 메시지 구조
- 시작 라인, 필드 라인, 메시지 본문으로 이루어져 있음
- 필드라인은 0개 이상
- 메시지 본문은 없을 수 있음
- 필드라인과 메시지 본문 사이에는 빈 줄바꿈 존재
- 시작 라인
- 요청 메시지 일때는 요청 라인, 응답 메시지 일때는 상태 라인
- 요청 라인
- 메서드 (공백) 요청 대상 (공백) HTTP 버전 (줄바꿈)
- 메서드 : 클라이언트가 서버의 자원에 대해 수행할 작업의 종류
- GET, POST, PUT DELETE 등
- 요청 대상
- HTTP 요청을 보낼 서버의 자원
- /hello?q=world, /
- HTTP 버전
- HTTP/1.1
- 상태 라인
- HTTP 버전 (공백) 상태코드 (공백) 이유구문* (줄바꿈)
-
- 선택적
-
- 상태코드
- 요청에 대한 결과를 나타내는 세 자리 정수
- 이유 구문
- 상태 코드에 대한 문자열 형태의 설명
- HTTP 버전 (공백) 상태코드 (공백) 이유구문* (줄바꿈)
- 필드 라인(헤더 라인이라고도 불림)
- 0개 이상의 HTTP 헤더가 명시
- 사실 일반적으로는 다양한 헤더들이 사용됨
- 헤더이름: 헤더 값 → 으로 구성
- Host: www.example.com
- 0개 이상의 HTTP 헤더가 명시
- 메시지 본문
- HTTP 요청 혹은 응답 메시지에서 본문이 필요할 경우 명시
- 없을 수도 있고 다양한 콘텐츠 타입이 사용될 수 있음
HTTP 메서드
- GET : 자원을 습득하기 위한 메서드
- HEAD : GET과 동일하나, 헤더만을 응답받는 메서드
- POST : 서버로 하여금 특정 작업을 처리하게끔 하는 메서드
- PUT : 자원을 대체하기 위한 메서드
- PATCH : 자원에 대한 부분적 수정을 위한 메서드
- DELETE : 자원을 삭제하기 위한 메서드
- CONNECT : 자원에 대한 양방향 연결을 시작하는 메서드
- OPTIONS : 사용 가능한 메서드 등 통신 옵션을 확인하는 메서드
- TRACE : 자원에 대한 루프백 테스트를 수행하는 메서드
GET - 가져다 주세요
- 특정 자원을 조회할 때 사용
- GET 요청 메시지 본문을 포함시키는 것은 바람직하지 않음
- 쿼리 문자열을 통해 자원 요청
HEAD - 헤더만 가져다주세요
- GET과 동일하나 응답 메시지에 메시지 본문이 포함되지 않음
POST - 처리해 주세요
- 서버가 특정 작업을 처리하도록 요청하는 메서드
- 대부분 새로운 자원을 생성하고자 할 때 사용
- 만약 성공적으로 요청 처리되면 Location 헤더를 통해 새로 생성된 자원의 위치를 알려줄 수 있음
PUT - 덮어써 주세요
- 덮어쓰기 요청
- 자원이 없으면 새로 생성, 존재하면 완전히 대체
PATCH - 일부 수정해 주세요
- 부분적 수정
DELETE - 삭제해 주세요
- 특정 자원 삭제
API 문서
- 어떤 URL로 어떤 요청을 받을 때 서버의 응답을 잘 보여주는 문서
HTTP 상태 코드
200번대: 성공 상태 코드
| 200 | OK | 요청이 성공 |
|---|---|---|
| 201 | Created | 요청이 성고, 새로운 자원 생성 |
| 202 | Accepted | 요청은 받았으나, 아직 요청 작업을 끝내지 않았음 |
| 204 | No Content | 요청은 성공했지만, 메시지 본문으로 표시할 데이터가 없음 |
300번대: 리다이렉션 상태 코드
- 리다이렉션 : 요청을 완수하기 위해 추가적인 조치가 필요한 상태
- 클라이언트가 요청한 자원이 다른 곳에 있을 때, 클라이언트의 요청을 다른 곳으로 이동시키는 것
- 이때 다른곳은 URL이 될 수도 있고, 캐시가 될 수도 있음
-
영구적인 리다이렉션 : 자원이 완전히 새로운 곳으로 이동하여 경로가 영구적으로 재지정
| 301 | Moved Permanently | 영구적 리다이렉션, 재요청 메서드 변경될 수 있음 | | — | — | — | | 308 | Permanent Redirect | 영구적 리다이렉션, 재요청 메서드 변경되지 않음 |
- 301 : GET으로 요청후 301 → GET이거나 다른거 일수도 있음
- 308 : POST로 요청 후 308 → 무조건 POST 로 유지
- 일시적인 리다이렉션 : 자원의 위치가 임시로 변경되거나 임시로 사용할 URL이 필요한 경우
-
일시적인 리다이렉션 상태코드를 받으면 요청을 보낸 URL을 기억해야 함
302 Found 일시적 리다이렉션, 재요청 메서드 변경될 수 있음 303 See Other 일시적 리다이렉션, 재요청 메서드 GET으로 변경 307 Temporary Redirect 일시적 리다이렉션, 재요청 메서드 변경되지 않음
-
- 클라이언트가 요청한 자원이 다른 곳에 있을 때, 클라이언트의 요청을 다른 곳으로 이동시키는 것