본문 바로가기

Spring & Spring Boot

(15)
Spring Boot에선 예외를 어떻게 처리할까?(전역, 커스텀 예외처리) 프로그램을 개발하다 보면, 예외를 던지는 상황이 생긴다. try, catch, finally를 사용해 이 예외를 다룰 수 있다. 하지만, 이는 프로젝트 규모가 커지면 코드 중복, 리소스 낭비 등으로 이어진다. Spring Boot에서는 이 예외를 어떻게 다룰까? 우선, Spring Boot는 실행 중 발생한 예외는 기본적으로 처리해 준다.   하지만, 이런 Response는 프론트엔드 입장에서 알아보기 어렵다. 회원가입 시 이름, 이메일, 전화번호를 POST로 우리 서버에 보내는 상황에서 HTTP 400 만으로는 이름이 잘못되었는지, 전화번호가 잘못되었는지 알 수 없다. (Message를 사용하긴 하지만, 프론트의 코드로 Message를 구별하긴 힘들다. 특히 규모가 커질수록…) 이런 문제가 생기지 않..
Spring Boot의 ResponseEntity Spring Boot에선 기본적으로 ResponseEntity 라는 클래스를 제공한다. 이는 Http 요청에 대한 Response를 설정할 수 있는 클래스로, Body, Header, StatusCode를 설정할 수 있다.  이 ResponseEntity 클래스를 사용해 적절한 Response를 보낼 수 있다.  ResponseEntity는 HttpEntity를 상속받는다.public class HttpEntity { private final HttpHeaders headers; @Nullable private final T body;}public class ResponseEntity extends HttpEntity { private final HttpStatusCode status; pub..
Dto에 Validation 적용하기 build.gradle에 다음을 추가한다. implementation 'org.springframework.boot:spring-boot-starter-validation' validation 어노테이션 목록은 다음과 같다. @Null - // null만 혀용합니다. @NotNull - // null을 허용하지 않습니다. "", " "는 허용합니다. @NotEmpty - // null, ""을 허용하지 않습니다. " "는 허용합니다. @NotBlank - // null, "", " " 모두 허용하지 않습니다. @Email - // 이메일 형식을 검사합니다. 다만 ""의 경우를 통과 시킵니다. @Email 보다 아래 나올 @Patten을 통한 정규식 검사를 더 많이 사용합니다. @Pattern(regexp..
Spring Security jwt 적용, 커스터마이징 Spring Security, jwt를 사용하기 위해서 build.gradle의 dependencies에 다음을 추가한다. implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'io.jsonwebtoken:jjwt-api:0.11.5' implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5' 그 다음, SecurityConfig 를 작성한다. SecurityConfig는 Spring Security의 보안 설정을 정의하는 역할을 한다. 보안 구성 및 규칙, 세션 및 로그인 , C..
Spring Security 구조와 동작 원리 Spring Security Spring Security란, Http Request가 DispatcherServlet으로 도달하기 전 Servlet의 Filter를 기반으로 Request에 대한 인증과 인가를 적용시켜주는 프레임워크이다. 일반적으로 클라이언트에서 서버로 요청을 보내면, DispatcherServlet이 하나의 HttpServeletRequest를 받아서 요청을 처리하고 HttpServletResponse 응답을 클라이언트로 보낸다. 그런데, 하나 이상의 Filter가 포함된다면, 클라이언트에서 보낸 요청이 Servlet으로 전달되기 전에 Filter를 거치게 된다. 클라이언트가 애플리케이션에 하나의 요청을 보내면, 컨테이너는 하나의 FilterChain을 생성한다. FilterChain ..