。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

강의/Spring

[Spring 입문] 2. spring 웹 개발 기초

quarrrter 2023. 8. 8. 23:47

스프링 웹 개발 기초 

웹을 개발 한다는 것 : 크게 3가지 방식 

1. 정적 컨텐츠 : 서버에서 하는 것 없이 파일 그대로 웹브라우저에 내려주는 것

2. MVC와 템플릿 엔진: JSP, PHP(템플릿엔진, 서버에서 프로그래밍해서 HTML을 동적으로 변형하는 것)

-서버에서 HTML을 변형, // 템플릿 엔진을 모델뷰컨트롤러로 쪼개서, 뷰를 템플릿엔진으로 html을 좀더 프로그래밍 & 렌더링해서 클라이언트에 전달.

3. API : JSON이라는 데이터 구조 포맷으로 클라이언트에 데이터를 전달하는 방식, 뷰, 리액트 등을 쓸 때도 사용하는 방식임. 서버끼리 통신하는 방식 , 객체를 반환 하는 것. view 이런 거 없이 그냥 바로 ,, ! 

 

 

정적 컨텐츠

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

웹에서 hello-static.html 요청, 톰캣에서 요청을 받고 스프링에 넘김 

컨트롤러(우선)에서 hello-static 찾음. 없으면 resources 에서 찾아서 웹에 반환 

 

 

MVC와 템플릿 엔진

MVC: Model, View, Controller

 

MVC는 소프트웨어 개발 패턴으로, 

Model은 데이터와 비즈니스 로직을 담당하며, 

View는 사용자 인터페이스를 나타내고, 

Controller는 사용자 입력을 처리하여 Model과 View를 조정합니다.

 

Controller는 클라이언트의 요청을 받아 해당 요청을 처리하고, 필요한 로직을 실행한 후에 어떤 뷰를 보여줄지를 결정하는 역할을 합니다. 컨트롤러는 웹 애플리케이션의 비즈니스 로직을 제어하며, 클라이언트의 요청을 분석하여 필요한 데이터를 처리하고 적절한 뷰를 반환하는 역할을 수행합니다.

 

검색창에 값 넣은 spring!!이 변환되어 html 에 들어간 것 확인 가능

웹에서 hello-mvc 요청, 톰캣에서 요청을 받고 스프링에 넘김

컨트롤러(우선)에서  hello-mvc 찾고 return: hello-template, model(name:spring) 

viewResolver가 Thymeleaf 템플릿 엔진 처리 후 렌더링을 해서 HTML 변환 후 웹에 반환 

 

템플릿 엔진은 서버 측에서 동적으로 HTML, XML, 또는 다른 마크업 언어를 생성하는 데 사용되는 도구나 라이브러리입니다. 템플릿 엔진은 템플릿 문서 내에 정적인 마크업과 동적인 데이터를 결합하여 최종 출력을 생성하는 역할을 합니다. 

Thymeleaf는 템플릿 엔진의 한 종류로, 서버 사이드에서 HTML을 생성하고 데이터를 삽입하기 위해 널리 사용되는 엔진입니다. Thymeleaf는 스프링 프레임워크와 통합되어 서버 사이드 렌더링을 지원하며, 주로 웹 애플리케이션의 사용자 인터페이스를 생성하는 데 활용됩니다.


viewResolver는 웹 애플리케이션에서 클라이언트의 요청에 대해 어떤 뷰를 사용할지 결정하는 역할을 합니다. 이는 컨트롤러에서 반환한 뷰의 이름을 실제 뷰 객체로 매핑하여 사용자에게 보여줄 화면을 결정합니다.

 

API

페이지 소스보기
String 출력
소스보기

@ResponseBody 사용 원리

hello-api가 톰켓에 전달되고  컨트롤러에 전달됨. 

@ResponseBody시,  return값이 객체면, 객체 defalut는 json방식으로 데이터를 만들어서 http 응답에 반환 하는 것이 기본 정책임. 컨트롤러가  HttpMessageConverter가 전달하여 동작함.  HttpMessageConverter안에는 JSonConverter가 동작하여 객체를 Json 스타일로 바꿔서 요청한 웹브라우저에 그대로 전달함. 

 

@ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음

@ResponseBody 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨

 

 

HTTP의 BODY에 문자 내용을 직접 반환

view Resolver대신 HttpMEssageConverter가 동작함

기본 문자처리: String HttpMessageConverter

기본 객체 처리: MappingJackson2HttpMessageConverter (spring은 jackson라이브러리를 사용)

byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음 

 

참고: 클라이언트의 Http Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택됨 

요즘엔 json 만 쓴다~