<< 코드리뷰 >>
생성자 의존성 주입 처리
예외처리 정리
벨리데이션 체크 로직
디비 서비스 로직으로 수정하기
ApiIgnore 공통화 처리
Count > 수정처리
@Repository
Param / DTO 구분해서 파라미터 처리
controller 단에서는 get / mapper 단에서 select : 네이밍 신경쓰기!
반복되는 영역을 추상화하여 더 이쁘게 짜기
생성자의존성 주입은 스프링에서도 권장하는 의존성 주입 방식이다.
그 이유는 다른 의존성 주입 방식과 다르게 빈 생성을 주입 시점에 하기 때문이다.
다른 필드 / 수정자 의존성 주입방식은 빈을 생성 후, 그 다음에 주입한다.
따라서 생성자 의존성 주입방식이 권장되는 이유는 더 안전하고 효율적인 코드를 짤 수 있어서다.
- 순환 참조를 방지할 수 있다.
- 순환 참조가 발생하는 경우 애플리케이션이 구동되지 않는다.
- 테스트 코드 작성이 편리하다.
- 단순 POJO를 이용한 테스트 코드를 만들 수 있다.
- 나쁜 방식의 코딩을 방지해준다.
- 조금 더 품질 좋은 코드를 만들 수 있다.
- immutable(불변) 하다. > final
- 실행 중에 객체가 변하는 것을 막을 수 있다. > final
- 오류를 사전에 방지할 수 있다.
GlobalResponseEntityExceptionHandler > @ExceptionHandler 이 구현되어있어 따로 예외처리를 하지 않아도됨
** @ExceptionHandler **
@Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. ({ }) 안에 처리할 예외 클래스를 넣은 후 매서드로 처리 내용을 구현하면 된다.
따라서, mybatis insert / update / delete 의 리턴 값을 카운팅하여 제대로 처리가 되었는지 확인하는 건 쓸모없는 짓이다.
1. @NotNull > Not Null 체크
2. @Null > Null 체크
3. @Size(min=,max=) > 문자열, 배열등의 크기 체크
4. @Pattern(regex=) > 정규식 체크
5. @Max(숫자) > 지정 값 이하인지 체크
6. @Min(숫자) > 지정 값 이상인지 체크
7. @Future > 현재 보다 미래인지 체크
8. @Past > 현재 보다 과거인지 체크
9. @Digits(integer=, fraction = ) > 지정된 정수와 소수 자리 수 보다 작은지 체크
10. @DecimalMax(value=) > 지정된 값(실수) 이하인지 체크
11. @DecimalMin(value=) > 지정된 값(실수) 이상인지 체크
12. @AssertFalse > false 체크
13. @AssertTrue > true 체크
@Valid 에 일치하지 않는 경우, Exception ? Response ? 어떻게 떨어질 것인가!
컨트롤러에서 서비스 로직 구현하지 말기!
@ApiIgnore 공통화 처리
.ignoredParameterTypes()로 처리
파라미터에 ignore 처리를 할 클래스를 넣어준다~
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.ignoredParameterTypes(Map.class, ModelMap.class, User.class, Pageable.class)
.select()
.apis(RequestHandlerSelectors.basePackage(""))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo())
.groupName("admin")
;
}
@Repository
Could not autowire. No beans of '***Mapper' type found.
위와 같은 경고의 원인은 지정된 Mapper class의 @Repository 설정이 누락되어 있었다.
즉, bean에 등록이 안된 class를 찾다보니 발생한 문제이다.
ArrayList를 사용할 때 주의할 점
ArrayList는 기본적으로 다음과 같이 초기화를 할 수 있다.
List imgList = new ArrayList();
배열의 크기를 알 수 있다면 크기를 지정해주는 게 이상적이다.
List<> imgList = new ArrayList<>(6);