HTTP 정리

버건디·2022년 12월 9일
0

http

목록 보기
1/1
post-thumbnail

노드를 공부하면서 http라는 단어를 수도 없이 접했지만 도저히 와닿지가 않았다. 공부를 하다보면 대충 ' 아 서버와 통신하기 위한 규약?' 정도로 이해를 했는데, 또 공부를 이어서 하다보면 http 서버가 나오고, http 모듈이라고 나오고 통신규약이라고 했는데 http.createServer 가 나온다. 검색을 해봐도 나같은 초심자가 http에 대한 이해를 돕는 글들을 찾기는 어려웠다. 이 참에 http에 대한 완벽한 체화를 하고 가야할 것 같다는 생각이 들었다.

🔍 그래서 HTTP란 무엇인가?

이것을 이해하려면 클라이언트와 서버의 관계를 알아야한다.

각각의 사이트는 서버가 존재한다. 서버는 요청을 받아 그 사이트에 해당하는 정보나 서비스를 응답한다.

네이버는 네이버만의 서버, 구글은 구글만의 서버 등등 각 사이트에 해당하는 서버들이 존재하는 것이다.

클라이언트는 인터넷을 접속하는 '나'라고 생각 할 수 있다.

우리가 만약 www.velog.com에 접속한다고 가정해보면 클라이언트인 우리는 이 벨로그 주소에 해당하는

메인 페이지를 요청한것이고, velog 서버에서는 요청에 맞는 서비스를 우리에게 응답한 것이다.

HTTP 는 통신규약인데 왜 HTTP라는 서버가 또 필요한걸까?

말하자면 서버쪽에서 HTTP라는 통신규약으로 클라이언트 쪽으로 응답을 해주기 위헤서 HTTP 서버가

필요한 것이고, 이 통신규약을 지키면서 서버와 클라이언트가 교류하는것이다.

HTTP 는 여러가지의 특징을 가지고 있는데,

1. 요청과 응답

HTTP 통신은 클라이언트의 요청(Request)과 그에 대한 서버의 응답(Response)으로 이루어진다.

우리가 지금 보는 HTML 웹 페이지도 브라우저의 요청에 따라 서버가 응답한 결과이다.

2. TCP/IP 통신 위에서 동작

TCP/IP 통신 위에서 동작하며 80번 포트를 사용한다.

3. 어떤 종류의 데이터라도 전송 가능

HTML문서 말고도 단순 텍스트나 이미지, 오디오 등의 미디어 데이터도 전송 가능하다.

4. Connectionless(비연결성)

Connectionless는 한 가지 요청에 대한 응답을 받으면 그 연결을 끊어버리는 것을 의미한다. 연결에 대한 리소스를 줄일 수 있는 장점이 있지만 ❗️ 같은 클라이언트에서 오는 요청도 계속 연결/해제 해야 한다는 단점이 있다 ❗️

5. Stateless(무상태)

Connectionless의 특징을 가지기 때문에 서버는 클라이언트를 식별하지 못한다. 따라서 같은 클라이언트에서 계속 요청을 보내더라도 그 요청은 각각 독립적으로 처리된다.


🔍 HTTP 메서드 정리

- 안전

호출해도 리소스를 변경하지 않는 특성

- 멱등

동일한 요청을 여러 번 보내도 한 번 보내는 것과 같은 것

외부 요인으로 중간에 리소스가 변경되는 것을 고려하지 않고 해당 요청을 기준으로 고려한다.

올바르게 구현한 GET, PUT, DELETE 메소드는 멱등성을 지녀야 한다.

예)

DELETE /members/100 → 200
DELETE /members/100 → 404
DELETE를 여러 번 호출하면 응답 코드는 달라질 수 있지만, 100번 member가 삭제된 것은 동일

- 캐시 가능

응답 결과를 서버에 캐시 해서 사용해도 되는 메소드

GET, HEAD, POST, PATCH가 가능하지만 실무에서는 구현이 어렵기 때문에 GET, HEAD 정도만 캐시 하여 사용


1. GET

서버의 자원을 가져오고자 할 때 사용한다. 요청의 본문에는 데이터를 넣지 않는다.
서버에 전달하고 싶은 데이터를 query(parameter, query string)을 통해 전달한다.

2. POST

메세지 바디를 통해서 서버로 새로 등록할 데이터를 전달한다.
서버는 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
주로 신규 리소스의 등록, 프로세스 처리 등에 사용한다.
신규 리소스를 등록했다면 새로 생성되었다는 201 상태 코드와 생성된 URI 경로(Location)를 반환한다.

3. PUT

서버의 데이터를 요청에 들어 있는 데이터로 치환 하고자 할때 사용한다. 요청의 본문에 치환할 데이터를 넣어서 보낸다.
PUT은 POST와 다르게 클라이언트가 리소스의 위치를 알고 URI를 지정해 주어야 한다.

4. PATCH

서버의 자원의 일부만 수정하고자 할때 사용한다.
PUT과의 차이점은

PUT은 요청시에 수정을 원하는 데이터에 대한 필드를 모두 채워서 보내야 하지만, PATCH는 일부 필드만 채워서 보내도 된다.

예를 들어 이런 데이터가 있다고 가정하고 gender 만 바꾼다고 가정했을때,

PUT은 gender 만 변경하면 되는 것인데도 name 속성까지 변경해야하고, PATCH 는 gender 속성만 변경해도 된다.

5. DELETE

서버의 자원을 삭제하고자 할때 사용한다. 요청의 본문에 데이터를 넣지 않는다.

6. 그 밖의 메서드들

HEAD : GET과 동일하지만 메시지 바디를 제외하고 반환
OPTIONS : 대상 리소스에 대한 통신을 설정하는 데 사용
CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글