일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Algorithm
- 코딩테스트
- 스마일게이트
- 백준
- 식단
- 삼성 #코테 #2020상반기 #c++
- 소감
- Union-find
- BFS
- 서버개발캠프
- 유니온파인드
- 코테
- 투포인터
- LIS #Algorithm #요소추적
- 알고리즘
- 보석쇼핑
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 1편
- Smilegate
- 카카오인턴
- BaekJoon
- 카카오
- 중반부
- c++
- Today
- Total
짱아의 개발 기록장
3강. 프로젝트 살펴보기 본문
Spring에서 제공하고 있는 https://github.com/spring-projects/spring-petclinic.git로 프로젝트를 진행한다.
📌프로젝트 구조
일반적인 Maven 프로젝트 구조를 따르고 있다.
Spring Boot 프로젝트 기반으로 만들어졌다.
📌프로젝트 로그 살펴보기
일반적으로 로그는 INFO형태로 되어있어서, 웹 페이지를 클릭할 때마다 발생하는 로그들을 자세히 보기 위해서는
DEBUG모드로 바꿔야 한다.
src > main > resources > application.properties 파일에서
주석 처리 되어있던 logging.level.org.springframework.web=DEBUG의 주석을 풀어준다.
💎여기서 잠깐! Dispatcher Servlet이란?
[Dispatcher Servlet의 전체 흐름도]
Dispatcher Servlet이란, Servlet Container에서 HTTP프로토콜을 통해 들어오는 모든 요청을 프레젠테이션 계층의 제일앞에 둬서 중앙집중식으로 처리해주는 프론트 컨트롤러(Front Controller)이다.
자세히 말하자면, 클라이언트로부터 어떠한 요청이 오면 Tomcat(톰캣)과 같은 서블릿컨테이너가 요청을 받는데, 이때 제일 앞에서 서버로 들어오는 모든 요청을 처리하는 *프론트 컨트롤러를 Spring에서 정의하였고, 이를 Dispatcher-Servlet이라고 한다. 그래서 공통처리 작업을 Dispatcher 서블릿이 처리한 후, 적절한 세부 컨트롤러로 작업을 위임해준다.
Spring MVC는 DispatcherServlet이 등장함에 따라 web.xml의 역할을 상당히 축소시켜주었다. 기존에는 모든 서블릿에 대해 URL 매핑을 활용하기 위해서 web.xml에 모두 등록해주어야 했지만, dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주면서 작업을 상당히 편리하게 할 수 있게 되었다.
📌전체적인 흐름 설명
Dispatcher Servlet -> HandlerMapping -> Controller -> ViewResolver -> Dispatcher Servlet 순으로 흐름이 진행된다.
클래스 | 기능 |
DispatcherServlet | 유일한 서블릿 클래스로서 모든 클라이언트의 요청을 가장 먼저 처리하는 Front Controller |
HandlerMapping | 클라이언트의 요청을 처리할 Controller를 매핑 |
Controller | 실질적인 클라이언트의 요청 처리(view의 이름을 리턴한다) |
ViewResolver | Controller가 리턴한 ViewName으로 실행될 경로 완성 |
위 그림은 프로젝트에서 Add Owner를 하고 그에 대한 결과를 보여주는 부분을 debugging한 결과이다.
이에 대해 자세히 설명해보자면...
[위 사진에 대한 자세한 설명]
1) Dispatcher Servlet에서 http프로토콜의 요청을 받는다.
GET요청->"/owners/13"
2) HandlerMapping에 의해 실질적으로 로직을 처리할 controller를 매핑해준다.
Mapped to org.springframework.sample.petclinic.owner.OwnerController#showOwner
-> OwnerController.java 파일 안의 showOwner함수를 의미!
3) ViewResolver에 의해 실질적인 경로가 완성된다.
4) 마지막으로, Dispatcher Servlet에 의해 결과가 클라이언트에게 전달된다.
-> Completed 200 OK
📌프로젝트 디버깅
프로젝트의 코드 줄마다 빨간 동그라미 버튼을 누르고 벌레 모양의 debugging 버튼을 누르면
자세하게 디버깅되는 과정을 볼 수 있다.
어떠한 값이 들어가고 처리되는지 자세히 알 수 있다.
디버깅을 하면서 다음 줄로 넘어가는 것은 F8을 누르면 된다.
참고 포스팅
'개발 프로젝트 정리 > [예제로 배우는 스프링 입문] 백기선님 강의 정리' 카테고리의 다른 글
7강. 빈(Bean) (0) | 2021.01.02 |
---|---|
6강. IoC 컨테이너 (0) | 2020.12.30 |
5강. Inversion of Control (0) | 2020.12.29 |
4강. 프로젝트 과제 풀이 (0) | 2020.12.28 |
2강. 예제 프로젝트 준비 (0) | 2020.12.24 |