본문 바로가기

MVC

(25)
[MVC] Spring MVC와 Dispatcher Servlet 목차Spring MVCMVC란 무엇인가?MVC의 등장 배경DispatcherServlet역할동작과정Spring MVCSpring MVC(Model-View-Controller)는 Spring Framework의 핵심 모듈 중 하나로, 웹 애플리케이션 개발을 위한 디자인 패턴인 MVC 패턴을 구현한 것이다. 이 패턴은 애플리케이션의 로직을 세 가지 주요 구성 요소로 분리하여 관리한다. Spring MVC는 웹 애플리케이션을 구조화하고, 테스트와 유지보수를 용이하게 만들기 위해 설계되었다.Model: 애플리케이션의 핵심 데이터와 비즈니스 로직을 나타낸다. 보통 도메인 객체나 데이터베이스와 상호작용하는 객체들이다.View: 사용자에게 보여지는 화면을 담당한다. 일반적으로 JSP, Thymeleaf, FreeM..
[MVC] 필터와 인터셉터 목차서블릿 필터스프링 인터셉터서블릿 필터와 스프링 인터셉터 웹 애플리케이션에서 요청과 응답을 가로채어 특정 로직을 수행해야 하는 경우가 많다. 이를 위해 서블릿 필터(Servlet Filter) 와 스프링 인터셉터(Spring Interceptor) 를 사용할 수 있다. 두 개념은 비슷하지만 동작 방식과 적용 범위에서 차이가 있다.비교 항목서블릿 필터 (Servlet Filter)스프링 인터셉터 (Spring Interceptor)적용 대상모든 요청 (정적 리소스 포함)스프링 MVC 컨트롤러 요청실행 시점서블릿 실행 전후컨트롤러 실행 전후주요 메서드init(), doFilter(), destroy()preHandle(), postHandle(), afterCompletion()등록 방식web.xml 또는..
[Spring] Spring MVC vs Spring WebFlux Spring MVC vs Spring WebFluxSpring MVC와 Spring WebFlux는 Spring Framework에서 웹 애플리케이션을 개발하기 위한 두 가지 주요 프로그래밍 모델이다. 두 모델은 아키텍처와 비동기 처리 방식에서 큰 차이를 보인다.Spring MVCSpring MVC는 전통적인 동기식 프로그래밍 모델로 Servlet API 기반입니다.블로킹 I/O를 사용하여 하나의 요청이 처리되는 동안 쓰레드가 블로킹된다.Thread-Per-Request 모델을 사용한다.  특징동기적 처리 모델블로킹 I/O 기반 (Servlet 3.x 이상)JVM의 기본 스레드 풀을 사용하며, 하나의 요청당 하나의 스레드를 할당합니다.모놀리식 아키텍처에 적합하며, 레거시 시스템과의 통합이 쉽습니다.장점간..
[MVC] 파일 업로드 📚 목차파일 업로드 소개서블릿과 파일 업로드스프링과 파일 업로드파일 업로드, 다운로드 📁 파일 업로드 소개일반적으로 사용하는 HTML Form을 통한 파일 업로드를 이해하려면먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 한다.  HTML 폼 전송 방식application/x-www-form-urlencodedmultipart/form-data 💡 application/x-www-form-urlencoded 방식은 HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법이다.  Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 다음 내용을 추가한다.Content-Type: application/x-www-form-urlencoded그리고 폼에 ..
[MVC] 스프링 타입 컨버터 목차스프링 타입 컨버터란?타입 컨버터 - Converter컨버전 서비스 - ConversionService스프링에 Converter 적용하기뷰 템플릿에 컨버터 적용하기포맷터 - Formatter포맷터를 지원하는 컨버전 서비스포맷터 적용하기스프링이 제공하는 기본 포맷터 🍃 스프링 타입 컨버터 소개문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것 처럼 타입을 변환해야 하는 경우가 상당히 많다. 문자 타입을 숫자 타입으로 변경@RestControllerpublic class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request) { // 문자 타입으로 조회 ..
[MVC] API 예외 처리 @ExceptionHandler 목차API 예외 처리 - 시작API 예외 처리 - 스프링 부트 기본 오류 처리API 예외 처리 - HandlerExceptionResolver API 예외 처리 - 스프링이 제공하는 ExceptionResolverAPI 예외 처리 - @ExceptionHandlerAPI 예외 처리 - @ControllerAdvice ✍ API 예외 처리 - 시작 🤔 API 예외 처리는 어떻게 해야할까?HTML 페이지의 경우 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다.그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다.지금부터 API..
[MVC] 예외 처리와 오류 페이지 ✍ 서블릿 예외 처리스프링이 아닌 순수 서블릿 컨테이너는 예외를 어떻게 처리하는지 알아보자.서블릿은 다음 2가지 방식으로 예외 처리를 지원한다.Exception (예외)response.sendError(HTTP 상태 코드, 오류 메시지) 1️⃣ Exception(예외) 자바 직접 실행자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 쓰레드가 실행된다.실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다.애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제..
[MVC] 필터, 인터셉터 목차서블릿 필터 - 소개서블릿 필터 - 요청 로그서블릿 필터 - 인증 체크스프링 인터셉터 - 소개스프링 인터셉터 - 요청 로그스프링 인터셉터 - 인증 체크ArgumentResolver 활용 ✍ 서블릿 필터 - 소개 공통 관심 사항요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다.앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인 하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다는 점이다. 품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 등록, 수정, 삭제, 조회 등등 상품 관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 더 큰..
[MVC] 로그인 구현하기(쿠키, 세션) 목차홈 화면 회원 가입 로그인 기능 로그인 처리하기 - 쿠키 사용 쿠키와 보안 문제 로그인 처리하기 - 세션 동작 방식 로그인 처리하기 - 세션 직접 만들기 로그인 처리하기 - 직접 만든 세션 적용 로그인 처리하기 - 서블릿 HTTP 세션세션 정보와 타임아웃 설정 패키지 구조 설계 🌟 ❝도메인이 가장 중요하다.❞ 도메인 = 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말한다.향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 한다.이렇게 하려면 web은 domain을 알고있지만 domain은 web을 모르도록 설계해야 한다. 이것을 web은 domain을 의존하지만, domain은 web을 의존하지 않는다고 표현한다. 예를 들어 w..
[MVC] Bean Validation 목차Bean Validation - 소개Bean Validation - 시작Bean Validation - 스프링 적용Bean Validation - 에러 코드Bean Validation - 오브젝트 오류Bean Validation - 수정에 적용Bean Validation - 한계Bean Validation - groupsForm 전송 객체 분리 - 소개Form 전송 객체 분리 - 개발Bean Validation - HTTP 메시지 컨버터 ✍ Bean Validation - 소개검증 기능을 지금처럼 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다.public class Item { pri..