•
회의 날짜: 2022/01/06 (금)
•
회의 장소: discord 라운지
•
참석자: 김솔배, 구연지, 안지영, 김재근
[회고 사진]
[이번 스터디 공부한 내용
MVC 프레임워크 만들기 ~ 스프링 MVC 구조 이해
김솔배
SpringMVC구조와 비슷하게 만들어 보자
FrontController가 서블릿 역할을 하여 공통로직을 처리한다.
MVC 프레임워크 만들기 → @RequstMapping(”/hello”) 는 컨트롤러를 처리해주는 어댑터이다.
스프링 MVC 구조 이해
구연지
•
이전에 사용했던 방법들
(1) 서블릿: 사용하기에 복잡함
(2) JSP: 중요한 비즈니스 로직 부분(자바)은 적고, view 부분을 HTML 형식으로구현해주어야 함 → 유지보수가 어려움
(3) MVC 패턴(이전 버전):비즈니스 로직 - 서블릿, JSP - HTML
•
컨트롤러에서 화면을 보여 주기 위해 view로 이동하는 코드를 항상 호출해야 한다, view path가 변경되면 모두 변경해주어야 한다.
•
컨트롤러에서 중복되는 기능을 처리하기 어려움 → 프론트 컨트롤러 패턴을 도입하기
•
프론트 컨트롤러 패턴을 이용한 MVC
프론트 컨트롤러 서블릿이 클라이언트의 요청을 받은 후 요청에 맞는 컨트롤러를 찾아서 호출
→ 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 되고 공통 기능을 프론트 컨트롤러에서 일괄적으로 처리할 수 있음
→ 스프링 MVC도 DispatcherServlet이 FrontController 패턴으로 구현되어 있음
•
스프링 MVC
(1) 스프링부트에서 자동으로 DispatcherServlet이 등록된다
(2) 서블릿이 호출되면 부모 클래스인 FrameworkServelet(HttpServelet의 메소드 오버라이딩)이 제공하는 Service()를 호출되고 이후 여러 메서드가 호출되면서 DispacherServlet.doDispatch() 가 호출된다.
(3) doDispatch()의 동작 순서
•
HandlerMapping: 컨트롤러(핸들러)를 찾는 방법
◦
RequestMappingHandlerMapping: 어노테이션을 기반으로 한 컨트롤러(@RequestMapping)에서 사용
◦
BeanNameUrlHandlerMapping: 스프링 이름으로 핸들러 찾기
•
HandlerAdapter: 핸들러 매핑을 통해 찾은 핸들러를 실행하고 그 결과를 반환해줌
RequestMappingHandlerMapping 과 RequestMappingHandlerAdapter 우선 순위가 가장 높은 핸들러 매핑과 핸들러 어댑터 방식 → 실무에서는 대부분 이 방식을 사용함(@RequestMapping)
•
viewResolver: 컨트롤러가 반환한 view의 이름을 바탕으로 view 객체를 생성해준다. (controller에서 return "index";면 index라는 이름을 가진 view 객체 생성)
◦
JSP는 InternalResourceViewResolver가 InternalResourceView(JstlView)를 반환한다.
◦
스프링 부트는 application.properties 에 등록한 spring.mvc.view.prefix 와 spring.mvc.view.suffix를 이용해 InternalResourceViewResolver를 자동으로 등록한다 → forward()를 호출해서 view를 보여준다(렌더링 한다).
안지영
서블릿, JSP, MVC 패턴
MVC 프레임 워크 만들기
스프링 MVC - 구조이해
김재근
서블릿, JSP, MVC 패턴
MVC 프레임워크 만들기
스프링 MVC - 구조이해
[어려웠던 부분]
•
Servlet에서 MVC로 가능 과정이 생각보다 복잡하고
양이 많아서 이해하기 어려웠다.
Plain Text
복사
•
내용이 어렵지는 않았는데 서블릿과 JSP로 화면을 구성하는 단계,
그리고 이것을 프론트 컨트롤러로 변환할 때 조금 신경써야할 부분이 많았던 것 같다.
수업 시간에 MVC 패턴에 대해 배웠을 때도 왜 이런 방식을 사용하게 되었는지 와닿지 못했었는데
서블릿과 JSP를 이용해 화면을 구현하는 활동을 해보면서 그 필요성을 뼈저리게 느꼈다.
지금도 서블릿을 이용하고 있었다면 아마 나는 다른 길을 알아보지 않았을까...
Plain Text
복사
•
서블릿 컨테이너, 서블릿, WAS 세 개를 구분하는 게 좀 어려운 것 같다.
Plain Text
복사
•
아직 Servlet이 동작하는 방식은 낫설지만 열심히 듣다보면 언젠간 늘겠죠...?
Plain Text
복사
[금주의 꿀팁 & 인사이트!]
•
어댑터와, 핸들러에대해 알고나면 조금 더 스프링에대한 이해를 잘 할수 있을거같다
Plain Text
복사
•
기계적으로 사용하는 @RequestMapping을 이용할 때 어떻게 동작을 하는지 다시 한 번 생각해보자
Plain Text
복사
•
아직까지도 어쩌면 웹 서버에 대해 잘 몰랐던게 아닐까 싶었다!
Plain Text
복사
•
Spring Boot을 사용하면서 당연하게 생각하고 사용했던 개념들을 하나하나 짚어가면서
왜 큰 기업들에서 Spring Boot 사용을 하게 되는지에 대한 인사이트를 얻게 되었습니다!
Plain Text
복사
[금주의 느낀 점]
•
스프링 MVC를 사용하는 이유를 알게되었다
복습을 꾸준히 해서 완전히 내 지식으로 만들자:)
Plain Text
복사
•
MVC 패턴이 어떤 방식으로 동작을 하고 있는지를 알지 못하고 그냥 기계적으로 사용하고
있었음을 느끼면서 MVC 강의가 모래로 쌓인 기반에 자갈을 넣어주는 역할이 아닐까(비슷한 건가?)
라는 생각이 들었다.
Plain Text
복사
•
좀 더 단순한 것 부터 구현해보는 게 장점이라는 생각이 들었다. 오히려 기본적인 것을 하다 보니
큰 그림을 이해하는 데 더 도움이 된 것 같다.
Plain Text
복사
•
기본적으로 백엔드 엔지니어가 어느 정도의 기술을 배워야하는지,
얼마나 배워야 하는지에 대한 정리를할 수 있었습니다!
Java
복사