[Spring] ArgumentResolver (HandlerMethodArgumentResolver)란 무엇일까?
·
TIL/Spring
ArgumentResolver(HandelrMethodArgumentResolver)란 무엇일까?스프링을 사용하면 애노테이션 기반의 컨트롤러는 매우 다양한 파라미터를 사용할 수 있는 걸 볼 수 있다.HttpServletRequest, Model, @RequestParam, @ModelAttribute은 물론 @RequestBody, HttpEntity 같은 HTTP 메시지를 처리하는 부분까지 매우 큰 유연함을 보여준다. 어떻게 이렇게 파라미터를 유연하게 처리할 수 있는 것일까?그 이유가 바로 오늘 알아보고자 하는 ArgumentResolver 덕분이다.정확히는 HandlerMethodArgumentResolver인데 줄여서 ArgumentResolver라고 부른다. 애노테이션 기반 컨트롤러 처리하는 Re..
[Spring] 서블릿 필터와 스프링 인터셉터(Servlet Filter, Spring Interceptor)
·
TIL/Spring
서블릿 필터(Servlet Filter)와 스프링 인터셉터(Spring Interceptor)는 왜 사용하는걸까?만약 우리가 개발을 할 때 로그인 여부를 체크하는 로직을 모든 컨트롤러 쪽에 작성을 한다면 작업이 많이 번거로울 것이다.이렇게 모든 컨트롤러 로직에서 공통으로 관심이 있는 것을 공통 관심사(cross-cutting concern)라고 한다. 이러한 공통 관심사는 스프링의 AOP로도 해결할 수 있지만,웹과 관련된 공통 관심사는 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP Header나 URL의 정보들이 필요한데, 서블릿 필터와 스프링 인터셉터는 HttpServletRequest를 제공하고 있어 편리하게 공통 관심사를 처리할 수 있다. ..
[Spring] Session으로 로그인 기능 구현하기(HttpSession, TrackingModes, Session Timeout)
·
TIL/Spring
오늘은 Session으로 로그인 기능 구현하는 부분에 대해서 정리하려고 한다.기능 구현하는 걸 정리하기 전에 먼저 간단하게 Cookie와 Session이 무엇이고 어떤 차이점이 있는지부터 살펴보자 Cookie와 Session 이란?HTTP 프로토콜의 특징은 클라이언트가 서버에 요청을 했을 때 요청에 맞는 응답을 보낸 후 연결을 끊는 처리방식이다.연결(Connection)을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.(Stateless 프로토콜)하지만, 개발을 하다보면 데이터 유지가 필요한 경우가 있는데 이런 무상태(Stateless) 경우를 대처하기 위해서 쿠키와 세션을 사용한다. 쿠키는 HTTP의 일종으로 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트가 ..
[Spring] Spring - Bean Validation
·
TIL/Spring
오늘은 Bean Validation에 대해서 정리해보려고 한다!Bean Validation 이란?이전에 정리했던 BindingResult 내용을 살펴보면 검증 부분에 대해서 직접 코드를 작성하였는데, 매번 코드를 작성하는 것도 번거롭고 특정 필드에 대한 검증 로직은 대부분 비슷한 부분에 대해서 검증을 진행한다(ex. 빈 값, 특정 값..) [Spring] Spring Validation-BindingResult(with.thymeleaf)Bean Validation을 사용하기 전에 BindingResult로 검증 로직을 작성하는 것에 대한 내용을 기록하고자 한다. 데이터를 검증하고 문제가 있는 경우 사용자에게 오류 메시지를 보여줌과 동시에 사용자가yelin1217.tistory.com이러한 검증 로직을 ..
[Spring] Spring Validation-BindingResult(with.thymeleaf)
·
TIL/Spring
Bean Validation을 사용하기 전에 BindingResult로 검증 로직을 작성하는 것에 대한 내용을 기록하고자 한다. 데이터를 검증하고 문제가 있는 경우 사용자에게 오류 메시지를 보여줌과 동시에 사용자가 입력한 값도 화면에 그대로 남기기 위해서 어떻게 할 수 있는지 하나씩 살펴보자!BindingResult는 무엇이며 어떻게 사용해야할까?org.springframework.validation.BindingResult는 스프링이 제공하는 검증 오류를 보관하는 객체이다.가장 주의해야할 점은 BindingResult의 파라미터 위치는 @ModelAttribute를 사용하는 검증이 필요한 객체 다음에 와야한다.그래야 스프링이 제공하는 BindingResult가 자동으로 검증 객체를 찾아 검증이 가능하기..
[Spring] 빈 스코프 란?
·
TIL/Spring
1. 빈 스코프 란?스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다.이것은 스프링 빈이 기본적으로 '싱글톤 스코프'로 생성되기 때문이다.스코프(scope)는 의미 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다.싱글톤기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.웹 관련 스코프request: 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프application: 웹의 서블릿 컨텍스트와..
[Error] java: variable XXXX not initialized in the default constructor
·
Trouble Shooting(Error)
스프링 공부를 하는 중에 애플리케이션 실행이 안되고 아래와 같은 에러 메시지가 발생했다. java: variable myLoggerProvider not initialized in the default constructor 생성자를 직접 코드를 구현하지 않고 @RequiredArgsConsructor 애노테이션을 사용했는데 생성자가 만들어지지 않고 있는 문제였다.해당 문제가 왜 발생하는지 찾아보니 Gradle 5부터는 애노테이션을 구분해서 추가해 주어야 한다고 한다. 내가 문제를 해결하기 전 build.gradle에 추가했던 건 아래와 같다.implementation 'org.projectlombok:lombok' 해당 에러를 해결하기 위해서 build.gradle를 아래와 같이 수정하였다.compile..
[Spring] 빈 생명주기 콜백 이란? - 스프링 초기화, 소멸 메서드 사용하기
·
TIL/Spring
보호되어 있는 글입니다.
[Spring] 찍어먹어보자! Spring Security와 인증/인가란 무엇인가?(feat. 로그인, 로그아웃, 회원가입 간단 구현)
·
TIL/Spring
찍어먹어보자! 인증과 인가란 무엇인가?인증(authentication)은 사용자의 신원을 입증하는 과정이다. 예를 들어 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라고 한다. 인가(authorization)는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 작업이다. 즉, 일반 사용자가 관리자 페이지에 접속할 수 없고 관리자는 관리자 페이지에 접속할 수 있는 것처럼 권한을 확인하는 것을 인가라고 한다. 찍어먹어보자! Spring Security란 무엇인가?스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이다.보안 관련 옵션을 많이 제공하며, 애너테이션으로 설정도 쉽다.CSRF 공격(사용자의 권한을 가지고 특정 동작을 수행하도록 유도하는 공격)..