
식당 비유 - 주문 이후 손님에게 전달될 때까지 상황 생각해보기 : 식당에 가면 손님 -> 점원 -> 주방 이렇게 주문이 전달되고, 나올 때는 주방 -> 점원 -> 손님 순으로 전달된다. 그림으로 정리하면 다음과 같다. API는 클라이언트의 요청을 서버에 잘 전달하고, 서버의 결과물을 클라이언트에게 잘 돌려주는 역할을 한다. # REST API REST REST는 Representational State Transfer 풀어서 말하면 자원을 이름으로 구분해 자원의 상태를 주고받는 API 방식. # REST API 의 특징 / 장단점 1. 특징 - 서버/클라이언트 구조,무상태,캐시 처리 가능,계층화,인터페이스 일관성 2. 장단점 장점 - REST API의 장점은 URL만 보고도 무슨 행동을 하는 API인지..

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 적용..

RequestParamController 中 requestparamV2 /** * @RequestParam 사용 * - 파라미터 이름으로 바인딩 * @ResponseBody 추가 * - View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력 */ // @RequestParam 어노테이션을 사용하여 파라미터를 바로 메서드 매개변수로 받는 방법. @ResponseBody // 메서드의 반환 값이 HTTP 응답 본문에 직접 쓰여야 함을 나타냄. @RequestMapping("/request-param-v2") public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") in..

HTTP 요청 데이터 조회 - 개요. 서블릿에서 학습했던 것을 떠올리면서 이걸 스프링이 얼마나 깔끔하고 효율적으로 바꿔주는지 생각해보면 된다. HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 3가지 방법 요청 파라미터 - 쿼리 파라미터, HTML Form HttpServletRequest 의 request.getParameter() 를 사용하면 다음 두가지 요청 파라미터를 조회할 수 있다. 이제 하나씩 알아보자. 먼저 RequestParamController @Slf4j // Lombok을 사용하여 로깅을 위한 Logger를 자동으로 생성. @Controller . public class RequestParamController { // HttpServletRequest와 HttpSe..