본문 바로가기
spring

HTTP 웹 기본지식 - 1

by 오우지 2022. 2. 4.

IP

IP 패킷을 이용해서 데이터를 전송한다.

패킷에는 출발 IP와 목적 IP가 적혀 있다.

 

하지만 IP 프로토콜 만으로는 한계가 있다.

1. 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

2. 비신뢰성: 패킷의 손실이나 일정하지 않은 패킷 전달 순서의 문제

3. 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러개일 때

 

따라서 IP를 보완하기 위한 TCP, UDP가 존재한다.

TCP에는 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등이 포함돼 있다.

 

 

 

TCP(Transmission Control Protocol)

1. 연결지향- TCP 3 way handshake

 

ACK가 없으면 메시지를 보내지 않는다.

또한, 3번 ACK와 함께 메시지를 전달한다.

 

 

 

 

 

 

 

 

2. 데이터 전달 보증

 

 

 

 

 

 

 

 

 

 

3. 순서 보장

 

 

 

 

 

 

 

 

 

 

 

 

UDP(User Datagram Protocol)

1. 기능이 없지만 단순하고 빠른 통시규약

2. IP + PORT + 체크섬 정도의 기능

3. 애플리케이션에서 추가 작업 필요(커스텀 가능)

 

 

PORT

같은 IP 내에서 프로세스 구분을 위한 번호

0~65535 할당 가능

0~1023: 잘 알려진 포트, 사용하지 않는 것이 좋다.

 

DNS(Domain Name System)

IP는 기억하기 어렵고 변경될 수 있다.

도메인 명을 IP 주소로 변환

 

URI

URI(Uniform Resource Identifier)

- Uniform: 리소스를 식별하는 통일된 방식

- Resource: 자원, URI로 식별할 수 있는 모든 것

- Identifier: 다른 항목과 구분하는데 필요한 정보

위치는 변할 수 있지만 이름은 변하지 않는다.

이름으로 찾는 것이 좋을 것 같지만 이름만으로 리소스를 찾을 수 있는 보편화된 방법이 없다.

따라서, URI는 URL이라고 생각하면 된다.

 

 

scheme: 주로 프로토콜을 적는다(http, https, ftp 등등)

userinfo: 사용자 정보를 적는 공간으로 잘 사용하지 않는다.

host: 호스트 명으로 도메인이나 IP주소를 적는다.

port: 접속포트로 일반적으로 생략한다. 80, 443등을 사용한다.

path: 리소스 경로로 계층적 구조를 가진다.

query: key-value 형태로 query parameter, query string 등으로 불린다.

fragment: 서버로 전송되지 않고 html 내부 북마크 등의 용도로 사용된다.

 

네트워크 요청 흐름

1. 구글에 검색을 하면 HTTP 요청 메시지가 만들어진다.

2. SOCKET 라이브러리에서 3way handshake를 요청한 후 TCP/IP 패킷을 씌워서 인터넷 상으로 날아간다.

3. 요청 패킷이 전달되면 HTTP 응답 메시지를 생성해 응답한다.

 

 

 

HTTP(Hyper Text Transfer Protocol)

거의 모든 데이터를 주고받을 때 HTTP를 사용한다.

 

HTTP/0.9: GET 메서드만 지원, HTTP 헤더 X

HTTP/1.0: 메서드, 헤더 추가

HTTP/1.1: 가장 많이 사용, 우리에게 가장 중요한 버전

HTTP/2: 성능 개선

HTTP/3: 진행중

 

TCP: HTTP/1.1, HTTP/2

UDP: HTTP/3

현재 주로 HTTP/1.1을 사용하지만 나머지도 증가하고 있다.

 

HTTP 특징:

1. 클라이언트-서버 구조

클라이언트는 서버에 요청을 보내고 응답을 대기

서버가 요청에 대한 결과를 만들어서 응답

 

2. 무상태 프로토콜

서버가 클라이언트의 상태 보존 X

장점: 서버 확장성 높다.

단점: 클라이언트가 추가 데이터 전송

 

Stateful: 중간에 다른 점원으로 바뀌면 안된다.

Stateless: 중간에 다른 점원으로 바뀌어도 된다 -> 무한한 서버 증설 가능

 

쿠키와 세션을 이용한 로그인 과정에서는 Stateless하게 설계하기 어렵다. 아무튼 Stateful은 최소한으로 설계해야 한다.

 

3. 비연결성

HTTP는 기본이 연결을 유지하지 않는 모델

장점: 수 많은 사람이 사용해도 동시에 처리하는 요청은 매우 적기 때문에 서버 자원을 효율적으로 사용할 수 있다.

단점: TCP/IP 연결을 새로 맺어야 한다.(3 way handshake 시간 추가)

         수 많은 자원이 함께 다운로드 된다.

         지금은 HTTP 지속 연결로 문제 해결

 

4. HTTP 메시지

시작 라인은 request-line과 status-line으로 나뉘어진다.

 

요청 메시지

request-line = method SP request-target SP HTTP-version CRLF

 

응답 메시지

status-line = HTTP-version SP status-code SP reason-phrase CRLF

 

HTTP 버전

HTTP 상태 코드: 요청 성공, 실패를 나타냄

 

HTTP 헤더

header-field = field-name: (띄어쓰기 허용)field-value(띄어쓰기 허용)

용도: HTTP 전송에 필요한 모든 부가정보, 표준 헤더가 너무 많다, 필요시 임의의 헤더 추가 가능

 

HTTP 메시지 바디

실제 전송할 데이터, byte로 표현할 수 있는 모든 정보

'spring' 카테고리의 다른 글

HTTP 웹 기본지식 - 2  (0) 2022.02.12
MVC-2 message, validation  (0) 2022.02.11
스프링 기본편 복습 - 2  (0) 2022.01.28
스프링 기본편 복습 - 1  (0) 2022.01.23
JPA @Embedded, @Lob, 생성자  (0) 2022.01.15