본 포스트는 [부스트코스] 웹 프로그래밍 강좌의 다음강의를 수강한 후 작성하는 글이다.
프로토콜이란?
컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속을 말한다.
HTTP란?
HyperText Transfer Protocol의 약자로 서버와 클라이언트가 인터넷상에서 데이터를 주고받기 위한 프로토콜이다. 즉, 웹 상에서 데이터를 주고받는 규칙이다. HTTP는 어떤 종류의 데이터라도 전송할 수 있도록 설계되어 있어 이미지, 동영상, 오디오, 텍스트 문서 등 다양한 종류의 데이터를 전송할 수 있다.
HTTP 작동방식
HTTP는 서버/클라이언트 모델을 따른다. 클라이언트는 네트워크에서 서비스를 요청하는 측의 컴퓨터를 의미하고, 서버는 네트워크에서 서비스를 제공하는 측의 컴퓨터를 의미한다. 즉, 클라이언트/서버 모델이란 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 네트워크 구조다.
다음과 같이 작동한다.
- 클라이언트가 서버에 접속한다.
- 클라이언트가 서버에게 서비스를 요청한다.
- 서버는 클라이언트가 요청한 서비스를 제공한다.
- 접속을 끊는다.
- 장점
- 불특정 다수를 대상으로 하는 서비스에 적합하다.
- 클라이언트와 서버가 계속 연결된 형태가 아니기 때문에 클라이언트와 서버 간의 최대 연결 수보다 훨씬 많은 요청과 응답을 처리할 수 있다.
- 단점
- 서버는 클라이언트의 요청에 응답한 뒤 연결을 끊어버리기 때문에 다시 연결되었을 때 해당 클라이언트인지 알 수 없다. 즉, 클라이언트의 이전 상황을 알 수 없다. (=무상태[Stateless])
- 이러한 특징 때문에 정보를 유지하기 위해서 Cookie와 같은 기술이 등장하게 되었다.
URL
Uniform Resource Locator의 약자로 인터넷 상의 자원의 위치나 특정 웹 서버의 특정 파일에 접근하기 위한 경로 혹은 주소를 의미한다. 방대한 컴퓨터 네트워크에서 자신이 원하는 정보 자원을 찾기 위해선 위치를 정확히 알아야 할 필요가 있는데 이를 나타내는 일련의 규칙을 URL(자원 위치 지정자)이라고 한다.
URL의 구조는 위의 이미지와 같은데, 앞서 말했던 http 접근 프로토콜, 해당 정보의 위치를 나타내는 IP주소 또는 도메인 이름, 해당 정보의 경로, 정보의 이름으로 구성되어있다.
- a : 프로토콜의 종류
- b : 자원이 있는 서버의 IP주소, 도메인 주소, 포트 번호
- c : 경로
- d : 이름
실제로 웹은 다음과 같이 동작한다.
- 클라이언트가 먼저 원하는 서버에 접속한다.
- 클라이언트가 서버에 요청 (Request)
- 서버가 클라이언트에 응답 (Response)
여기서 클라이언트가 서버에게 요청할 때 정해진 규칙에 따라 보내는 HTTP 요청 메시지를 보면 요청 헤더와 바디로 나뉜다. 헤더의 첫번째 줄을 보면 다음과 같이 쓰여 있다.
GET /servlet/query?a=10&b=90 HTTP1.1
크게 세 부분으로 나뉘는데 GET부분은 요청 메서드로 요청하는 방식을 나타낸다. 중간 부분은 요청 URI로 요청하는 자원의 위치를 명시하고, 마지막으로 마지막 부분은 웹 브라우저가 사용하는 프로토콜의 버전을 명시해주는 부분이다.
정리하자면,
- 요청 메서드 : GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식
- 요청 URI : 요청하는 자원의 위치를 명시
- HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전
메소드 종류
- GET : 정보를 요청하기 위해서 사용한다. (SELECT)
- POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)
- PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
- DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)
- HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다.
- OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.
- TRACE : 클라이언트의 요청을 그대로 반환한다. 예컨데 echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용한다.
'공부 > [부스트코스] 웹 프로그래밍' 카테고리의 다른 글
[부스트코스] 웹 프로그래밍 - 웹 서버 & WAS (0) | 2020.02.05 |
---|---|
[부스트코스] 웹 프로그래밍 - browser에서의 웹개발 (0) | 2020.02.03 |
[부스트코스] 웹 프로그래밍 - browser의 동작 (0) | 2020.02.01 |
[부스트코스] 웹 Front-End와 웹 Back-End (0) | 2020.01.30 |
부스트코스 서포터즈 BOOSTER 선정 (0) | 2020.01.15 |