반응형
제육's 휘발성 코딩
반응형
article thumbnail
[Spring] Filter 순서 지정 (Order, @WebFilter, FilterRegistrationBean)
🔷 Spring/MVC 2023. 3. 4. 15:30

Filter 소개 Filter는 애플리케이션 레벨에서 로그인, 시큐리티, Jwt 등 구현을 하다 보면 Dispatcher Servlet에 도달하기 전 요청에서 토큰 검사 등 유효성 검사를 처리하기 위해 사용되며 Chaining 방식으로 여러 개의 필터를 설정할 수 있습니다. 필터는 Spring Context 내부에 도달하기 전인 WAS 인입 시점에 로직을 처리해 줍니다. Filter 인터페이스를 살펴보면 doFilter 메서드가 보이는데, 이 메서드가 다음에 체이닝 할 필터가 있으면 다음 필터로 넘겨주고, 없으면 서블릿을 호출해 줍니다. public interface Filter { public default void init(FilterConfig filterConfig) throws ServletEx..

article thumbnail
[MVC-2] 스프링 파일 업로드, 다운로드
🔷 Spring/MVC 2022. 6. 2. 16:15

파일 업로드 HTML 폼 전송 방식에는 application/x-www-form-urlencoded, multipart/form-data 두 가지가 있다. 파일 업로드를 이해하려면 이 두 가지 방식의 차이에 대해 이해해야 한다. HTML 폼데이터를 서버로 전송하는 가장 기본적인 방법으로, 별도의 enctype이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 Content-Type: application/x-www-form-urlencoded 를 추가한다. 여기서 단점은 보내야할 데이터가 여러 개인 경우, 문자와 바이너리를 동시에 전송해야하는 상황이 자주 있다는 것이다. 이 문제를 해결하기 위해 HTTP는 multipart/form-data 라는 전송 방식을 제공한다. multipart/form-da..

article thumbnail
[MVC-2] 스프링 타입 컨버터
🔷 Spring/MVC 2022. 6. 2. 02:15

스프링 타입 컨버터 문자를 숫자로 변환하거나, 숫자를 문자로 변환해야하는 것처럼 애플리케이션에서 개발하다보면 타입을 변환해야 하는 경우가 상당히 많다. 이 때 스프링 타입 컨버터를 사용한다. 프로젝트 생성 다음과 같이 spring.io 에서 프로젝트를 생성하자. 스프링 타입 컨버터 소개 package hello.typeconverter.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @RestController public class ..

article thumbnail
[MVC-2] 스프링 API 예외 처리
🔷 Spring/MVC 2022. 6. 1. 20:36

서블릿 API 예외 처리 package hello.exception.sevlet; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; @Component public class WebServerCustomizer implements WebSer..

article thumbnail
[MVC-2] 스프링 예외 처리와 오류 페이지
🔷 Spring/MVC 2022. 6. 1. 15:35

프로젝트 생성 다음과 같이 스프링 프로젝트를 생성하자. 서블릿 예외 처리 스프링 사용되기 이전에 순수 서블릿 컨테이너는 예외를 어떻게 처리하는 지 알아보자. 서블릿은 Exception, response.sendError(Http 상태 코드, 오류 메시지) 총 2가지 방식으로 예외 처리를 지원한다. Exception 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main 메서드를 넘어서 예외가 던져지게 된다면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 예외를 처리하지 않고 서블릿 컨테이너를 넘게되면 어떻게..

[MVC-2] 스프링 로그인 - 필터, 인터셉터
🔷 Spring/MVC 2022. 4. 11. 23:38

로그인 처리 - 필터, 인터셉터 서블릿 필터 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다는 요구사항을 살펴보자. 로그인하지 않은 사용자도 URL을 알고 있다면 직접 호출하여 관리 화면에 들어올 수 있다. 이 부분을 해결하려면 등록, 수정, 삭제, 조회 등등 상품관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사라고 한다. 스프링의 AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사는 HTTP의 헤더나 URL의 정보가 필요한데, 이 부분을 HttpServletRequest를 제공하는 서블릿 필터나 스프링 인터셉터를 사용하는 것이 바람직하다. 서블릿 필터 흐름 HTTP 요청 - WAS - 필터 - 서블릿 - ..

[MVC-2] 스프링 로그인 처리 - 세션 , 쿠키
🔷 Spring/MVC 2022. 4. 11. 18:09

로그인 처리 - 쿠키, 세션 로그인 요구 사항 홈 화면 - 로그인 전 회원 가입 로그인 홈 화면 - 로그인 후 사용자 이름 상품 관리 로그아웃 보안 요구사항 로그인 사용자만 상품에 접근하고, 관리 로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면 이동 회원 가입, 상품 관리 패키지 구조 설계 domain item member login web item member login 도메인이 가장 중요하다. 도메인은 화면, UI, 기술 인프라 등등의 영역을 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 의미한다. 향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 한다. 즉, web은 domain을 의존하지만, domain은 web을 의존하지 않도록 설계하는 것이 중요하다...

[MVC-2] 스프링 검증 - Bean Validation
🔷 Spring/MVC 2022. 4. 11. 12:19

Bean Validation 검증 기능을 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. 이러한 불편함을 애노테이션 하나로 검증 로직을 적용한 것이 Bean Validation이다. implementation 'org.springframework.boot:spring-boot-starter-validation' build.gradle에 라이브러리를 추가하자. 해당 라이브러리를 등록하면 스프링 부트는 자동으로 글로벌 Validator로 등록한다. 단, 사용할 때 해당 메서드 파라미터에 @Validated 또는 @Valid 를 넣어줘야 한다. 검증 오류가 발생하면 FieldError, Obj..

반응형
반응형