HTTP 웹 기본 지식 - ~ 섹션5. HTTP 메서드 활용
CS/김영한 스프링 강의

HTTP 웹 기본 지식 - ~ 섹션5. HTTP 메서드 활용

 

인터넷의 거의 대부분이 HTTP/1.1버전. 이후는 성능개선이라.

 

HTTP/3가 UDP로 넘어간 이유는 TCP는 handshake같은것도 해서 그런것조차 성능 개선으로 업애려고 UDP가 뜨고 있다고 한다. 사실 거의 HTTP만 쓰니 이런 사실들은 몰라도 된다.

 

 

HTTP도 stateful과 stateless로 만들 수 있는데, stateless로 하는것이 서버상 큰 이점이니 어떻게 해서든 stateful로 만들 생각을 해야 한다. 단점은 서버가 기억을 못하다보니 클라이언트에서 쿠키로 저장하든 한번에 필요한 정보들을 바리바리 싸고 가야 한다는 것.

 

그래서 무상태가 되면 자연스레 서버를 쉽게 수평 확장할 수 있다는 장점이 생긴다.

 

요청을 올때마다 다시 연결하고 끊고 하다보니 handshake 고정 손실이 있었는데, 한번에 응답해줌으로써(Persistent Connections) 극복했다.

 

 

거의 모든 것들 json이나 txt, html, 이미지, byte, 영상, 파일들을 모두 HTTP로 전송 가능하다.

 

 

더 자세한건 강의 ppt를 보자.

 

 

다음은 GET, POST, PUT, PATCH등의 HTTP 메서드들을 소개해주는데, 내가 기존에 알고 있던것과 같음.

클라이언트가 요청용 해더를 보내면 서버가 요청을 받아 처리하고 자기도 나름 헤더를 첨부해서 같이 보낸다. 요청 받은 헤더를 기준으로 바디를 해석한다.

POST도 GET처럼 조회할때 사용할 수 있지만 굳이 그렇게 하지는 않는다. 왜? 이미 세계적으로 조회할 땐 GET을 쓰자고 해서 캐싱 등등이 GET기준으로 만들어져서 최적화의 이점을 못 살릴 수 있음.

메서드의 속성으로 안전, 멱등, 캐시기능이 있다.

 

안전은 몇 번을 조회하든 해당 리소스가 변하지 않는가? 안변하면 안전한거임.

 

멱등은 f(f(x)) = f(x)인데, 몇번을 하든 같은 결과가 나오는가 판단하는 것. GET, PUT, DELETE의 경우 보기만 한다고 안바뀌고(safe), put은 있다면 덮어씌고 없다면 생성해서 같고, delete도 없어도 없어졌다고 똑같이 뜬다. 다만 POST만이 2번 등록하면 이미 있는 멤버다, 중복가입이다 등 달라질 수 있다.

그럼 멱등은 언제 사용하는가? 자동 복구 메커니즘과 서버가 TIMEOUT이 나서 클라이언트가 막 클릭해서 같은 요청을 여러번 보내도 안전한가?의 판단 근거가 될수 있음(멱등 성질로 보장됩니다~~ 있어보인다.).

 

캐시가능은 응답 결과 리소스를 캐시해서 사용해도 되는가? 이론삭으론 GET, HEAD, POST, PATCH가 캐시 가능한데 POST, PATCH는 본문 내용까지 캐시 키로 고려해야 해서 쉽지 않아 GET, HEAD정도에서만 실제로 사용한다.

 

클라이언트에서 서버로 데이터를 전송할 때 4가지 상황이 있다고 한다.

정적 데이터 조회, 동적 데이터 조회, HTML Form을 통한 데이터 전송, HTTP API를 통한 데이터 전송

 

정적 데이터는 실제 파일 경로 입력하는거. ~~/hello.jpg 같은거.

동적 데이터는 주소창 뒤에 query 붙이는거. GET /search?q=hello&hl=ko

 

HTML Form은 html에서 form 형식으로 만든걸 보낼때인데, Content-Type으로 x-www-form-urlencoded라고 하고 body에는 query형식으로 데이터를 보내주는게 있고, multipart/form-data라고 간단한거 말고 정말 다양한 것들을 보내고 싶을 때 사용한다. body의 seperator도 브라우저가 알아서 해줌.

 

API형식은 기타 javascript를 통한 통신에 사용할 때(AJAX 같은거). xml등... Content-type은 주로 application/json이라고 함.

 

 

 

조심할 점은 PUT과 DELETE같은건 사용자가 실제 그 id값 같은 주소를 알고 있어야 한다. 하지만 POST는 주로 그런거 모르고 그냥 /members 등으로 리소스 값만 적어서 보낸다. 그렇기 때문에 POST는 서버가 관리하는 리소스 디렉토리인 컬렉션으로 보낸다 하고 PUT, PATCH, DELETE같은건 클라이언트가 관리하는 리소스 저장소인 스토어로 보낸다 한다.

 

HTML FORM은 GET, POST만 지원함. 그래서 수정, 삭제 같은 추가는 이름이 겹치므로 /members/id/update 같은 식으로 추가로 주소를 만들어서 정해줌. 이런걸 컨트롤러, 컨트롤 URI라고 함.