![[Spring] Bean Validation 알아보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMsECp%2Fbtr2OtfI3kP%2FvgTcijpKfYYLJgzdjcqfzK%2Fimg.png)

Bean이란?
Bean 이란 Spring IOC 컨테이너가 관리하는 자바 객체를 의미합니다.
new를 사용하여 객체를 생성하고 이용하는 것이 아닌, Spring 컨테이너에 의해 생명주기가 관리되는 객체를 의미합니다.
Spring Bean은 의존성 주입(DI)을 통해 다른 Bean과 연결되고 이를 통해 객체 간 의존성을 느슨하게 결합할 수 있습니다.
Bean 등록 방법
Bean 등록 방법은 크게 3가지가 있습니다.
1. XML 설정 파일을 사용하는 방법
- applicationContext.xml과 같은 XML 설정 파일에 Bean을 정의하고 등록하는 방법입니다.
2. Annotation을 사용하는 방법
- @Component, @Controller, @Service, @Repository 등을 사용하여 Bean을 등록하는 방법입니다.
3. Java Config를 사용하는 방법
- @Configuration을 사용하여 Java Config 클래스를 정의하고, @Bean을 사용하여 Bean을 등록하는 방법입니다.
Bean Validation?
Spring Bean Validation은 스프링에서 제공하는 기능으로, 클래스 필드에 annotation을 적용하여 필드가 갖는 제약 조건을 정의하며, 필드에 대한 유효성 검사를 간편하게 수행할 수 있게 합니다.
Spring에서 Bean Validation 사용하기
- build.gradle파일 dependencies에 dependency 추가하기
implementation 'org.springframework.boot:spring-boot-starter-validation'
- DTO 클래스 필드에 annotation 추가하기
@Getter
@Setter
public class PostUserDto {
@NotBlank(message = "회원 이름은 필수입니다.")
private String userName;
@NotBlank(message = "전화번호를 입력해주세요.")
private String phoneNumber;
@NotBlank(message = "이메일을 입력해주세요.")
@Email(message = "이메일 형식을 지켜주세요.")
private String email;
@NotBlank(message = "아이디를 입력해주세요.")
private String loginId;
@Pattern(regexp = "(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,20}"
, message = "패스워드는 대문자, 소문자, 특수문자가 적어도 하나씩은 있어야 하며 최소 8자리여야 하며 최대 20자리까지 가능합니다.")
private String password;
}
@NotNull: null만 허용하지 않음. "", " "은 허용
@NotEmpty: null과 "" 둘 다 허용하지 않음, " "은 허용
@NotBlank: null, "", " " 모두 허용하지 않음
@Email: 이메일 형식인지 검증
@Pattern: String값 필드에 정규 표현식을 검증(regexp 속성에 정규식 지정)
message 속성: validation 실패 시 경고 문구로 활용
- Controller 작성
@RestController
@RequestMapping("/app/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PostMapping("/sign-up")
public BaseResponse<PostUserDto> createUser(@Validated @RequestBody PostUserDto postUserReq){
User user = new User(postUserReq.getEmail(), postUserReq.getUserName(), postUserReq.getLoginId(), postUserReq.getPassword(), postUserReq.getMailReceive(), postUserReq.getPhoneNumber(), postUserReq.getSMSReceive());
userService.createUser(user);
return new BaseResponse<>(postUserReq);
}
}
@Validated: 필드에 적용된 어노테이션에 대한 유효성 검사를 진행

Exception Handler 사용하기
Exception Handler를 통하여 예외에 대한 메시지를 출력하였습니다.
@Getter
public class ApiException {
private final boolean isSucess;
private final String message;
private final HttpStatus httpStatus;
@Builder
public ApiException(String message, HttpStatus httpStatus){
this.isSucess = false;
this.message = message;
this.httpStatus = httpStatus;
}
}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public ResponseEntity<Object> handle(MethodArgumentNotValidException ex){
ApiException apiException = ApiException.builder().httpStatus(HttpStatus.BAD_REQUEST)
.message(ex.getFieldErrors().get(0).getDefaultMessage()).build();
return new ResponseEntity<>(apiException, HttpStatus.BAD_REQUEST);
}
}

참고자료
https://sanghye.tistory.com/36
[Spring Boot] @NotNull, @NotEmpty, @NotBlank 의 차이점 및 사용법
개발하시는 API 의 request parameter 의 null 체크를 어떻게 하고 계신가요? 대부분 별도의 null 체크 util 을 사용하거나, Controller 에서 조건문을 사용하여 null 을 체크하기도 합니다. 이러한 조건문과 메
sanghye.tistory.com
[Spring Boot] 스프링 빈(bean)이란? 스프링 빈 등록하는 방법
스프링(Spring) 빈의 개념과 빈을 등록하는 방법(컴포넌트 스캔과 자동 의존관계 설정, 자바 코드로 직접 스프링 빈 등록하기(Configuration))에 대해 공부하고 정리한 포스팅입니다.
velog.io
'Spring' 카테고리의 다른 글
[Spring] 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading) 알아보기 (0) | 2023.03.19 |
---|---|
[Spring] Cascade옵션 알아보기 (0) | 2023.03.15 |
[Spring] DTO를 사용하는 이유를 알아보자 (0) | 2023.03.04 |
[Spring] 의존성 주입(DI) 알아보기 (0) | 2023.02.28 |
[Spring] JPA 연관관계 매핑 알아보기 (0) | 2023.02.23 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!