22-09-30
계산기 프로그램 웹 어플리케이션으로 만들기
- Step1 사용자가 요청을 메인 Thread 로 처리하게 한다. (성능이 굉장히 안좋다.)
- Step2 요청이 들어올때마다 스레드를 새로 생성해서 처리하게 한다. (사용자가 많으면 서버가 다운될 수도 있다. // new Thread
- Step3 Thread Pool 을 적용해 안정적인 서비스가 가능하게 한다. (생성할 스레드 갯수를 정해놓고 운용하게 하므로 성능이 가장 좋다.) //Executor Service
HTTP 프로토콜 이해
서버와 클라이언트가 웹에서 데이터를 주고받기 위한 프로토콜(규약)
HTTP/1.1. HTTP/2 는 TCP기반 위에서 동작 (Transmission Control Protocol)
HTTP/3 은 UDP 기반 위에서 동작 (User Datagram Protocol)
HTTP 요청 /응답 메시지 구조
클라이언트 클라이언트
Request Line, Header, Blank Line, Body →
← Request Line, Header, Blank Line, Body
HTTP 특징
클라이언트 - 서버 모델
무상태 프로토콜 (Stateless)
- Multiple Connection - 서버와 클라이언트의 연결을 계속 유지하지 않는다. (TCP) 3Way Handshake
- Persistent Connection - Keep Alive 속성 (특정 시간동안 연결을 계속 유지하면서 데이터를 주고받게 한다.) → 잘못 사용하면 성능 하락의 주범이 된다. (요청이 많아지면 유지되는 커넥션이 많아져 신규 사용자를 못받을 수도 있다.)
비연결성 (ConnectionlesS)
- 서버가 클라이언트 요청에 대해 응답을 마치면 연결을 끊어버림
- 해결책 : 쿠키(클라이언트에 정보 저장), 세션 (서버에 정보 저장) ,JWT
왜 HTTP라는 프로토콜은 스테이트리스와 커넥션리스 특징을 가지게 설계되었을까?
HTTP : 웹상에서 기본적으로 불특정다수와 통신하도록 설계된 프로토콜
계속 연결을 유지한다면 리소스 낭비가 심해질것
HTTP 요청 메소드
GET / POST / PUT / DELETE 등
HTTP 응답 코드
2xx(성공) , 3xx(리다이렉션), 4xx(클라이언트 에러), 5xx(서버 에러)
HTTP 헤더
Content-Type , Accept, Cookie, Set-Cookie, Authorization 등