본문 바로가기
회고

210520_TIL

코동이 2021. 5. 21.

1. Facts(사실, 객관)

- 클린코드 7장 읽기

- 거래목록, 거래후기 화면 만들기

- @Valid 오류처리 실습

- Inteceptor 강의

2. Feelings(느낌, 주관)

- 회사에서 OS 서버 재배포 때문에 12시까지 밤에 묶여 있었습니다. ㅜㅜ 사실 아무것도 하지 않고 묶여있었기 때문에 선임과 수다를 많이 떨고 개인적인 공부를 했습니다. SpringBoot와 Visual Studio Code를 연동하여서 간단한 프로젝트를 계속 해볼 수 있어서 다행입니다. Intellij를 사용하면, 아무래도 라이센스때문에 막혀있습니다.

 

- 클린코드 7장을 읽었습니다. 클린코드는 굉장히 쉽게 풀어서 잘 쓴 책이라고 생각됩니다. 일정부분은 Effective Java와 유사한 부분이 있어서 복습도 되고 좋았습니다.

 

- @Valid 혹은, 생성 Dto에 대한 검증 처리를 어떻게 해야하는지 실습도 해보고 고민도 많았습니다. 특히 최근에는 어노테이션 만들기를 해보면서 직접 유효성의 기준을 정하는 것도 해보았으므로 @Valid에 관한 고민을 했습니다.

 

- Inteceptor는 Spring에서 어떻게 사용되는지 사용법 측면에서 강의가 도움이 됐습니다. 이후에는 세션 검증이나 토큰 검사를 하는 로직을 좀 더 열심히 파헤쳐 볼 생각입니다.

3. Findings (배운 점)

* 클린 코드

*7장 오류처리- 오류대신에 예외를 사용하는 것이 훨씬 코드가 깔끔하다- try-catch가 필요한 예외가 발생할 것 같은 부분은 미리 TDD로 예외를 검증해 구조를 만든다이후 정상적인 로직에 대해서 짠다- 확인된 예외보다는 미확인 예외를 던진다. 확인된 예외는 모두 선언부에 throws를 추가해야하므로 하위 계층이 많을수록 엄청난 수정이 필요하다. 또한 상위는 하위에 대해서 알아야하므로 캡슐화가 깨진다.- 외부 라이브러리가 오류처리가 복잡할 경우 감싸기 클래스를 만들면 의존성을 줄이고 깔끔하게 처리할 수 있다- null을 반환하지말고 적절히 예외를 발생시킨다. 예외가 필수가 아니라면 특수 사례 객체나 결과값을 리턴한다.- ( xxx. != null )보다는 null일 경우 예외를 발생하게 하도록 코드를 짠다. 

 

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ErrorResponse handleMethodArgumentNotValid(MethodArgumentNotValidException e) {
    List<Error> errorList = new ArrayList<>();
    e.getBindingResult().getAllErrors().forEach(error -> {
        FieldError fieldError = (FieldError) error;
        String field = fieldError.getField();
        String message = fieldError.getDefaultMessage();
        String invalidValue = fieldError.getRejectedValue().toString();
        Error errorMessage = Error.builder()
                .field(field)
                .message(message)
                .invalidValue(invalidValue)
                .build();
            
        errorList.add(errorMessage);
    });
    return ErrorResponse.withErrorFrom(HttpStatus.BAD_REQUEST.value(), errorList);
}

 다소 억지스러운 부분이 있지만 @Valid의 여러 개의 오류를 잡도록 List<Error>를 만들었습니다. 보통 @Valid가 여러개 잘못되어도 하나씩만 오류를 확인하기 때문입니다. 이전에는 stream()형태를 많이 사용해서 내부의 내용을 조회했지만 이번에는 map이나 filter요소 필요 없이 내부를 순회해서 list에 추가하는 것이기 때문에 foreach로 해결합니다

 

4. Affirmation (자기 선언)

- 나는, 일정이 촉박하거나 힘든 일이라도 항상 잘 완수하려는 긍정적인 사람이다

- 나는, 어떠한 환경에서도 항상 배울 점을 찾기위해 노력하고 있는 사람이다. 

5. Future Action ("구체적" 행동 계획)

- 어노테이션 만들기 블로그 글 작성, 실습

- JPA강의 듣기

- 클린코드 8, 9장

반응형

'회고' 카테고리의 다른 글

TIL_210524  (0) 2021.05.25
210521_TIL  (0) 2021.05.22
210519_TIL  (0) 2021.05.20
210518_TIL  (0) 2021.05.19
210517_TIL  (0) 2021.05.18