본문 바로가기
public void static main()/Lecture

[SpringBoot] SpringBoot_02_스프링웹개발기초

by 햄리뮤 2021. 1. 18.
반응형

아~ 스프링 스프링 스프링이 왔어요~

아자아자... 개발자의 길은 멀고도 험난하다~

김영한 강사님과 함께 했던 강의시간 받은만큼 공부하자!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

정적 동적 웹 [출처] https://www.pluralsight.com/blog/creative-professional/static-dynamic-websites-theres-difference

정적 컨텐츠

- 서버에 HTML이나 다양한 미디어 자원 파일이 저장되어있고 클라이언트가 요청하면 저장된 원본 그대로 파일을 서비스 하는것.

- 모든 클라이언트의 동일한 요청에 대해 동일한 결과를 준다.

 

동적 컨텐츠

- 같은 요청이라도 클라이언트에 따라 다른 결과의 서비스를 해주는 방법.

- 동적인 페이지를 위해 비즈니스 로직 처리와  DB 참조 처리 등의 서버 프로그래밍이 필요함!

- 웹 서버상에서 작동하는 프로그램이 클라이언트에 맞게 HTMl을 생성하여 보냄.

  (프로그램이 생성한 HTML 등의 콘텐츠를 동적 콘텐츠라 함! JSP, Servlet, Node.js 등으로 만든 프로그램!)

 

콘텐츠

- 웹 서버를 통해 공개되는 정보를 일반적으로 웹 콘텐츠라고 함! (헐~ 이제 알았어...) HTML 뿐만아니라 사진, 그림, 동영상, 음악프로그램 등 웹서버를 통해 배포되는 것 등을 의미!

 

MVC와 템플릿 엔진

Spring MVC란

  • Spring 프레임워크에서 제공하는 웹 모듈.
  • MVC는 Model-View-Controller의 약자로, 기본 시스템 모듈을 MVC로 나누어 구현되어 있음.
    • Model: 데이터 디자인을 담당.
    • View: 실제로 렌더링되어 보이는 페이지를 담당.
    • Controller: 사용자의 요청을 받고, 응답을 주는 로직을 담당.
  • Spring MVC 모듈을 사용하여, 백엔드 프로그래밍의 기본 프레임워크를 잡음!
    • Web서버에 특화되어 만들어진 모듈이라 개발자가 해야할 영역을 더 적게 만들어줌.
    • 즉 기존에 Spring보다 더 깔끔하고 간편하게 개발 가능.
  • 별다른 언급이 없으면 MVC Model2 아키텍처를 사용하는 것으로 생각함.

 

클라이언트 응답으로부터의 MVC동작 구조 [출처] https://dailyheumsi.tistory.com/159
Spring MVC Dispatcher Servlet [출처] https://min-it.tistory.com/7

1. 클라이언트 (사용자)의 모든 요청DispatcherServlet이 받음!

2. DispatcherServlet은 hanlderMapping을 통해서 요청에 해당하는 Controller를 실행시킴

3. Controller는 적절한 Service 객체를 호출!

4. ServiceDB처리를 위해 DAO를 이용하여 데이터를 요청!

5. DAO는 mybatis를 이용하는 Mapper를 통해 작업을 처리.

6. 결과(처리한 데이터)가 mapper -> DAO -> Service -> Controller로 전달

7. Controller는 전달된 결과(처리된 데이터)를 View Resolver를 통해 전달받을 View가 있는지 검색

8. 전달 받은 View가 있다면 View에게 전달된 결과(처리된 데이터)를 전달.

9. View는 전달받은 결과(처리된 데이터)를 다시 DispatacherServlet에게 전달함.

10. DispatcherServlet은 전달받은 결과(처리된 데이터)를 클라이언트에게 전달.

Spring Boot Flow Architecture [출처] https://www.geeksforgeeks.org/introduction-to-spring-boot/

DispatcherServlet의 역할은?

제일 앞에서 서버로 들어오는 요청을 처리하는 front controller

공통작업에 대한 처리는 DispatcherServlet에서 이루어지지만 세부적인 작업 내용은 해당되는 Controller에 위임하여 처리

