전체 글 563

요청 매핑 헨들러 어뎁터 구조

HTTP 메시지 컨버터는 스프링 MVC 어느 부분에서 사용이 되는지 궁금할 수 잇다. @RequestMapping을 처리하는 핸들러 어댑터인 RequestMappingHandlerAdapter(요청 매핑 핸들러 어뎁터에 있다.) ArgumentResolver HttpServletRequest, Model @RequestParam, @ModelAttribute 같은 애노테이션 @RequestBody, HttpEntity 같은 HTTP 메시지를 처리하는 부분까지 큰 유연함을 보여주었다. ArgumentResolver 덕택에 파라미터를 유연하게 처리할 수 있었다. RequestMappingHandlerAdaptor는 ArgumentResolver를 호출해서 컨트롤러(핸들러)기 필요로 하는 여러 파라미터의 값을..

Spring/SpringMVC 2022.05.01

HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 & HTTP 메시지 컨버터

HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 한다. HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. HTML이나 뷰 템플릿 사용해도 HTTP 응답 메시지 바디에 HTML 데이터가 담겨서 전달됨. 정적 리소스나 뷰 템플릿 거치지 않고, 직접 HTTP 응답 메시지를 전달하는 경우를 말함 // ResponseBodyController Class package hello.springmvc.basic.response; import hello.springmvc.basic.HelloData; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframe..

Spring/SpringMVC 2022.05.01

HTTP 요청 메시지 - JSON & HTTP 응답 - 정적 리소스, 뷰 템플릿

HTTP API에서 주로 사용하는 JSON 데이터 형식을 알아보자. JSON 형식을 다루므로 ObjectMapper을 쓰자. 실행을 시켜주면 // RequestBodyJsonController Class package hello.springmvc.basic.request; import com.fasterxml.jackson.databind.ObjectMapper; import hello.springmvc.basic.HelloData; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.util.StreamUtils; import org.springframewo..

Spring/SpringMVC 2022.05.01

캐시와 조건부 요청 헤더 & 프록시 캐시와 캐시 무효화

캐시 제어 헤더 Cache - Control: 캐시 제어 Pragma: 캐시 제어(하위 호환) Expires: 캐시 유효 기간(하위 호환) Cache-Control 캐시 지시어(directives) Cache-Control: max-age 캐시 유효 시간, 초 단위 Cache-Control: no-cache 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용 Cache-Control: no store 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) Pragma 캐시 제어(하위 호환) Pragma: no-cache HTTP 1.0 하위 호환 Expires 캐시 만료일 지정(하위 호환) expires: Mon, 01 Jan 1990 00:00:00 ..

HTTP 2022.04.30

캐시 기본 동작 & 검증 헤더와 조건부 요청

웹 브라우저에서 start.jpg를 요청하면 서버에서 star.jpg라는 그림을 찾아준다. 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 브라우저 로딩 속도가 느리다. 느린 사용자 경험 60초 동안은 캐시가 유효하고 응답 결과를 캐시에 저장한다. 두번째 요청할 때는 캐시를 먼저 살핀다. 60초 안에 찾게되면 캐시에서 바로 가져오게 된다. 네트워크를 아예 탈 필요가 없게 된다. 캐시 적용 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 되고 비싼 네트워크 사용량을 줄일 수 있고 브라우저 로딩 속도가 매우 빠르다. 빠른 사용자 경혐 캐시 시간 초과 star.jpg를 다시 요청하고 60초가 초과되었다. 그러면 다시 웹브..

HTTP 2022.04.30

인증 & 쿠키

Authorization: 클라이언트 인증 정보를 서버에 전달 WWW-Authenticate: 리소스 접근시 필요한 인증 방법 정의 Authorization 클라이언트 인증 정보를 서버에 전달 Authorization: Basic xxxxxxxxxxxxxxxxxxxxx WWW-Authenticate 리소스 접근시 필요한 인증 방법 정의 리소스 접근시 필요한 인증 방법 정의 401 Unauthorizaed 응답과 함께 사용 WWW-Authenticate: Newauth realm="apps", type=1, title="Login to\"apps"\"",Basic realm="simple" 쿠키 매커니즘을 잘 이해하자. Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) Cookie: 클라이언트가..

HTTP 2022.04.30

전송 방식 & 정보(일반 정보 and 특별한 정보)

Transfer - Encoding Range, Content - Range 전송 방식 설명 단순 전송 압축 전송 분할 전송 범위 전송 단순 전송은 Content-Length를 알고 있을 때 전달 해준다. 압축 전송은 단순 전송에 있던 내용들을 gZip 같은 걸로 압축을 한다. (Content-Encoding의 종류를 나타내주어야 한다.) 용량이 큰 걸 분할 전송으로 보내면 오는데 바로바로 표현을 해 줄수가 있다. 바이트 정보들이 다 나와있기 때문에 분할해서 전송할 때에는 Content-Length를 나타내주면 안된다. 범위 전송 같은 경우에는 범위를 지정해서 전송해 줄수가 있다. 범위를 지정해서 보내어 줄 수 있다. 일반 정보 From: 유저 에이전트의 이메일 정보 Referer: 이전 웹 페이지 주소..

HTTP 2022.04.30

HTTP 헤더 개요 & 표현 및 컨텐츠 협상

HTTP 전송에 필요한 모든 부가정보 예) 메시지 바디에 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보... 표준 헤더가 너무 많다. 필요시 임의의 헤더 추가 가능 헤더 분류 General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..) Request 헤더: 응답 정보, 예) Server: Apache Entity 헤더: 엔티티 바디 정보, 예) Content-Type: text/htm, Content-Length: 3423 메시지 본문(message body)은 엔티티 본문(entity body)을 전달하는데 사용 엔티티 본..

HTTP 2022.04.30

HTTP 요청 파라미터 - @ModelAttribute & 단순 텍스트

스프링은 요청 파라미터를 받아서 필요한 객체를 만들어주고 객체에 값을 넣어주는 @ModelAttribute 기능을 제공한다. 요청 파라미터를 바인딩 받을 객체를 만들어 보면 // HelloData package hello.springmvc.basic; import lombok.Data; @Data public class HelloData { private String username; private int age; } 롬복 @Data @Getter , @Setter , @ToString , @EqualsAndHashCode , @RequiredArgsConstructor 를 자동으로 적용해준다. request 패키지의 RequestParamController에서 아래와 같이 지정해주고 돌려주면 로그가 ..

Spring/SpringMVC 2022.04.29

HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form & RequestParam

클라이언트에서 서버로 요청 데이터를 전달할 때 다음 3가지 방법을 사용한다. GET - 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 피이징등에서 많이 사용 POST - HTML Form content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20 예) 회원 가입, 상품 주문, HTML Form 사용 HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용, JSON, XML, TEXT 데이터 형식은 주로 JSON 사용 POST, PUT, PATCH 스프링으로 요..

Spring/SpringMVC 2022.04.29