🌎 클라이언트 서버 구조
클라이언트 요청-> 서버
서버 응답-> 클라이언트
- 서버와 클라이언트를 분리하는게 중요
- 비즈니스 로직,데이터(서버)
- UI(클라이언트)
- 각각 독립적으로 진화
🌎 무상태 프로토콜(Stateless)
- 서버가 클라이언트의 상태를 보존X
- 장점: 서버 확장성 높음
- 단점: 클라이언트가 추가 데이터 전송





- 상태 유지: 중간에 다른 점원으로 바뀌면 안된다.
(중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.)
- 무상태: 중간에 다른 점원으로 바뀌어도 된다.(갑자기 고객이 증가해도 점원을 대거 투입할 수 있다. 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.)
- 무상태는 응답 서버를 쉽게 바꿀 수 있다.(무한한 서버 증설 가능)
Stateful
- 클라이언트A가 서버1에 요청을하면 서버1은 상태를 보관하고 응답을한다. 이때 서버가 중간에 장애가 나면 재시작을 해야한다.
Stateless
- 클라이언트A가 서버1에 요청을하면 서버1은 상태를 보관하지 않는다. 이때 서버가 중간에 장애가 나면 중계서버거 다른 서버에 요청을 해 서버2가 응답을 보낸다.
Stateless 한계
- 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
- 무상태 ex) 로그인이 필요없는 단순한 서비스 소개 화면
- 상태 유지 ex) 로그인
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
- 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
- 상태 유지는 최소한만 사용
머리를 쥐어짜서라도 무상태로 만들어야 함
🌎 비연결성
연결 유지
- 다른 클라이언트들과 연결할때 연결했던 클라이언트들과의 연결을 유지하며 서버의 자원을 소모
연결 유지 X
HTTP는 기본적으로 연결을 유지하지 않는다.
- 빠른 속도로 응답
- 서버자원 효율
- 단점: TCP/IP를 새로 연결하여 3 way- handshake 시간이 증가


🌎 HTTP 메시지
HTTP 메시지에 모든것을 전송한다.

시작라인(요청 메시지)
- start-line = request-line / status-line
- request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
- method종류: GET,POST,PUT,DELETE(서버가 수행해야 할 동작)
- 절대경로로 요청 대상을 지정
- HTTP Version
시작라인(응답 메시지)
- HTTP 상태 코드(요청 성공,실패를 나타냄)
- 200: 성공
- 400: 클라이언트 요청 오류
- 500: 서버 내부 오류
헤더
- header-field = field-name ":" OWS(띄어쓰기 허용) field-value OWS

- HTTP 전송에 필요한 모든 부가정보
- 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,서버 애플리케이션 정보, 캐시 관리 정보 등등
바디

단순함 확장 가능
*참고: 사진은 김영한님의 강의자료를 참고하였습니다
좋은 글 감사합니다.