- web.xml의 역할이 축소됨.

   -> 기존에는 모든 서블릿에 대해 URL 매핑을 활용하기 위해서 web.xml에 모두 등록해주어야만 했음.

   -> DispatcherServlet이 모든 요청을 핸들링 해주면서 작업이 편리해짐.

 

문제점

DispatcherServletServlet이 요청들을 Controller로 넘기는데 이미지나 HTML을 불러오는 요청마저 모두 넘겨버림! 심지어는 JS나 CSS파일에 대한 요청 모두 DispatcherServlet으로 넘어가버림!

 

해결방법

Spring은 이에 대한 해결책으로 <mvc:respirces/>를 이용할 수 있도록 내놓았다. 만약 Dispatcher-Servlet에서 해당 요청에 대한 컨트롤러를 찾을 수 없는 경우에, 2차적으로 설정된 경로에서 요청을 탐색하여 자원을 호출할 수 있도록 만듬!

 

템플릿 엔진

템플릿과 특정 데이터 모델에 따른 입력 자료를 결합하여 원하는 결과 문서를 출력하는 소프트웨어(또는 컴포넌트)를 말함. (어렵다...)

-  웹 템플릿들과 웹 컨텐츠 정보를 처리하기 위해 설계된 소프트웨어임.

- view code(html)와 data logic code(db connection)을 분리해주는 기능을 함.

 

템플릿 엔진(진자라 덩기덕 쿵덕) [출처] https://insight-bgh.tistory.com/252

Spring Boot

 

1. 내장 톰켓을 가진다.

2. 서블릿 컨테이너 

서블릿 컨테이너 [출처] https://getinthere.tistory.com/11

3. web.xml

- 서버의 실행과 동시에 톰켓(WAS web application server)에 의해 web.xml이 실행

4. ContextLoaderListener, root-context

- web.xml이 실행된 뒤 ContextLoaderListener가 실행

- ContextLoaderListener가 root-context를 읽고 스프링 컨테이너에 Database Connection 및 공통적으로 사용해야하는 객체들을 생성!

5. Request

- 공통적으로 공유해야 하는 객체들이 스프링 컨데이터에 생성된 후 클라이언트에게 request를 받을 수 있다.

6. DispatcherServlet

- 기존의 FrontController와 RequestDispatcher의 역할을 합쳐 놓은 것!

- 클라이언트에게 요청이 들어오면 DispatcherServlet이  Handler Mapping을 하여 해당 요청의 주소를 컨트롤러의 메서드와 매칭해줌! (오! 위에서 배운거!)

7. Spring Container

- DispathcerServlet에 의해 생성되어지는 수 많은 객체들은 ApplicationContext에서 관리됨! 이것을 IoC라고 한다!

 

[출처]https://getinthere.tistory.com/11

ApplicationContext

IoC란 제어의 역전(재판 ㅈㅅ해여 역전재판 생각나서..)을 의미함! 개발자가 직접 new를 통해 객체를 생성하게 된다면 해당 객체를 가르키는 레퍼런스 변수를 관리하기 어려움. 그래서 스프링이 직접 해당 객체를 관리함!

이대 우리는 주소를 몰라도 됨! 왜냐면~~필요할때 Dependency Injection(의존주입)하면 되기 때문에! (DI는 포스팅 따로하자...)

 

Bean Factory

필요한 객체를 Bean Factory에 등록할 수 도 있다. 여기에 등록하면 초기에 메모리에 로드되지 않고 필요할 때 getBean()이라는 메소드를 통하여 호출하여 메모리에 로드할 수 있다. 이것 또한 IoC이다. 그리고 필요할 때 DI하여 사용할 수 있다. ApplicationContext와 다른 점은 Bean Factory에 로드되는 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드하기 때문에 lazy-loading이 된다는 점......... (어려어....)

 

스프링 프레임워크 구조! [출처]https://asfirstalways.tistory.com/334

 

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

대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

김영한 강사님이랑 수업한 코드! 사진은 내 인텔리제이에서 캡쳐!

@ResponseBody

메소드에서 @ResponseBody 어노테이션을 사용하면 Spring은 반환 값을 변환하여 HTTP Response 에 자동으로 씀!

 

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

viewResolver 대신에 HttpMessageConverter 가 동작

기본 문자처리: StringHttpMessageConverter

기본 객체처리: MappingJackson2HttpMessageConverter byte 처리 등등

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

