
JDBC - JDBC의 이해 - JDBC의 등장 배경
2023. 6. 3. 17:59
Spring & JPA/JDBC
들어가며 이번 포스트에서는 Java에서 DB를 연결할 때 사용했던 JDBC(Java Data Base Connectivity)기술에 대한 전반적 배경에 대해 알아본다. DB를 사용한 데이터의 저장 애플리케이션 개발에서 중요한 데이터들(게시판의 경우 게시글과 그 댓글, 회원 관리의 경우 회원의 정보)을 DB에 저장한다. 그리고 해당 데이터가 필요할 시 DB에서 해당 데이터를 탐색한 뒤 그 데이터를 가져온다. 클라이언트에서 요청이 들어오는 부분은 지금 우리의 관심사는 아니다. 우리의 관심사는 애플리케이션 서버에서 DB로 어떻게 요청과 그 응답이 들어오는가에 대한 것이다. 애플리케이션 서버는 어떻게 DB와 통신을 수행하는걸까? 서버는 먼저 DB로 커넥션을 연결한다. 해당 작업은 서버와 DB가 TCP/IP를 통..

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..