웹 페이지는 객체(objects)들로 구성되며 웹 페이지는 보통 참조 객체들이 포함된 기본 HTML 파일이다.
따라서 클라이언트가 웹 페이지에 방문하여 시각적으로 보기 위해서는 기본 HTML 및 객체 정보를 받을 필요가 있는데 이때 사용하는 프로토콜이 HTTP 프로토콜이다.
(HTTP 프로토콜은 웹상에서 불특정 다수와 통신이 가능하도록 설계된 프로토콜)
프로토콜 이란?
- 서로 간의 통신을 위한 약속, 규칙
- 주고 받을 데이터에 대한 형식을 정의한 것
HTTP(Hyper Text Transfer Protocol)
- 클라이언트-서버 모델
- 텍스트 기반의 프로토콜이라 단순하고 읽기 쉽다. (Human Readable)
- 상태를 유지하지 않는다. 즉 클라이언트의 정보를 저장 하지 않음 (stateless)
- 따라서 같은 클라이언트가 보낸 요청도 구분하는 것이 불가능
- 해결책: Cookie(클라이언트에 정보 저장)와 Session(서버에 정보 저장), JWT를 통해 보완 가능
- 비 연결성 서버가 클라이언트 요청에 대해 응답을 마치면 맺었던 연결을 끊어 버린다. (Connectionless)
- 해결책: Keep-Alive 헤더 속성 사용(단 성능 하락 주의)
- 커스텀 헤드를 추가 하여 확장이 가능하다.
- 포토 번호 80번을 사용한다.
- 트랜스포트 계층의 TCP 프로토콜을 사용한다. (신뢰성 있는 전송을 보장)
- 애플리케이션 계층의 프로토콜이다.
HTTP 종류
- HTTP/1.1, HTTP/2는 TCP 기반 위에서 동작
- HTTP/3는 UDP 기반 위에서 동작
HTTP 메시지
요청 메시지: 클라이언트가 URL을 입력시 해당 프로토콜을 사용하여 전송
- GET
- 리소스를 얻는 것이 목적 Read 하는 방식
- 바디 정보 없음, 헤더 정보만 존재
- 대신 querystring으로 추가 데이터를 보내는 것이 가능
- 서버에서 리소스를 얻어 올 때 사용
- 소용량 데이터 전달
- 보안에 취약
- 데이터 공유에 유리
- POST
- 리소스를 Write 하는 방식
- 바디 정보 있음
- 서버에 전송할 데이터 존재
- 서버에 정보를 제공해야 할 때 사용
- 바디 정보를 통해 대용량 데이터 전달 (제한 x)
- TLS 암호화 프로토콜 (구 SSL)을 같이 사용할 경우 보안에 유리
- 데이터 공유에는 불리
응답 메시지: 서버가 클라이언트의 요청에 응답 하여 전송하는 메시지
- 상태 코드:
- 1xx Information: HTTP 1.1 때 추가됨 (정보 교환)
- 2xx Success: 접속 성공
- 3xx Redirect: 다른 URL로 요청해라
- 4xx Client Error: 클라이언트가 요청을 잘못 한 경우 ex 404 not Found
- 5xx Server Error: 서버가 클라이언트 요청을 처리하는게 실패 한 경우
+HTTP 에서 Java를 직접적으로 사용이 불가능
- 웹에서 자바를 처리하기 위해서 Tomcat 등장
'Development > Spring' 카테고리의 다른 글
Spring의 4개의 저장소 (0) | 2023.01.19 |
---|---|
HTTP 프로토콜의 바이너리 파일 전송 (0) | 2023.01.08 |
클라이언트와 서버 (0) | 2023.01.05 |
Spring 원격 프로그램과 데이터 주고(request) 받기 (response) (0) | 2023.01.04 |
Spring 원격 프로그램 실행 과정 (0) | 2023.01.04 |