1. HTTP
HTTP는 클라이언트(브라우저)와 서버 간에 요청(Request)과 응답(Response)을 주고 받기위 위한 프로토콜(규칙)이다.
- TCP 기반 프로토콜
- 클라이언트와 서버 연결을 수립한 후 메세지를 교환
- 데이터를 패킷 단위로 전송하며, 수신 측에서 데이터를 검증한 뒤 응답을 보낸다.
- HTTP/1.1 에서는 요청-응답 한 번마다 연결이 종료되었지만, Keep-Alive 옵션을 통해 연결을 유지할 수 있다.
- HTTP/2 이후에는 멀티플렉싱을 사용하여 하나의 연결에서 여러 요청과 응답을 처리할 수 있다.
- 데이터 누락 시 재전송 요청을 처리하여 신뢰성을 높임
- 신뢰성을 보장하기 위해 3-way handshake로 연결을 설정하고, ACK(확인 응답)를 사용하여 패킷이 제대로 전달되었는지 확인할 수 있다. 문제가 발생하면 누락된 데이터를 재전송한다.
- 주로 HTTP, FTP(파일 전송), SMTP(이메일 전송) 등 신뢰성이 중요한 통신에 사용됨
- TCP와 HTTP의 관계
- TCP는 데이터를 전달하는 역할을 담당하며, HTTP는 이러한 데이터 전송 위에서 어떤 데이터를 어떻게 요청하고 응답할 지를 정의한다. TCP는 HTTP 뿐만 아니라 다른 프로토콜에서도 사용된다.
1-1. 클라이언트와 서버의 역할
- 클라이언트 : 데이터를 요청하는 주체(예: 브라우저, 모바일 앱)
- 서버 : 데이터를 처리하고 응답을 보내는 주체(예, 웹서버, API 서버)
1-2. HTTP의 동작 과정
- 클라이언트가 특정 URL로 요청(Request)을 보냄
- 서버가 해당 요청을 처리하고 응답(Response)을 보냄
- 클라이언트는 받은 응답을 사용자에게 보여줌(HTML, JSON, 이미지 등)
1-3. HTTP의 특징
- 비연결성(Connectionless)
- 클라이언트와 서버는 한번의 요청과 응답 후 연결을 끊어, 필요할 때 다시 연결한다.
- 무상태성(Stateless)
- 서버는 클라이언트의 요청 정보만 가지고, 응답을 생성하며, 클라이언트의 상태를 기억하지 않는다.
- 요청한 사용자가 누구이며, 이전에 어떤 작업을 했는지 관리 하지 않는다.
- 이를 보완하기 위해, JWT, Cookie, Storage등을 사용하게 되었다.
- 텍스트 기반 프로토콜
- 요청과 응답은 사람이 읽을 수 있는 형태(텍스트)로 작성된다.
2. HTTP 요청(Request)
요청은 클라이언트가 서버에게 원하는 작업을 전달하는 과정이다. 요청은 크게 4가지로 구성되어 있다.
2-1. 요청 메서드
- GET: 데이터를 읽어오기 위한 요청(예: 웹페이지 로드)
- URL 뒤에 쿼리 파라미터를 포함시킬 수 있다.(예, ?id=123)
- 데이터를 읽기만 하므로 서버의 상태를 변경하지 않음
- POST: 데이터를 서버로 전송하는 요청. (예: 회원가입 폼 제출)
- 요청 바디(Body)에 데이터를 포함
- 서버에 변경을 일으키는 작업(데이터 추가 등)
- PUT: 데이터를 업데이트하거나 새로 저장하는 요청
- 기존 데이터가 있으면 업데이트, 없으면 새로 추가
- DELETE: 서버의 데이터를 삭제하는 요청
2-2. URL
리소스를 나타내는 주소
- 기본 구조: http://호스트주소:포트번호/경로?쿼리파라미터
- 호스트 주소: 서버 위치(예: www.example.com)
- 포트 번호: 서버 연결 포트(기본값: 80, HTTPS는 443)
- 경로: 리소스 위치(예: /products/123)
- 쿼리 파라미터: 추가 데이터 전달(예, ?page=1&size=10)
2-3. 헤더(Header)
요청에 대한 추가 정보를 포함
- Content-Type: 데이터 형식(예: application/json)
- Authorization: 인증 정보(예: Bearer Token)
- User-Agent: 요청을 보낸 클라이언트 정보(예: 브라우저 정보)
2-4. 바디(Body)
요청과 함게 전송되는 데이터(POST, PUT에서 주로 사용)
예: JSON 형태의 데이터
{
"username": "겨울은춥다",
"password": "12341234"
}
3. HTTP 응답(Response)
응답은 서버가 요청에 대해 보내는 결과물이다. 구성은 요청과 비슷하지만, 다음과 같은 요소 구성되어 있다.
3-1. 상태 코드(Status Code)
응답의 결과를 나타내는 숫자코드, 주로 3자리로 구성되어있다.
- 1xx : 정보
- 요청을 처리, 거의 사용하지 않음
- 2xx: 성공
- 요청이 성공적으로 처리함
- 200 OK: 일반적인 성공
- 201 Created: 리소스 생성 성공
- 204 No Content: 응답 바디 없음
- 요청이 성공적으로 처리함
- 3xx: 리다이렉션
- 클라이언트가 다른 URL로 이동해야 함
- 301 Moved Permanently: 리소스가 영구적으로 이동
- 302 Found: 일시적으로 다른 URL로 이동
- 클라이언트가 다른 URL로 이동해야 함
- 4xx: 클라이언트 오류
- 요청에 문자가 있음
- 400 Bad Request: 요청 형식이 잘못됨
- 401 Unauthorized: 인증 필요
- 403 Forbidden: 접근 권한 없음
- 404 Not Found: 리소를 찾을 수 없음
- 요청에 문자가 있음
- 5xx: 서버 오류
- 서버가 요청을 처리하지 못함
- 500 Internal Server Error: 일반적인 서버 오류
- 503 Service Unavailable: 서버가 현재 사용 불가능
- 서버가 요청을 처리하지 못함
3-2. 헤더(Header)
응답에 대한 추가 정보를 포함
- Content-Type: 응답 데이터 형식(예: text/html, application/json)
- Cache-Control: 캐싱 관련 정보
- Set-Cookie: 클라이언트에 쿠키 저장
3-3. 바디(Body)
응답 데이터를 포함
예: JSON 응답 데이터
{
"success": true,
"data": {
"id": 123,
"name": "winter"
}
}
4. HTTP의 한계와 HTTPS
- HTTP는 데이터가 암호화되지 않아 해커가 요청/응답을 가로채면 내용을 가로채어 확인할 수 있다.
- HTTPS는 SSL/TLS 암호화를 사용해 데이터를 안전하게 보호할 수 있다. 브라우저 주소창에 자물쇠 아이콘으로 표시된다.
5. HTTP의 버전별 차이
- HTTP/1.1
- 각 요청마다 별도의 연결(커넥션)을 생성
- Keep-Alive 옵션으로 연결을 유지 가능
- HTTP/2
- 하나의 연결로 여러 요청/응답을 처리(멀티플렉싱)
- 헤더 데이터 압축으로 성능 향상
- HTTP/3
- QUIC(Quick UDP Internet Connections) 프로토콜 사용
- 연결 성립 속도와 데이터 전송 속도가 빠르다.
HTTP는 클라이언트(브라우저)와 서버에 요청(요청)과 응답(응답)을 수신하는 경우에는 규칙(규정)입니다.
'CS' 카테고리의 다른 글
HTTP 프로토콜 (0) | 2024.09.02 |
---|---|
프로그래밍 패러다임 / 선언형과 함수형 프로그래밍 (0) | 2024.07.21 |
노출모듈 패턴 / MVC 패턴 / MVP 패턴 / MVVM 패턴 (0) | 2024.07.14 |
옵저버 패턴 / 프록시 패턴과 프록시 서버 / 이터레이터 패턴 (0) | 2024.07.05 |
싱글톤 패턴 / 팩토리 패턴 / 전략 패턴 (0) | 2024.06.29 |