[Spring boot] Springboot 03_로깅, 롬복, validation
in etc on Spring boot
Spring boot 03
로깅, 롬복, Validation
로깅
- 스프링 부트는 Commons Logging을 사용
- 개발 당시에 SLF4j가 없었기 때문이다.
- 결론: 스프링 5이후부터, Commons Logging은 SLF4j로 보내지고 최종적으로 Logback이 찍음
- 결국 찍히는 로그는 Logback 으로 찍히는 것이다
로깅 파일로 출력하기
- application.properties 파일안에
logging.path=logs
- logs 디렉토리가 현재 project 안에 생성되면서 log가 남는다.
- 기본적으로 10mb까지 로그가 남는다.
- 로그사이즈 등에 따른 설정은 변경이 가능하다. Log관련 공식문서 바로가기
Logback
- spring boot에서 로그 설정하기(콘솔)
- 동작방식
- spring boot는 logback을 사용하며, 애플리케이션을 실행하면서 spring boot는 logback.xml을 검색한다.
- logback.xml에서 로그가 남을 수 있도록 설정한다.
logback.xml 설정 참고하기, 정아마추어 JEONG_AMATEUR 님
Lombok
- @Getter / @Setter
- @Data
- @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor
@RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만든다. 아래는 예시
@RequiredArgsConstructor
public class User {
private Long id;
@NonNull
private String username;
@NonNull
private Stromg password;
}
username; password 필드만 가진 생성자를 만들어줌. 예시에는 없지만 final을 붙인 필드도 추가.
- @AllArgsConstructor(모든 인자를 가진 생성자)
- @NoArgsConstructor(기본 생성자)
- @RequiredArgsConstructor(필수 인자만 있는 생성자)
- @Builder: 다수의 필드를 가지는 클래스의 경우, 생성자 대신에 빌더를 사용하는 경우에 사용.(빌더를 자동 추가)
- 단점: 인자가 추가되는 일이 발생하면 코드를 수정하기 어렵다.
@Builder
public class User {
private String name;
private int id;
private List<Integer> score;
}
// 사용
User user = User.builder().name("ABC").id(12).score(10).score(20);
- @NonNull : 변수에 붙이면 Null을 체크해줌. null값이 넘어오면 NullPoinerException 예외 발생
Validation
- 어노테이션을 이용해서 bean 유효성을 검사
Entity
- @NotNull (null 체크)
- @NotEmpty (null, 0 체크, String Collection)
- @Positive (양수 체크)
- @Negative (음수 체크)
- @Min, @Max
- @Size (String 범위)
- @Email (e-mail 형식 체크) 등이 있다.
@NotNull @Size(min = 5, max = 100)
private String deliveryAddress;
@Min(1) @Max(6)
private Integer deliveryKey;
Controller
- class 레벨에서 @Validated
- RestApi Method의 parameter에서 @Valid
@Validated
public class DeliveryController {
//String key를 Min 값 검증위해서 @Valiedated 사용
//Entity인 delivery 검증을 위해서 @Valid 사용
public ResponseEntity updateDelivery(
@Min(value = 1) String key,
@Valid @RequestBody Delivery delivery) {
...생략...
}
}