BugDIARY

[Spring Boot] 스프링 웹 개발 기초 방식 3가지 본문

IT/Java

[Spring Boot] 스프링 웹 개발 기초 방식 3가지

HEMON 2023. 5. 28. 17:07

 

이 글은 나중에 프로젝트를 생성할 경우 참고하기 위한 글입니다.
또한 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 학습한 내용입니다.

 

 

스프링 웹 개발 시 가장 기초적인 방식 3가지
1. 정적 컨텐츠 방식
2. MVC 템플릿 엔진 방식
3. API 방식

 

1. 정적 컨텐츠 방식

요청 시 .html을 붙이면 컨트롤러를 거치지 않고 viewResolver를 통해 html파일을 찾아 변환하여 화면에 표시해준다.

(예시) http://localhost:8080/static-hello.html -> Controller에 Mapping이 존재하지 않아도 viewResolver가 알아서 resource/static폴더 내의 static-hello.html을 찾아서 변환해준다.

static-hello.html파일

 

http://localhost:8080/static-hello.html를 입력할 경우

만약 Controller에다가 getMapping으로 [static-hello]를 입력한 뒤 http://localhost:8080/static-hello를 요청할 경우 이미 MVC방식으로 요청하는 것이기 때문에 정적 컨텐츠 방식이 아니게 된다. 

 

2. MVC 템플릿 엔진 방식 

웹에서 request를 하면 Controller는 요청한 내용에 맞는 Mapping이 있는지 찾는다.

찾았다면 해당 Mapping의 메소드 내용을 실행시킨 후 return한다. 이때 return값으로 해당 데이터를 보내고 싶은 html파일의 파일명을 입력한다.

(예시)

- 웹에서 http://localhost:8080/hello-mvc를 입력

- 내장 톰캣이 컨트롤러 내에 Mapping된 hello-mvc를 찾음

helloMvc메소드를 실행하여 흐름대로 처리한 후 return으로 처리 내용을 전달할 html파일의 이름을 작성

return "hello-template"이기 때문에 templates내의 hello-templae가 화면에 표시된다.

(잘못된 예시)

http://localhost:8080/hello-mvc로 요청은 했으나 return값이 잘못되는 경우

아래와 같은 화면이 뜨며 hello-mvc를 찾을 수 없다는 에러 화면이 나타나게 된다.

 

3. API방식

@ResponseBody를 사용한다

 

@ResponseBody의 사용원리

1. 웹 브라우저에서 request를 던진다.

2. 내장 톰캣 서버가 hello-api가 전달된 것을 확인 후 스프링 컨테이너에서 찾는다.

3. 스프링 컨테이너 내부에 hello-api가 존재하는데 @ResponseBody어노테이션이 붙어 있다.

4. 만약 안붙어 있다면 viewResolver에게 던져주는데 HttpMessageConverter

5. 문자인 경우 그 문자 그대로 화면에 주는데 객체가 오는 경우 기본적으로 json방식으로 데이터를 만들어 http응답에 반환해준다.

6. ResponseBody어노테이션이 있을 경우 HttpMessageConverter가 동작을 하며 없을 경우 ViewReslover가 동작을 한다.

 

@ResponseBody를 사용할 경우
- HTTP의 BODY부분에 문자 내용을 직접 변환해준다.
- 'viewResolver'대신에 'HttpMessageConverter'가 동작하는데 기본 문자일 경우 [StringHttpMessageConverter], 기본 객체일 경우 [MappingJackson2HttpMessageConverter]가 동작을 하게 된다.

 

Comments