Spring(18)
-
[Spring Security] 인증 방식 비교(서버 기반 인증, 토큰 기반 인증)
API를 이용한 웹서비스를 개발할 때, 토큰을 사용하여 사용자들의 인증 작업을 처리하는 것이 가장 좋은 방법이라고 알고있어 토이 프로젝트에서 구현해보고 있습니다. 이번 포스팅에서는 서버 기반 인증 시스템의 개념과 한계, 그리고 토큰 기반 인증 시스템의 장단점에 대해 알아보도록 하겠습니다. 서버(세션) 기반 인증(Session, Cookie) 서버 측에서 사용자들의 정보를 기억하기 위해 세션을 유지해야 하고, 세션을 메모리, 디스크, 데이터베이스 등을 통해 관리합니다. 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하여 유지해야 하므로 Stateful 한 구조를 가집니다. [ 인증 방식 ] 사용자가 로그인 시 올바른 사용자임을 확인하고, 고유한 세션 ID 값을 부여해 세션 저장소에 저장하고 클..
2022.07.27 -
[Spring Security] Filter와 Interceptor 차이 및 용도
공통적으로 처리할 부분 자바 웹 개발을 하다 보면 공통업무 코드가 발생합니다. 이를 매 페이지마다 작성하면 코드 중복과 리소스 낭비로 이어지므로 해당 부분은 따로 빼서 관리하는 게 좋은데요. 대표적으로 Filter, Interceptor는 모두 무슨 행동을 하기 전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용됩니다. 이번 포스팅에서는 요청의 흐름에 따라 필터, 인터셉터의 개념에 대해 알아보겠습니다. 전체 흐름 요청이 들어왔을 때 진행되는 순서는 Filter → Interceptor → AOP → Interceptor → Filter의 순으로 거치게 됩니다. Filter Filter는 J2EE표준 스펙 기능으로, Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞..
2022.07.27 -
Validation , Bean Validation, 오류 코드 설계 (2/2)
Validation 포스팅에 이어서 이번에는 Bean Validation에 대해 알아보도록 하겠습니다. Validation에 대해 잘 모르신다면 가볍게 보고 오시는 것을 추천합니다. Validation , Bean Validation, 오류 코드 설계 (1/2) Validation , Bean Validation, 오류 코드 설계 (1/2) Validation 이란 예를 들어 고객이 상품 등록 폼에서 상품명을 입력하지 않거나, 가격, 수량 등이 너무 작거나 커서 검증 범위를 넘어서면, 서버 검증 로직이 실패해야 합니다. 이렇게 검증에 실패 lealea.tistory.com 검증 기능을 저번 포스팅처럼 매번 코드로 작성하는 것은 상당히 번거롭습니다. 특정 필드에 대한 검증 로직은 주로 빈 값인지 아닌지, ..
2022.06.30 -
Validation , Bean Validation, 오류 코드 설계 (1/2)
Validation 이란 예를 들어 고객이 상품 등록 폼에서 상품명을 입력하지 않거나, 가격, 수량 등이 너무 작거나 커서 검증 범위를 넘어서면, 서버 검증 로직이 실패해야 합니다. 이렇게 검증에 실패한 경우 고객에게 다시 상품 등록 폼을 다시 보여주고, 입력한 데이터를 유지한 상태에서 어떤 값을 잘 못 입력했는지 알려주어야 합니다. 스프링이 제공하는 검증 오류 처리 방법을 코드를 통해 알아보겠습니다. 여기서 핵심은 BindingResult입니다. @Slf4j @Controller @RequestMapping("/validation/v1/items") @RequiredArgsConstructor public class ValidationItemControllerV1 { @PostMapping("/add"..
2022.06.30 -
[Spring MVC] 로그인1 - 쿠키, (서버)세션, 서블릿 HttpSession
package 구조 hello.login domain item member login web item member login 도메인이 가장 중요하다. 도메인 : 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말합니다. 향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 합니다. = web은 domain을 알고 있지만 domain은 web을 모르도록 설계 = web은 domain을 의존하지만, domain은 web을 의존하지 않는다. 예를 들어 web 패키지를 모두 삭제해도 domain에는 전혀 영향이 없도록 의존관계를 설계하는 것이 중요하고 반대로 domain은 web을 참조하면 안 됩니다. 홈 화면 개발 HomeController -..
2022.06.28 -
Servlet(서블릿), Dispatcher Servlet, Spring MVC
Servlet(서블릿)이란? 서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술입니다. Spring MVC에서 Controller로 이용되며, 사용자의 요청을 받아 처리한 후에 결과를 반환합니다. 디스패처 서블릿(Dispatcher Servlet)이란? 디스패처 서블릿이란 톰캣과 같은 서블릿 컨테이너를 통해 들어오는 모든 요청을 제일 앞에서 받는 프론트 컨트롤러입니다. 디스패처 서블릿은 공통된 작업을 처리한 후에, 적절한 세부 컨트롤러로 작업을 위임해줍니다. 그리고 각각의 세부 컨트롤러는 처리할 부분을 처리하고 반환할 view를 Dispatcher Servlet에 넘기게 됩니다. Spring MVC란? Spring MVC란 웹 애..
2022.06.27