일반적인 spring mvc흐름 [출처] https://highcode.tistory.com/24
responseBody를 사용했을시 흐름 [출처] https://highcode.tistory.com/24

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

 

@RestController

Spring 4.0은 @Controller와 @ResponseBody 을 합쳐놓은것 이상의 역할을 수행하는@RestController를 추가했음!(박수~) 컨트롤러 클래스에 @RestController 어노테이션을 작성함으로써 더 이상 @ResponseBody를 모든 요청 매핑 메소드에 추가 할 필요가 없다!!(너모 좋구여!) @ResponseBody 어노테이션은 이제 기본으로 작동!!

restController 흐름 [출처] https://highcode.tistory.com/24

 

 

공부에 도움을 주신 힘을내요 수퍼 파워블로거분들 모두모두 감사합니다! 덕분에 어케어케 버텨서 공부 또했어요!

최고야!

 

[출처] www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다. 초급 웹 개발 기타 네트워크 웹 개발 Back-End 온라인 강의 프론트엔드/백엔드, 웹/모바일 앱 개발 등 웹 기술을 사용하는

www.inflearn.com

[출처] realmojo.tistory.com/156

 

동적 콘텐츠, 정적 콘텐츠

정적 웹 서비스 - 서버에 HTML이나 다양한 미디어 자원 파일이 저장돼있고 클라이언트가 요청하면 저장된 원본   그대로 파일을 서비스하는 것. - 모든 클라이언트의 동일한 요청에 대해 동일한

realmojo.tistory.com

[출처] dailyheumsi.tistory.com/159

 

[부스트코스 웹 프로그래밍] 스프링 MVC

부스트코스 웹 프로그래밍 BE 영상을 보며 공부한 것을 간단히 정리한다. 1. Spring MVC Spring MVC 란 Spring 프레임워크에서 제공하는 웹 모듈이다. MVC 는 Model-View-Controller 의 약자로, 기본 시스템 모듈..

dailyheumsi.tistory.com

[출처] min-it.tistory.com/7

 

[06] Spring MVC - 모델2 스프링 MVC 개념과 DispatcherServlet

안녕하세요. MIN-IT입니다. 이번시간은 Spring MVC과 DispatcherServlet 대해 공부해보겠습니다.. 퍼가실 때 댓글을 남겨주시면 감사하겠습니다. http://min-it.tistory.com 스프링 MVC는 모델 2방식 구조입니다...

min-it.tistory.com

[출처] medium.com/@fntldpf12/dispatcher-servlet%EC%9D%B4%EB%9E%80-624a2195d38f

 

Dispatcher-Servlet이란?

개념  클라이언트로부터 어떠한 요청이 들어오면 서블릿 컨테이너가 요청을 받는다. 이 때 제일 앞에서 서버로 들어오는 요청을 처리하는 프론트 컨트롤러를 Dispatcher-Servlet이라고 한다. (Spring

medium.com

[출처] insight-bgh.tistory.com/252

 

템플릿 엔진(Template Engine) 이란?

1. 템플릿 엔진(Template Engine) 이란? 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 결합하여 원하는 결과 문서를 출력하는 소프트웨어(또는 컴포넌트)를 말합니다. 그중 웹 템플릿엔진(Web Te

insight-bgh.tistory.com

[출처] getinthere.tistory.com/11

 

스프링부트 with JPA 3강 - Springboot 동작원리!

1. 스프링부트 동작원리 (1) 내장 톰켓을 가진다. 톰켓을 따로 설치할 필요 없이 바로 실행가능하다. (2) 서블릿 컨테이너 (3) web.xml -ServletContext의 초기 파라미터 -Session의 유효시간 설정 -Servlet/JSP..

getinthere.tistory.com

[출처] highcode.tistory.com/24

 

[Spring] Restful한 스프링 @ResponseBody vs @RestController

Spring 에서 restful 하게 작성하기 위해 @Controller 내에 @ResponseBody 사용하거나 혹은 @RestController 을 사용할 수 있습니다. 스프링 MVC 프레임 워크와 REST 일반적인 Spring MVC 컨트롤러와 RESTful 웹..

highcode.tistory.com

** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의들은

내용이 정리가 되었습니다.

그림들은 그림밑에 출저표시를 해놓았습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

댓글