2020-10-16

ha0kim·2020년 10월 16일
0

<< 코드리뷰 >>

생성자 의존성 주입 처리

예외처리 정리

벨리데이션 체크 로직

디비 서비스 로직으로 수정하기

ApiIgnore 공통화 처리

Count > 수정처리

@Repository

Param / DTO 구분해서 파라미터 처리

controller 단에서는 get / mapper 단에서 select : 네이밍 신경쓰기!

반복되는 영역을 추상화하여 더 이쁘게 짜기

  • 생성자 의존성 주입 처리

생성자의존성 주입은 스프링에서도 권장하는 의존성 주입 방식이다.
그 이유는 다른 의존성 주입 방식과 다르게 빈 생성을 주입 시점에 하기 때문이다.
다른 필드 / 수정자 의존성 주입방식은 빈을 생성 후, 그 다음에 주입한다.

따라서 생성자 의존성 주입방식이 권장되는 이유는 더 안전하고 효율적인 코드를 짤 수 있어서다.

- 순환 참조를 방지할 수 있다.
- 순환 참조가 발생하는 경우 애플리케이션이 구동되지 않는다.
- 테스트 코드 작성이 편리하다.
- 단순 POJO를 이용한 테스트 코드를 만들 수 있다.
- 나쁜 방식의 코딩을 방지해준다.
- 조금 더 품질 좋은 코드를 만들 수 있다.
- immutable(불변) 하다. > final
- 실행 중에 객체가 변하는 것을 막을 수 있다. > final
- 오류를 사전에 방지할 수 있다.
  • Exception 처리

GlobalResponseEntityExceptionHandler > @ExceptionHandler 이 구현되어있어 따로 예외처리를 하지 않아도됨

** @ExceptionHandler **
@Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. ({ }) 안에 처리할 예외 클래스를 넣은 후 매서드로 처리 내용을 구현하면 된다.

따라서, mybatis insert / update / delete 의 리턴 값을 카운팅하여 제대로 처리가 되었는지 확인하는 건 쓸모없는 짓이다.

  • @Valid
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);

profile
NORA / Back-End Developer

0개의 댓글