✏️ 웹브라우저에 url을 입력했을 때, 스프링 부트 동작 및 환경
< 1 >
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!"); //hello.html에서 {data}부분에 hello!!들어감
return "hello";
}
1. 웹브라우저에 localhost:8080/hello url을 입력한다.
2. 스프링부트는 '톰캣'이라는 웹서버를 내장하는데, 이 서버에서 url을 받아 스프링컨테이너에 보낸다.
3. 스프링컨테이너는 url의 hello와 @GetMapping("hello")를 보고 매핑하여 해당 메서드(hello)를 실행한다.
4. 스프링이 model을 만들어서 매개변수 부분에 넣어준다.
5. 그 model에 addAttribute. (key는 data 값은 "hello!!")
6. return "hello" : hello.html을 찾아서 위에 실행한 것들을 렌더링한다. (viewResolver가 hello 화면을 찾아서 처리해줌)
< 2 >
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello" + name;
}
💡 @ResponseBody : http의 header, body 중 body 부분에 직접 내용을 넣어서 전달하게 해줌.
1. localhost:8080/hello-string?name=spring url 입력
2. 이 메서드 부분은 html없이 hello spring 그대로 출력된다. (페이지 소스보기 해도 html없이 hello spring 뜸)
< 3 >
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
💡 url 입력하면 json( {키:값}) 형태로 확인해볼수있다.
1. url 입력받는다.
2. 컨테이너에서 hello-api 찾는다.
3. 찾았는데 메서드에 @ResponseBody가 있다.
4. <2>번 예시에서(helloString) return이 문자면 문자 그대로 http에 던짐.
helloApi에서는 객체를 반환한다. (return hello)
5. 객체가 오면 기본적으로 json 방식으로 데이터를 만들어서 http응답에 반환하는것이 기본 정책. 따라서 json방식으로 응답한다.
* 기존에 @ResponseBody가 없을때는(<1>번예시) viewResolver가 동작하지만 @ResponseBody가 존재하면 HttpMessageConverter가 동작된다.
6. 단순 문자라면? StringConverter : StringHttpMessageConverter 동작
객체라면? JsonConverter : MappingJackson2HttpMessageConverter 동작
(💡 jackson이란 객체를 json으로 바꿔주는 라이브러리. 스프링은 jackson을 기본으로 탑재한다.)
해당 Converter에 의해서 객체가 json으로 변환된다.
'Spring' 카테고리의 다른 글
[Spring AOP] @Cacheable 캐싱 적용 안 될 때 해결법 (Redis 캐시 확인) (3) | 2024.09.08 |
---|---|
[JPA] Spring Data JPA - Entity에 기본 생성자가 필요한 이유? (0) | 2024.02.18 |
[JPA] JPA 쿼리 생성 (쿼리 메소드, JPQL, QueryDSL) (1) | 2023.12.23 |
[Springboot, JPA] Springboot, JPA를 활용한 프로젝트 단계 - 참고 (0) | 2023.12.23 |