본문 바로가기
Network/혼공네트 (혼공단 12기)

[혼공네트] Chapter 05. 응용계층

by ganyga 2024. 8. 10.

스터디 커리큘럼

학습 목표

  • 도메인 네임과 DNS에 대해 학습합니다.
  • 자원의 개념과 이를 식별하는 URI, URL을 학습합니다.
  • HTTP의 여러 특성과 메시지 구조를 이해합니다.
  • HTTP 메시지의 메서드와 상태 코드를 학습합니다.
  • HTTP의 여러 헤더와 그를 기반으로 하는 캐시, 쿠키, 콘텐츠 협상 기술을 이해합니다.

내용 정리

도메인 네임 분류

.(점)을 기준으로 계층적으로 분류된다. 루트 도메인 → 최상위 도메인 → 2단계 도메인

 

DNS(Domain Name System)

계층적이고 분산된 도메인 네임에 대한 관리 체계이자 이를 관리하는 프로토콜

 

DNS 동작 과정

⇒ 실제로는 DNS 캐시를 이용하여 기존에 응답받은 결과를 임시로 저장했다가 추후에 같은 질의가 오면 이를 활용

 

자원 식별하기

- Resource : 두 호스트가 네트워크를 통해 서로 정보를 주고받을 때 송수신하는 대상 (HTML 파일, 이미지, 동영상 파일, 텍스트 파일 등)

- URI(Uniform Resource Identifier) : 자원을 식별할 수 있는 정보

- URL(Uniform Resource Locator) : 위치를 이용해 자원을 식별

- URN(Uniform Resource NAme) : 이름을 이용해 자원을 식별

 

HTTP의 특성

1. 요청-응답 기반 프로토콜

2. 미디어 타입에 독립적인 프로토콜

3. Stateless 프로토콜

* Stateless : 서버가 HTTP 요청을 보낸 클라이언트와 관련된 상태를 기억하지 않는다는 의미, 클라이언트가 실수로 특정 HTTP 요청 메시지를 서버에게 여러 번 전송했다고 가정 했을 때 서버는 이 요청을 각기 다른 요청으로 간주함 

⇒ 특정 클라이언트가 특정 서버에 종속되지 않도록 하며, 서버의 추가나 문제 발생 시 대처가 용이하도록 함

4. 지속 연결 프로토콜

 

HTTP 메서드

- GET : 자원을 습득하기 위한 메서드 (가져다주세요)

- HEAD : GET과 동일하나, 헤더만을 응답받는 메서드 (헤더만 가져다주세요)

- POST :  서버로 하여금 특정 작업을 처리하게끔 하는 메서드 (처리해 주세요)

- PUT : 자원을 대체하기 위한 메서드 (덮어써주세요)

- PATCH : 자원에 대한 부분적 수정을 위한 메서드 (일부 수정해 주세요)

- DELETE : 자원을 삭제하기 위한 메서드(삭제해 주세요)

 

HTTP 상태 코드

- 200번대 : 성공 상태 코드

- 300번대 : 리다이렉션 상태 코드

* 리다이렉션 : 다시 향하다, 클라이언트가 요청한 자원이 다른 곳에 있을 때, 클라이언트의 요청을 다른 곳으로 이동시키는 것을 의미

- 400번대 : 클라이언트 에러 상태 코드 : 서버가 처리할 수 없는 형태로 요청을 보냈거나, 존재하지 않는 자원에 대해 요청을 보내는 경우

- 500번대 : 서버 에러 상태 코드

 

캐시

- 불필요한 대역폭 낭비와 응답 지연을 방지하기 위해 정보의 사본을 임시로 저장하는 기술

- 웹 브라우저에 저장되어 있기도 하고, 클라이언트와 서버 사이에 위치한 중간 서버에 저장되어 있기도 함

 

쿠키

- 서버에서 생성되어 클라이언트 측에 저장되는 데이터

- 상태를 유지하지 않는(Stateless) HTTP의 특성을 보완하기 위한 수단

- 서버가 클라이언트의 상태를 알 수 있게끔 하는 특별한 데이터

 


기본 숙제

(05-1) 확인 문제 1번(p.271)

문제 : 도메인 네임과 네임 서버에 대한 설명으로 옳지 않은 것을 골라보세요.

정답 : 4번

풀이 : 

1. 8.8.8.8은 대표적인 공개 DNS 서버로, 구글이 관리합니다.(O)

2. 도메인 네임은 호스트를 특정할 수 있는 문자열 형태의 정보입니다.(O)

3. DNS는 계층적이고 분산된 도메인 네임에 대한 관리 체계이자 이를 관리하는 프롤토콜 입니다.(O)

4. www.example.com에서 루트 도메인은 com에 해당합니다.(X)

여기서 루트 도메인은 com이 아닌 .이 루트 도메인, com은 최상위 도메인

 

(05-2) 확인 문제 2번(p.307)

문제 : HTTP 상태 코드에 대한 설명으로 옳지 않은 것을 골라보세요.

정답 : 3

풀이 :

200번대 상태 코드는 요청이 성공했음을 의미

300번대 상태 코드는 리다이렉션을 의미

400번대 상태 코드는 클라이언트에 의한 에러를 의미

500번대 상태 코드는 서버에 의한 에러를 의미

 

추가 숙제

문제 : HTTP 요청 메시지 확인해 보기

방법 1) 웹 브라우저 > 개발자 도구 > Network > 자원 선택 > Headers

 

방법 2) curl 명령어를 이용해서 확인하기

  • curl 명령어 : HTTP 요청을 보내고 응답을 확인하는 데 주로 사용되는 명령어
  • -v 옵션 : 요청 헤더 확인
curl -v ganyga.tistory.com/api
* Host ganyga.tistory.com:80 was resolved.
* IPv6: (none)
* IPv4: 27.0.236.143
*   Trying 27.0.236.143:80...
* Connected to ganyga.tistory.com (27.0.236.143) port 80
> GET /api HTTP/1.1
> Host: ganyga.tistory.com
> User-Agent: curl/8.6.0
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Wed, 07 Aug 2024 08:51:37 GMT
< content-type: text/html; charset=UTF-8
< content-length: 874
< vary: Accept-Encoding
< vary: Accept-Encoding
<
<!doctype html>
<html>
<head>

</head>
<body>
<script>
	var openWindow, source, origin;

	function handleMessage(event) {
	    var entryId = event.data;
		if (entryId === parseInt(entryId, 10)) {
			editEntry(entryId);
			source = event.source;
			origin = event.origin;
		}
	}

	function editEntry(entryId) {
		if (openWindow) {
		    openWindow.close();
        }
		openWindow = window.open("/manage/post/" + entryId + "?popupEditor&returnURL=CLOSEME", "tatter", "width="+1169+",height="+600+",location=0,menubar=0,resizable=1,scrollbars=1,status=0,toolbar=0");
		openWindow.focus();
	}

	function reloadPost() {
		if (source && origin) {
		    source.postMessage('reload', origin)
		}
	}

	if (document.addEventListener){
		window.addEventListener("message", handleMessage, false);
	} else {
		window.attachEvent('onmessage', handleMessage);
	}
</script>
</body>
</html>
* Connection #0 to host ganyga.tistory.com left intact