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..
Spring MVC - 기반 지식 - 4. WAS와 리소스 반환, CSR, SSR
2023. 5. 26. 20:07
Spring & JPA/SpringMVC
들어가며 이번 포스트에서는 WAS가 반환하는 데이터의 종류와 클라이언트에서 뷰를 랜더링하는 CSR, 서버에서 뷰를 랜더링하는 SSR에 대해 알아본다. WAS가 반환하는 데이터 종류들 서버는 결국 클라이언트의 요청을 받고 데이터를 처리한 뒤 그 결과를 응답으로 반환해야 한다. 이때 이 반환하는 데이터들의 종류가 다양한데 크게 분류하자면 3개로 나눌 수 있다. 정적 리소스 - HTML, CSS, JS, 이미지 동적 HTML 페이지 HTTP API(JSON, XML) 각각의 데이터에 대해 알아보도록 하자 정적 리소스 정적 리소스는 이전에도 설명했지만 클라이언트의 요청에 의해 동적으로 변하지 않는 자원들을 일컫는다. 보통 정적 HTML이나 CSS, JS가 있으며 이미지, 영상도 정적 리소스에 표함된다. 주로 웹..
Spring MVC - 기반 지식 - 3. WAS와 멀티 쓰레드
2023. 5. 26. 18:54
Spring & JPA/SpringMVC
들어가며 이전 포스트에서 WAS와 서블릿 그리고 서블릿 컨테이너에 대해 알아보았다. 이번 포스트에서는 서블릿과 멀티 쓰레드에 대해 알아본다. 서블릿 호출과 스레드 이전 포스트의 그림을 다시 가져왔다. 클라이언트가 요청을 보내면 그 요청을 통해 Request 객체가 생성되고, url 패턴과 동일한 서블릿이 존재하는지 서블릿 컨테이너에 확인한 뒤 해당 서블릿을 호출한다. 그런데 이 서블릿을 누가 호출하는 것인가에 대해서 한번 생각할 필요가 있다. 누가 이 서블릿을 호출하고 내부 로직을 실행시키는 것일까 그 답은 쓰레드이다. 웹 애플리케이션이 실행되면 웹 애플리케이션은 고유의 프로세스(Process)를 가지게 되고 그 내부에는 기본적으로 하나의 쓰레드를 가지게 된다. 바로 이 쓰레드가 서블릿 컨테이너에서 찾은..