//////
Search
📃

22년 1월 1주차 회고록 (스터디자랑)

회의 날짜: 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: 핸들러 매핑을 통해 찾은 핸들러를 실행하고 그 결과를 반환해줌
RequestMappingHandlerMappingRequestMappingHandlerAdapter 우선 순위가 가장 높은 핸들러 매핑과 핸들러 어댑터 방식 → 실무에서는 대부분 이 방식을 사용함(@RequestMapping)
viewResolver: 컨트롤러가 반환한 view의 이름을 바탕으로 view 객체를 생성해준다. (controller에서 return "index";면 index라는 이름을 가진 view 객체 생성)
JSP는 InternalResourceViewResolver가 InternalResourceView(JstlView)를 반환한다.
스프링 부트는 application.properties 에 등록한 spring.mvc.view.prefixspring.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
복사