
프로젝트 기본 세팅 build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.15' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-bo..

요청 매핑 핸들러 구조 - HTTP 메시지 컨버터는 스프링 MVC 어디쯤에서 사용되는 것일까? 이 구조에서는 없다. SpringMVC 구조 모든 비밀은 애노테이션 기반의 컨트롤러, 그러니까 @RequestMapping 을 처리하는 핸들러 어댑터인 RequestMappingHandlerAdapter (요청 매핑 헨들러 어뎁터)에 있다. RequestMappingHandlerAdapter 동작 방식 ArgumentResolver 생각해보면, 애노테이션 기반의 컨트롤러는 매우 다양한 파라미터를 사용할 수 있었다. HttpServletRequest, Model 은 물론이고, @RequestParam, @ModelAttribute 같은 애노테이션 그리고 @RequestBody, HttpEntity 같은 HTTP ..

HTTP 메시지 컨버터 HTTP 메시지 컨버터뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다. @ResponseBody 사용 원리 [그림] 다시 돌아가서 HTTP 메시지 컨버터 인터페이스 /** * HTTP 요청 및 응답 메시지를 변환하는 데 사용되는 인터페이스입니다. * 이 인터페이스를 구현하는 클래스는 HTTP 요청 메시지를 Java 객체로 변환하거나, * Java 객체를 HTTP 응답 메시지로 변환하는 작업을 수행할 수 있습니다. * * @param 변환할 객체의 타입을 나타내는 제네릭 타입 매개변수 */ public interface HttpMessageConv..

HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. ResponseBodyController @Slf4j @Controller public class ResponseBodyController { // "/response-body-string-v1" 경로로 GET 요청이 들어올 때, // "ok" 문자열을 직접 HTTP 응답 바디에 쓰는 메서드. @GetMapping("/response-body-string-v1") public void responseBodyV1(HttpServletResponse response) throws IOException..

HTTP 응답 - 정적 리소스, 뷰 템플릿 스프링(서버)에서 응답 데이터를 만드는 방법은 크게 3가지이다 정적 리소스 예) 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적 리소스를 사용한다. 뷰 템플릿 사용 예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다. HTTP 메시지 사용 HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다. /static , /public , /resources , /META-INF/resources src/main/resources 는 리소스를 보관하는 곳 이고, 또 클..

HTTP 요청 메시지 - JSON 이번에는 HTTP API에서 주로 사용하는 JSON 데이터 형식을 조회하기 V1 - 기존 서블릿에서 사용했던 방식 RequestBodyJsonController @Slf4j @Controller public class RequestBodyJsonController { // ObjectMapper 객체를 생성. // ObjectMapper는 JSON 데이터를 자바 객체로 변환하거나 자바 객체를 JSON으로 직렬화하는 데 사용. private ObjectMapper objectMapper = new ObjectMapper(); @PostMapping("/request-body-json-v1") public void requestBodyJsonV1(HttpServletRequ..

서블릿에서 학습한 내용 요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우는 @RequestParam , @ModelAttribute 를 사용할 수 없다. (물론 HTML Form 형식으로 전달되는 경우는 요청 파라미터로 인정된다.) 먼저 가장 단순한 텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고, 읽어보자. HTTP 메시지 바디의 데이터를 InputStream 을 사용해서 직접 읽을 수 있다. RequestBodyStringController @Slf4j @Controller public class RequestBodyStringController { @PostMapping("/request-body-string-v1") public void requestBody..

HTTP 요청 파라미터 - @ModelAttribute 실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다. 보통 다음과 같이 코드 작성 일단 HelloData 생성 HelloData - 요청 파라미터를 바인딩 받을 객체 @RequestParam String username; @RequestParam int age; HelloData data = new HelloData(); data.setUsername(username); data.setAge(age); @Data @Getter , @Setter , @ToString , @EqualsAndHashCode , @RequiredArgsConstructor 를 자동으로 적용해준다. @ModelAttribute 적용..