정적 컨텐츠
정적 컨텐츠는 말 그대로 아무런 가공없이 파일을 그대로 보여주기 때문에 정적이라고 표현한다. 스프링 공식 문서에서 /static
경로에서부터 정적 컨텐츠를 찾는다고 기재되어있다.
웹 브라우저가 특정 URL로 요청을 보내면, 스프링 부트의 내장 톰캣 서버는 스프링 컨트롤러 쪽에 맵핑된 컨트롤러가 있는지 우선적으로 찾는다. (컨트롤러가 우선 순위를 갖는다.) 만약 없다면, 내부에 있는 리소스 중 정적 컨텐츠를 찾아 그대로 반환해준다.
MVC와 템플릿 엔진
JSP, PHP 등도 템플릿 엔진이며, html을 동적으로 바꿔준다. 이전에는 이런 JSP를 사용하여 뷰에 비즈니스 로직과 db 접근 등 모든 걸 집어넣으려고 했다. (모델1 방식)
하지만 MVC 패턴에서 뷰는 화면을 그리는데 집중하고, 컨트롤러 등 모델과 관련된 부분은 비즈니스 로직이나 내부적인 처리를 하는데 집중한다.
특정 URL을 통해 파라미터를 전달받을 때에는 @RequestParam 어노테이션을 사용하며, required 옵션이 true이면 파라미터를 받지 않았을 때 오류가 발생한다. (기본적으로 true이기 때문에 개발시 주의해야한다.)
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name", name);
return "hello_template"; //뷰 네임을 리턴한다
}
API
정해진 포맷(ex. json)으로 클라이언트에게 데이터 전달하는 방식을 말한다. html 형식으로 화면을 만들어주는 것이 아니라 정해진 형식으로 데이터만 전달하면, 화면은 클라이언트가 알아서 정리하는 방식을 많이 사용한다. 웹 이외에도 안드로이드나 iOS의 앱으로 보낼 수 도 있고, Vue, React 등을 사용하기도 한다. 서버끼리 통신할 때에도 API통신을 통해 데이터만 서로 전달하면 된다.
@ResponseBody
HTTP 통신 프로토콜이 header, body로 구분되어있는데, 함수 위에 이 어노테이션을 달면 응답 바디부에 데이터를 직접 넣어주겠다는 의미이다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name; //문자 그대로 내려가며, 뷰와 관련 없음
}
물론 이렇게 데이터 하나만 직접 내리는 방식은 실무에서 별로 사용하지 않고, 객체에 담아서 전달해야한다. 요즘은 주로 json 형태로 클라이언트에게 전달된다. @ResponseBody 어노테이션을 사용하면 json으로 반환하는 것이 디폴트로 세팅되어있다.
@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;
}
}
특정 요청이 들어오면 톰캣은 스프링에게 전달하고, 스프링은 맵핑된 컨트롤러가 있는지 찾는다. 이전에 공부했을 때에는 @ResponseBody 어노테이션이 없고, 뷰 네임을 리턴하여 ViewResolver가 맞는 화면을 찾아주었지만 @ResponseBody 어노테이션이 있을때에는 HttpMessageConverter가 대신 동작하게 된다.
단순 문자일때는 StringConverter, 객체는 JsonConverter가 기본으로 동작하여 변환 처리한다.
스프링에서 기본 문자 처리 라이브러리는 StringHttpMessageConverter, 기본 객체 처리 라이브러리는 MappingJackson2HttpMessageConverter로 세팅되어있다.
이 포스팅은 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 수강하며 작성되었습니다.
[지금 무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세
www.inflearn.com
'Spring Framework' 카테고리의 다른 글
[스프링 입문] 스프링 빈과 의존관계 (0) | 2024.01.22 |
---|---|
[스프링 입문] 회원 관리 백엔드 개발 (0) | 2024.01.21 |
[스프링 입문] 강의 소개 및 프로젝트 환경 설정 (0) | 2024.01.17 |
[예제로 배우는 스프링 입문] 스프링 PSA (0) | 2023.12.17 |
[예제로 배우는 스프링 입문] 스프링 AOP (0) | 2023.12.16 |