[SpringBoot] 웹개발 3가지 방식과 동작원리

웹 개발 방식 3가지

웹을 개발하는것은 크게 3가지 방법이 있다. 첫번째로는 정적 컨텐츠가 있는데 이것은 정적 파일을 웹 브라우저에 그대로 내려주는 것이고, 두번째로는 MVC와 템플릿 엔진이 있는데  템플릿 엔진은 PHP, JSP 등 html을 서버에서 처리를 한 후 웹 브라우저에 내려주는 것이다. 그리고 API는 html을 내려주는 것이 아니라 json, xml 형식의 데이터 구조 포맷을 클라이언트 에게 내려주고 화면은 클라이언트 에서 그린다. 대표적으로 React, Vue 가 있다. 그리고 서버끼리 통신할때 데이터만 주고 받으면 되니 API 방식을 사용한다.

 

 

1. 정적 컨텐츠

https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content

간략하게 돌아가는 원리는 localhost:8080/hello-static-html을 url에 치면 내장 톰캣서버에서 먼저 스프링 컨테이너에서 hello-static 관련 컨트롤러가 있는지 확인하고 없으면 resources 아래에 있는 /static/hello-static.html을 찾는다. (API문서를 보면 /static말고도 /public, /resources, /META-INF/resources 도 포함된다) 찾아서 있으면 반환한다.

 

 

2. MVC와 템플릿 엔진

템플릿 엔진으로 타임리프를 썼는데 타임리프의 장점은 html 서버없이 그냥 열어봐도 소스 그대로 볼수있다. 작동원리로 url을 넘기면 내장톰캣 서버를 거치고 컨테이너에서 "hello-mvc" 컨트롤러가 있는지 확인 후 메서드 호출이 되고 모델(name:"파라미터값")과 "hello-template"를 return 한다. 그리고 그걸 Spring에게 넘겨주고 viewResolver(뷰를 찾아주고 템플릿 엔진과 연결)에서 hello-template와 동일한 html을 찾아서 Thymeleaf한테 처리해달라고 하고 html로 변환후 넘긴다.

 

 

3. API

아래 메서드가 2개 있는데 첫번째는 문자열 그대로를 반환하는 것이고, 2번째는 JSON방식으로 반환하는 것이다. 그 이유는 @ResponseBody 때문인데 문자열은 그대로 return 하지만 객체는 기본적으로 JSON방식으로 return 한다.

hello-api 컨트롤러가 있는지 확인하였는데 @ResponseBody가 있으면 HttpMessageConverter가 동작하는데 단순 문자열이면 StringConverter가 동작하고 객체면은 JsonConverter가 동작한다.

 

 

참고 : https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard

댓글

Designed by JB FACTORY