URI(Uniform Resource Identifier)
URI에는 크게 URL(Locator) 과 URN(Name) 두가지가 있다.
굳이 따지자면 URI는 인터페이스, URL과 URN은 구현체 같은 느낌?
이름에서 알 수 있듯이 URL은 경로, 위치로 식별하고
URN은 이름으로 식별한다.
URN은 현재 잘 사용되지 않으며 URL이 압도적으로 비율이 많다
URL 특징
- 포트 번호는 생략가능하다. 알아서 붙여주며 만약 명시하면 해당 PORT로 접속
- 쿼리 스트링은 모두 문자로 처리된다(/search?q=hello&hl=ko) 숫자도 문자로 처리 됨
HTTP(HyperText Transfer Protocol)
현재는 Text뿐만 아니라 영상, 이미지 모든 정보를 전송하고 있다
HTTP 통신 흐름
- 웹 브라우저가 HTTP 메세지를 생성한다
- Socket 라이브러리가 TCP 연결을 위한 정보를 생성한다
- OS가 TCP / IP 패킷을 생성하고 HTTP 메세지를 포함시킨다
4. Server는 HTTP 응답 메세지(html이나 json, xml등)를 반환한다
HTTP 특징
- Client - Server 구조 : Req <-> Res 구조
- Stateless 지향, 비연결성 지향
- HTTP 메세지
- 단순함, 확장 쉬움
Stateless 구조를 지향한다
Server가 Client의 상태를 보존하지 않는다.
바로 바로 들어온 요청에 맞는 처리만 해주게 된다. 이렇게 되면 어떤점에서 유리할까?
- Server단의 로직이 간단해진다
- 오직 들어온 요청에만 집중하면 되므로(Client의 상태를 신경 쓰지 않으므로) Server내의 어떠한 프로세스가 일을 도맡아 해도 문제 되지 않는다 => Server 자원의 수평적 확장이 매우 쉽다(단순히 Server Resource만 늘리면 됨) 이를 ScaleOut이라고 칭한다, 로드 밸런싱에 적합
단점은 Client가 현재 자신의 State를 설명하는 데이터를 추가적으로 싣어서 보내줘야 한다.(Server는 현재 Client가 어떤 상태인지 모르므로)
정리하자면 Stateful은 Server가 이전에 Client가 보냈던 데이터나 요청을 기억해서 현재 요청을 처리하는 로직에 반영하는것이고, Stateless는 현재의 요청만 바라보고 로직을 처리하는것이다.
Stateless의 한계
로그인은 어떻게 할까 그럼?
Stateless만으로 설계하기에는 쉽지 않을것임 따라서 브라우저의 쿠키와 Server의 세션을 조합하여 Stateful하게 설계한다
Stateful하게 설계하는것은 최소한만 사용해야 함
비연결성 지향
HTTP는 기본적으로 연결을 유지하지 않는 모델
예를들어 Client와 1시간동안 연결을 유지한다 했을때 정작 들어오는 요청은 별로 되지 않음(계속 버튼을 누르는것이 아니므로)
따라서 자원을 아끼기 위해 계속 연결을 유지하지 않고 요청이 끝나면 Server에서 연결을 끊는다
그렇다면, 매번 요청이 들어올때마다 3-way HandShake를 새로 맺어야 돼서 오버헤드가 증가할거 같은데...
=> 적절한 주기로 연결을 유지한다
=> HTTP 지속 연결 문제로 지금은 많이 개선이 되었다
출처 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com
'Back-End > HTTP 기본' 카테고리의 다른 글
[HTTP 기본] 4. HTTP 상태 코드와 HTTP 헤더 (0) | 2022.07.18 |
---|---|
[HTTP 기본] 3. API와 HTTP 메서드 (0) | 2022.07.17 |
[HTTP 기본] 1. 네트워크 통신 기초 (0) | 2022.07.17 |