-
[부스트코스] HTTP 프로토콜 이해부스트코스 코딩일지/웹 프로그래밍 기초 2020. 1. 11. 00:37
안녕하세요. 부스트코스 서포터즈 2기에 선발된 valid_ming입니다!
오늘은 웹의 동작 방법에 대해 공부하도록 하겠습니다.
1. HTTP 란?
: Hypertext Transfer Protocol
물리적인 하나의 컴퓨터에는 여러 개의 서버가 동작할 수 있습니다.
다양한 기능을 하는 각각의 서버들은 서로 다른 포트 값으로 구분되어 동작합니다.
일반적으로 포트 번호는 잘 알려진 포트 (well-known port), 등록된 포트 (registered port),
동적 포트 (dynamic port) 세 가지로 나뉩니다.
예를 들어, 우리가 잘 알고 있는 웹은 80번, 이메일은 25번 그리고 FTP는 21번을 사용합니다.
잘 알려진 포트는 0~1023번 값을 사용합니다.
이러한 네트워크들은 TCP/IP 라는 약속, 통신 규약으로 연결되어 있습니다.
이러한 통신 규약을 프로토콜이라고 합니다.
오늘 공부할 HTTP는 웹에서 통신하기 위한 프로토콜입니다.
즉, HTTP는 서버와 클라이언트가 웹상에서 데이터를 주고받기 위한 프로토콜입니다.
+HTTPS와 HTTP의 차이점
: HTTPS는 HTTP와 같이 웹상에서 통신하기 위한 프로토콜이지만, HTTP와 다르게 데이터가
암호화되어 보호됩니다.
2. HTTP 작동방식
http는 서버/클라이언트 모델을 따릅니다.
클라이언트가 서버에 요청을 보내면 요청을 받은 서버가 클라이언트에게 응답을 보냅니다.
응답을 한 서버는 클라이언트와의 연결을 끊어버립니다.
이러한 특징 때문에 http를 무상태 프로토콜이라고도 합니다.
stateless(무상태) 방식은 장단점을 가집니다.
장점으로는,
불특정 다수를 대상으로 하는 서비스에 적합하다는 것과 클라이언트와 서버 간의 최대 연결
수보다 훨씬 많은 요청과 응답을 처리할 수 있다는 것입니다.
단점으로는,
방금 요청한 클라이언트가 다시 요청해도 클라이언트의 정보를 다시 받아와야 한다는 것입니다.
이를 보완하기 위해 Cookie와 같은 정보 유지 기술이 등장했습니다.
3. URL 이란?
: Uniform Resource Locator
url은 웹 상에서 다양한 자원(문서, 이미지, 동영상)들의 위치를 나타내기 위해 사용합니다.
URL은 크게 세 부분으로 구분됩니다.
접근 프로토콜://IP 주소 또는 도메인 이름/문서의 경로/문서이름
url은 클라이언트가 서버에 요청할 때 쓰입니다.
4. 웹의 동작
클라이언트가 서버에 접속 후(connect) 요청을(request) 하여 서버로부터
응답을(response) 받아오는 과정을 통해 우리는 웹상에서 원하는 정보를 얻습니다.
이 응답이 끝나면 서버와 클라이언트의 연결은 끊기게 됩니다(close).
이때 요청되는 데이터들은 정해진 규칙에 따라 서버에 보내지게 됩니다.
이를 요청 데이터 포맷(요청 메시지)이라 합니다.
요청 메시지는 요청 헤더, 빈 줄, 요청 바디 세 부분으로 나누어집니다.
요청 헤더는 요청의 종류(요청 메서드), 요청하는 자원의 위치(요청 URL), http 프로토콜의 버전을
알려주는 정보로 구성되어 있습니다.
요청 메서드는
GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE와 같이 다양한 종류가 있습니다.
응답 데이터 포맷도 마찬가지로 헤더 부분, 빈 줄, 응답 바디 세 부분으로 나누어집니다.
응답 헤더에서는 응답 HTTP의 프로토콜 버전, 응답 코드, 응답 메시지가 그리고 여러 가지 웹 서버에
해당하는 정보들을 볼 수 있습니다.
응답 바디 부분에서 실제 응답 리소스 데이터를 확인할 수 있습니다.
이렇게 해서 오늘은 웹의 동작 원리에 대해 알아보았습니다.
이 부분은 학교 자바 수업에서 가볍게 다루었던 적이 있는데, 이렇게 자세히 알아보니
그때 사소한 궁금증들이 이제야 해결된 거 같네요~
그럼 다음 시간에 뵙겠습니다.
[출처 : https://www.edwith.org/boostcourse-web/lecture/16661/]
'부스트코스 코딩일지 > 웹 프로그래밍 기초' 카테고리의 다른 글
[부스트코스] Browser에서의 웹 개발 (0) 2020.01.19 [부스트코스] Browser의 동작 (0) 2020.01.17 [부스트코스] 웹 백 엔드 (0) 2020.01.17 [부스트코스] 웹 Front-End (0) 2020.01.16 [부스트코스] 웹 프로그래밍 언어들 (0) 2020.01.15