Spring MVC - Spring MVC의 구조 - 1. Dispatcher Servlet
2023. 6. 7. 22:31
Spring & JPA/SpringMVC
들어가며 이전까지 우리가 프론트 컨트롤러 및 여러 개선점을 적용한 프레임워크를 만들고 그 구조를 알아보았다. 이번 파트부터는 실제 스프링 MVC의 전체적인 구조를 알아본다. Spring MVC 구조 우선 우리가 만들었던 프레임워크 구조를 보면 다음과 같다. 다음은 실제 스프링 MVC에서 사용하고 있는 구조이다. 매우 유사하지 않은가? 이는 스프링 MVC 프레임워크의 구조가 갑자기 어디선가 등장한 것이 아닌, 이전에 있던 수 많은 문제점과 편의성을 제공하기 위해 개선이 적용된 결과임을 의미한다. 직접 만든 프레임워크와 스프링 MVC 구조를 한번 비교해보자. Front Controller -> Dispatcher Servlet HandlerMappingStore -> HandlerMapping MyHandl..
Spring MVC - MVC 구조 - 9. 프레임워크 구조 정리
2023. 6. 2. 02:26
Spring & JPA/SpringMVC
들어가며 약 8개 포스트에 걸쳐서 기존의 각 서블릿이 공통 로직을 각각 구현했어야 했고, View 이름이 중복되었으며 모델이 서블릿의 request에 의존하던 코드들을 깔끔하게 구조화시켰다. 이번 포스트는 전체적인 구조를 정리하고 요청에 대해 어떻게 처리가 이루어지는지를 정리해본다. MVC 프레임워크 전체 구조 프론트 컨트롤러를 도입만 했던 버전 1부터 시작해 확장성을 적용시킨 버전 5까지 코드의 개선을 보아왔다. 확장성을 적용시킨 프레임워크의 전체적인 구조는 다음과 같다. 꽤 많이 복잡해졌다. 각 컴포넌트들에 대해 간략하게 정리하고 넘어가자. Handler Mapping Store는 모든 핸들러(컨트롤러)에 대한 매핑 정보를 가지고 있다. 핸들러가 처리 가능한 URL을 key로 가지고 핸들러 객체를 v..
Spring MVC - MVC 구조 - 8. 확장성 적용(2)
2023. 6. 2. 02:05
Spring & JPA/SpringMVC
들어가며 이전 포스트에서 확장성을 구현하기 위해 HandlerAdapter라는 개념을 가져왔고, 이 HandlerAdapter가 가져야 하는 책임까지 알아보았다. 이번 포스트에서는 이 HandlerAdapter 인터페이스를 구현한 구현체들을 알아보고, 프론트 컨트롤러가 어떻게 변경되는지에 대해 알아보도록 한다. 마지막으로는 확장성을 적용한 전체적인 구조에 대해서도 살펴본다. HandlerAdapter의 구현체 HandlerAdapter의 구현은 다음과 같았다. public interface MyHandlerAdapter { boolean supports(Object handler); ModelView handle(HttpServletRequest request, HttpServletResponse res..
Spring MVC - MVC 구조 - 7. 확장성 적용(1)
2023. 6. 2. 01:36
Spring & JPA/SpringMVC
들어가며 이전의 아이디어를 적용함으로서 꽤나 근사한 MVC 프레임워크를 만들 수 있었다. 개발자는 컨트롤러를 만들 때 단순히 뷰의 논리적 이름만을 반환하도록 하면 끝나는 매우 편리한 프레임워크가 되었다. 하지만 다른 개발자가 어떠한 사정으로 인하여 이전 버전의 컨트롤러들을 사용해야 한다고 한다. 이런 상황이 온다면 어떻게 해야할까? 이번 포스트에서는 해당 문제에 대해 생각해보고 해결 방법을 알아 본다. 결과 코드는 여기에서 볼 수 있다. GitHub - ForteEscape/MVC-Study Contribute to ForteEscape/MVC-Study development by creating an account on GitHub. github.com 확장성 - 다른 버전의 컨트롤러를 사용해야하는 문..
Spring MVC - MVC 구조 - 6. 개선된 MVC 구조
2023. 6. 1. 01:23
Spring & JPA/SpringMVC
들어가며 저번 포스트에서 Model의 추가를 통해 서블릿 코드 종속을 제거하고, ViewResolver와 MyView의 render()를 조금 손봄으로서 컨트롤러에선 View의 논리적 이름과 모델만을 반환하면 되도록 개선하였다. 이번 포스트에서는 약간의 아이디어를 통해 더욱 편리하게 컨트롤러를 만들 수 있도록 한다. 구현 코드의 결과는 여기에서 볼 수 있다. GitHub - ForteEscape/MVC-Study Contribute to ForteEscape/MVC-Study development by creating an account on GitHub. github.com 아이디어 지금 우리가 만든 이 FrontController와 프레임워크도 매우 탄탄한 구조를 가지고 있다. 여기서 조금의 아이디어..
Spring MVC - MVC 구조 - 5. Model의 추가
2023. 6. 1. 01:01
Spring & JPA/SpringMVC
들어가며 저번 포스트에서는 View를 컨트롤러에서 분리하는 작업을 수행하였다. 이번에는 서블릿에 종속적인 코드들을 걷어내고 그 이후에 새로운 Model이라는 컴포넌트를 도입하여 어떻게 변화되는지를 알아본다. 모델을 추가한 전체적인 코드는 여기에서 확인할 수 있다. GitHub - ForteEscape/MVC-Study Contribute to ForteEscape/MVC-Study development by creating an account on GitHub. github.com 개선 방향 서블릿 종속성 제거 다음의 코드를 보자 public class MemberFormControllerV2 implements ControllerV2 { @Override public MyView process(Http..
Spring MVC - MVC 구조 - 4. View의 분리
2023. 5. 31. 01:27
Spring & JPA/SpringMVC
들어가며 저번 포스트에서는 프론트 컨트롤러를 도입하여 구현한 서블릿 구조를 보았다. 이번 포스트에서는 각 컨트롤러에 묶여있는 뷰들을 어떻게 효과적으로 빼낼지에 대해 알아본다. 모든 코드는 깃허브 링크에 올려저 있다. GitHub - ForteEscape/MVC-Study Contribute to ForteEscape/MVC-Study development by creating an account on GitHub. github.com View의 분리 지금까지 구현한 구조는 컨트롤러가 JSP로 포워딩하기 위해 JSP파일의 물리적 경로를 가지고 있었어야 했다. 단적으로 다음의 코드를 보자. public class MemberFormControllerV1 implements ControllerV1 { @Ove..
Spring MVC - MVC 구조 - 3. 프론트 컨트롤러 구현(2)
2023. 5. 30. 17:14
Spring & JPA/SpringMVC
들어가며 저번 포스트에서 프론트 컨트롤러 구현을 시작하였다. 먼저 회원 데이터를 저장하고 보여주는 간단한 서비스를 만들기 위해 Domain, Repository를 작성하였다. 이번 포스트에서는 각 컨트롤러 구현을 수행할 것이다. 모든 진행 결과는 필자의 깃허브에서 볼 수 있다. GitHub - ForteEscape/MVC-Study Contribute to ForteEscape/MVC-Study development by creating an account on GitHub. github.com 프론트 컨트롤러 구현 - 계속 컨트롤러 구현 이전 포스트에서도 적었지만 프론트 컨트롤러가 각 컨트롤러의 정보를 알고 있는 상태에서 클라이언트의 요청을 처리할 수 있는 컨트롤러에 요청을 위임한다고 하였다. 그리고 ..
Spring MVC - MVC 구조 - 2. 프론트 컨트롤러 구현(1)
2023. 5. 30. 16:25
Spring & JPA/SpringMVC
들어가며 이전 포스트에서 프론트 컨트롤러 패턴에 대한 소개와 해당 패턴을 적용할 시에 얻을 수 있는 이점에 대해 알아보았다. 이번에는 이 프론트 컨트롤러를 구현해 볼 것이다. 개발환경에 대한 설명은 이전 포스트에 적혀 있으니 이전 포스트를 참고하면 되겠다. Spring MVC - Dispatcher Servlet - 프론트 컨트롤러 들어가며 이번 포스트에서부터는 스프링 MVC의 기본적인 구조를 알아본다. 이번 주제는 Dispatcher Servlet이라고 하는 스프링 MVC의 구조를 유도하며 왜 이렇게 되었는가에 대해 알아본다. 추가적으 sehun5515.tistory.com 프론트 컨트롤러 적용 구조 프론트 컨트롤러를 적용하면 많은 것이 변경될 수 있지만 모든 것을 곧바로 변경시키지는 않을 것이다. 차..
Spring MVC - MVC 구조 - 1. 프론트 컨트롤러
2023. 5. 30. 15:55
Spring & JPA/SpringMVC
들어가며 이번 포스트에서부터는 스프링 MVC의 기본적인 구조를 알아본다. 이번 주제는 Dispatcher Servlet이라고 하는 스프링 MVC의 구조를 유도하며 왜 이렇게 되었는가에 대해 알아본다. 추가적으로 이 프론트 컨트롤러가 어떻게 발전하는지를 앞으로의 포스트를 보면서 알아보도록 한다. 프론트 컨트롤러의 도입 기존 스프링을 사용하지 않고, 서블릿을 통하여 각 컨트롤러들을 사용한 시기에는 각 컨트롤러별로 공통적으로 처리해야 하는 로직이 존재하면 모든 서블릿 컨트롤러들에 대해 해당 로직을 넣어주어야 했다. 만약 각 컨트롤러들이 호출될 때 마다 "Controller Called"라는 로그를 찍어야 한다고 생각해보자. 그렇다면 모든 컨트롤러에는 다음과 같은 코드가 붙어야 할 것이다. @WebServlet..