나의 브을로오그으

#2. [스프링 입문] - 스프링 웹 개발 기초 본문

Spring

#2. [스프링 입문] - 스프링 웹 개발 기초

__jhp_+ 2022. 7. 9. 22:36

[웹 개발 방법]

1. 정적 컨텐츠 (그냥 서버에서 추가적인 작업 없이 파일을 그대로 웹 브라우저한테 넘겨주는 것)

2. MVC와 템플릿 엔진 (JSP, KSP 와 같은 템플릿 엔진을 통해 서버에서 html 파일을 동적으로 바꿔서 웹 브라우저한테 넘겨주는 것)

3. API (특정 포맷으로 클라이언트에게 데이터 전달, 그러면 클라이언트에서 해당 데이터에 맞게 처리해서 웹브라우저에서 실행 | 대부분 데이터 포맷은 JSON 포맷으로 전달함.)

 

[정적컨텐츠]

hello-static.html

1. SpringApplication 실행

2. 웹 브라우저 주소창에 localhost:8080/hello-static.html

 

- 동작원리

1. 웹브라우저에서 localhost:8080 주소에 hello-static.html파일을 요청

2. 이 요청을 톰켓 서버에서 받음

3. 스프링 부트의 스프링 컨테이너에서 hello-static 컨트롤러를 찾음. (컨트롤러 찾는것이 우선함.) 근대 없음

4. resources/static/hello-static.html을 찾음

5. 이걸 웹 브라우저에 반환해줌

 

[MVC와 템플릿 엔진]

MVC 아키텍쳐 : Model, View, Controller

 

- Controller

 

- View

(여기서 hello! empty는 실제 파일을 절대 경로를 통해 열 때 확인하기 위해서 추가,

근대 서버를 통해서 열게되면 템플릿 엔진을 통해 hello ${name}으로 나옴)

웹브라우저 주소창에 name에 해당하는 값을 추가해서 요청

 

- 동작원리

1. 웹브라우저에서 localhost:8080 서버에 hello-mvc를 요청한다.

2. 내장 톰켓 서버에서 해당 요청을 받아서 controller에서 hello-mvc에 매핑된 요청이 있는지 찾는다.

3. 있으면 해당 helloMvc()메소드를 호출하고, 이때 요청시 작성한 name='...'에 해당하는 파라미터를 인자로 넘기고 hello-template를 return 한다.

4. viewResolver가 resources/template에서 hello-template를 찾아 템플릿 엔진과 연결해준다.

5. thymeleaf 템플릿 엔진에서 이것을 랜더링 해서 html변환 후 웹브라우저에 넘긴다.

 

[API]

- Controller

이렇게 요청하게 되면 

hello-sptring의 경우 hello spring이라는 실제 문자열을 그대로 반환해주고

hello-api의 경우 {name : spring!!!!} 이라는 JSON 포멧의 객체로 반환해준다.

 

- 동작원리

1. 웹브라우저에서 localhost:8080 서버에 요청을 보낸다.

2. 내장 톰켓 서버에서 이 요청을 받고 controller에서 mapping된 요청이 있는지 찾는다.

3. 요청이 있기에 해당 메소드를 호출하여 return 한다.

4. return한 데이터를 HTTP 프로토콜에 맞는 데이터 형태로 웹 브라우저에 넘겨준다.

4-1. 이때 HttpMessageConverter에서 return타입이 문자열의 경우 StringConverter가 converting을 해서 http 응답을 넘겨주고, 문자열이 아닌경우 JsonConverter가 JSON포멧 형태(key:value)로 재구성하여, http응답을 넘겨준다. (JSON Convert Lib에는 Gson과 Jackson이 있음)

 

참고 : 클라이언트에서 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConvert가 선택된다. 

즉, 클라이언트에서 XML포멧으로 응답을 받고 싶어서, Accept 헤더에서 XML 파일로 받겠다고 설정하고 요청하면 서버에서는 XML포멧으로 변환하는 converter lib를 추가하면 Spring에서 알아서 HttpMessageConvert를 XMLConverter로 선택하여 처리한다.