본문 바로가기

공부 기록/Spring

(10)
[Spring] Null Safety - @NonNull, @Nullable Null Safety - null 체크를 하는 보일러 플레이트 코드를 만들지 않는 방법 @NonNull - 메서드 파라미터 => null 데이터가 들어오는 것을 사전에 방지 public void method(@NonNull String request) { ... } - 프로퍼티 => null을 저장하는 경우 경고(IDE에서의 경고) @NonNull public String request = "REQUEST"; public void method() { ... request = null; // 경고 ... } - 메서드 => null 리턴 시 경고 @NonNull public String method() { ... return null; // 경고 } @Nullable - 해당 데이터가 null일 수 있음을..
[Spring] 스프링 리소스, SpEL(Spring Expression Language) 스프링 리소스(Spring resource) https://yurison.tistory.com/454 76일차 - 스프링 리소스(Spring Resource) 스프링 리소스(Spring Resource) - 스프링 프레임워크에서 제공하는 정적 리소스 관리 기능 - 클래스패스 상의 리소스나 웹 애플리케이션의 상대 경로에 있는 리소스를 쉽게 찾을 수 있다. - 리소스의 yurison.tistory.com SpEL(Spring Expression Language) - 스프링 표현 언어(SpEL)는 짧고 간단한 문법을 통해 필요한 데이터나 설정 값을 얻어올 수 있게 하는, 특별한 형태의(표현식에 가까운) 간편한 언어 - 표현 언어는 스프링 뿐만 아니라 웹 언어에서 많이 존재한다. - 주로 @Value("${co..
[Spring] @Data 어노테이션 @Data - 롬복의 어노테이션 - 모든 필드에 대한 Getter, Setter, equals(), hashCode(), toString() 메서드, 기본 생성자, 모든 필드를 포함한 생성자를 생성 @Data를 사용하지 않았을 때 import java.util.Objects; public class Member { private String name; private int age; public Member() {} public Member(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = na..
[Spring] Filter Filter - 웹 어플리케이션에서 관리되는 영역 - 스프링부트 Framework에서 클라이언트의 요청/응답에 대해 최초/최종 단계의 위치에 존재하므로 요청/응답의 정보를 변경하거나 스프링에 의해 데이터가 변환되기 전의 순수한 클라이언트의 요청/응답 값을 확인할 수 있다. - 유일하게 ServletRequest, ServletResponse의 객체를 변환할 수 있다. - 주로 스프링 프레임워크의 요청/응답 로깅이나 인증과 관련된 로직들을 해당 필터에서 처리한다. => 서비스 비즈니스 로직과 분리시킨다. Filter 사용하기 Filter를 상속 받은 GlobalFilter.java import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter;..
[Spring] Exception Handling @ControllerAdvice : Global 예외 처리 및 특정 package, Controller 예외 처리 @ExceptionHandler : 특정 Controller 예외 처리 @ControllerAdvice와 @ExceptionHandler의 활용 @RestControllerAdvice public class GlobalControllerAdvice { @ExceptionHandler(value = Exception.class) // 모든 예외에 대한 처리 public ResponseEntity exception() { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(""); } @ExceptionHandler(value..
[Spring] Validation(2) - Custom Validation Custom Validation의 두 가지 방법 1. AssertTrue / False 어노테이션을 통해 특정 메서드를 커스텀 검증 로직으로 적용 2. 커스텀 어노테이션 생성 및 ConstraintValidator를 적용하여 재사용 가능한 커스텀 검증 로직 적용 1) @AssertTrue 어노테이션을 이용한 검증 @Getter public class member { ... private String joinDate; @AssertTrue // 값이 true일 때 검증 성공 public boolean isValidDate() { if( ... ) { // joinDate의 값이 유효하지 않은 입력값일 때 return false; } return true; } } 클래스 내에 검증 로직을 적용한 메서드를 생..
[Spring] Validation(1) - Annotation Validation - Error나 Exception을 방지하기 위해서 미리 검증하는 과정 - 개발자가 주로 챙겨야 하는 검증은 크게 두 종류로 나뉜다. => 데이터 검증, 비즈니스 검증 데이터 검증 - 필수 데이터의 존재 유무 - 문자열의 길이나 숫자형 데이터의 경우 값의 범위 - email 등 특정 형식에 맞춘 데이터 비즈니스 검증 - 서비스의 정책에 따라 데이터를 확인하여 검증 - 경우에 따라 외부 API를 호출하거나 DB의 데이터까지 조회하여 검증하는 경우도 있다. 비즈니스 로직에 검증 코드 삽입 시 주의사항 1. 여러 가지 상황에 대해 검증 시 코드의 길이가 길어질 수 있다. 2. 핵심 로직과의 분리가 필요하다. 3. 검증 로직이 흩어져 있는 경우 혼란을 초래하고 재사용하기 어렵다. 스프링이 제..
[Spring] AOP의 활용 디펜던시 설정 dependencies { implementation 'org.springframework.boot:spring-boot-starter-aop' } AOP의 활용1 @Aspect @Component public class ParameterAop { @Pointcut("execution(* com.example.demo.controller..*.*(..))") private void cut() { ... } @Before("cut()") public void before(JoinPoint joinPoint) { ... } @AfterReturning(value = "cut()", returning = "obj") public void afterReturn(JoinPoint joinPoint,..