Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스터디
- groupby
- 카카오코테
- 자바
- CS
- 정보처리기사
- 안드로이드스튜디오
- Kotlin
- java
- doitandroid
- 안드로이드
- 알고리즘
- 오블완
- Android
- 인프런
- 코틀린
- 혼공단
- 기술면접
- join
- MySQL
- 자료구조
- 혼공파
- SQL
- 혼공챌린지
- select
- 코테
- Til
- 프로그래머스
- 정처기
- 티스토리챌린지
Archives
- Today
- Total
Welcome! Everything is fine.
#01. HTTP란? / HTTP의 특징 / HTTP METHOD 종류 본문
728x90
CS 기초 스터디 첫 질문을 선정했다! 이번 질문은 "HTTP METHOD에 대해 설명해 보세요."였다.
HTTP 메서드에 대해 공부하기 전에 먼저 HTTP의 정의와 특징에 대해 정리하고, 실제로 HTTP 요청 프로토콜이 어떻게 구성되어있는지 알아보았다.
HTTP(HyperText Transfer Protocol)란?
HTML 문서 등을 주고받는 서버-클라이언트 메시지 교환 프로토콜로, TCP/UDP를 사용하여 통신한다.
클라이언트(=리소스를 요청하는쪽)와 서버(=요청을 받아 해당 리소스를 제공하는 쪽) 간에 통신이 일어난다.
- Request(요청) : 메서드, URI, 프로토콜 버전, 헤더, 바디로 구성
- Response(응답) : 프로토콜 버전, 상태코드, 상태코드에 대한 설명, 헤더, 바디로 구성
HTTP의 특징
- Stateless : 통신이 끝나면 상태를 유지하지 않는 특징. HTTP 프로토콜에서는 과거 정보를 남기지 않고 새로운 Request를 보낼 때마다 새로운 Response를 보낸다. 따라서 상태 유지가 필요할 때는 세션과 쿠키같은 기술이 함께 쓰이고 있다.
- 지속 연결 : 초기 HTTP는 비지속 연결을 사용했지만, 데이터가 많아지면서 매번 연결했다가 종료하니까 자원낭비 & 속도저하 → 지속연결을 통해 서버의 부하를 줄이고 통신을 좀 더 빠르게 할 수 있게 되었다. 그러나, 성능 향상이 미미하고 프록시 버그가 있어 모던 브라우저에서는 기본적으로 활성화 되어있지 않다.
HTTP 요청 프로토콜의 구조
HTTP 요청 프로토콜은 다음과 같은 구조로 이루어진다.
Request line
Header
공백
Body
ChatGPT가 보여준 예시는 다음과 같다.
GET /path/to/resource HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
이 예시에서는 GET 메서드를 사용한 것으로 보아 정보를 요청하고 있다는 목적을 알 수 있다. 또한 URI를 통해 요청 대상 리소스의 위치를 나타낸다. 여기서는 /path/to/resource가 URI이다. 그 다음에 나오는 HTTP/1.1은 사용 중인 HTTP 프로토콜의 버전을 나타낸다. 그 아래는 모두 헤더이며, 보통 GET 메서드는 서버로부터 정보를 가져오는 데 사용되어서 바디가 없다.
HTTP 메서드의 종류
- HTTP 메서드 : 클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단
- 여기서 '멱등성'이라는 개념이 나오는데, 멱등성이란 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미하며 메서드 별로 멱등성 성립 여부가 다르다.
- GET:
- 클라이언트가 서버로부터 특정한 리소스를 가져오도록 요청할 때 사용되며, 데이터를 헤더에 추가하여 전송한다.
- URL에 파라미터를 붙여서 전달하며, URL에 데이터가 노출되므로 중요한 데이터를 포함해서는 안된다.
- 여러번 사용해도 특정 리소스를 보내주기만 하기 때문에 멱등성이 보장된다.
- POST:
- 클라이언트가 서버에 데이터를 전송할 때 사용되며, 데이터를 바디에 추가하여 전송한다.
- URL에 데이터가 노출되지 않아 GET에 비해 상대적으로 안전하다.
- 데이터를 추가하거나 수정하기 때문에 멱등성이 보장되지 않는다. (ex. 게시글을 보내면 서버의 상태가 변함)
- PUT:
- 클라이언트가 리소스를 생성하거나 업데이트할 때 사용된다. 대상 리소스가 없다면 생성하고, 리소스가 있다면 request의 본문대로 교체한다.
- 기존에 있던 리소스를 요청에 담긴 본문의 내용 그대로 대체해버리기 때문에 여러 번 수행되어도 결과 값은 바뀌지 않기 때문에 멱등성이 보장된다.
- DELETE:
- 클라이언트가 서버의 리소스를 완전히 삭제하도록 요청할 때 사용된다.
- PATCH:
- 리소스의 일부를 업데이트하기 위해 사용된다.
- PUT이 리소스 전체를 업데이트하는데 사용되는 반면, PATCH는 리소스의 일부를 수정하는데 사용된다.
- 리소스의 전체 또는 일부를 수정할 수 있으므로 멱등성을 보장할 수도, 보장하지 않을 수도 있다.
HTTP 메서드라고 하면 GET과 POST에 대해서만 알고 있었다. 그것도 정확히 어떤 역할을 하는지 모르고 있었는데, 이번 질문에 대해 여러 문서와 강의를 참고해보며 모르는 부분을 공부할 수 있었다.
[참고]
[Network] HTTP란 무엇인가? (tistory.com)
HTTP 메소드의 멱등성, 그리고 안전한 메서드 (hudi.blog)
'CS 스터디' 카테고리의 다른 글
#06. 절차지향 vs 객체지향 (0) | 2024.01.30 |
---|---|
#05. 객체 지향 프로그래밍(OOP)의 개념 / 특징 / 설계 원칙 (0) | 2024.01.30 |
#04. 동기와 비동기 (0) | 2024.01.24 |
#03. 쿠키(Cookie)와 세션(Session) (0) | 2024.01.23 |
#02. 프로세스와 스레드의 차이 (0) | 2024.01.17 |