2021-03-19-TIL

Custrom Exception을 만들고 @ControllerAdvice 사용하기

  • https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

[CODE REVIEW]

[August]

  • 배포 서버 기능
    • 비밀번호 변경 안 하는 방법이 없다. 둘 다 입력하는 방법 밖에 없음
    • 다른 사람 정보 수정 -> redirect:/
    • 로그인 실패 -> redirect:/
    • qna/list에서 이름 클릭 안됨, qna/show 에서 이름 클릭 안됨
    • 답변 수정 안됨
  • 소스코드
    • DateTimeUtils에 메서드가 없는데, 이 부분에서 포맷팅을 담당해도 될 것 같습니다.
    • HttpSessionUtils::isLoginUser 에서 한줄로 작성 가능할 것 같습니다.
    • AnswerService에서 두 개를 주입받는데, 보통 두 개 이상 주입받아도 상관 없는가요? 주입방향이 꼬이지만 않는다면?
    • User::updateUserInfo 에서 String newPassword를 받지말고 그냥 이전 단계에서 패스워드를 setter로 변경하고 넘겨주는 방법도 있습니다.
    • checkPassword에 String만 받기때문에 getter를 사용하면서 비교하는 코드가 많은데, 그냥 객체로 받아서 패스워드를 내부에서 비교하도록 checkPassword를 오버로딩해도 될 것 같습니다.

세션은 컨트롤러에서 검증하고, 서비스로 넘기지 않는 것이 안전하다?

Answer가 Question을 갖고있고, Question이 Answer를 갖고 있어서 무한루프라 돌아서 Nested loop 에러가 발생할 수 있다. 이때 DTO를 정의해서 questionId를 반환하는 식으로 해결 가능

  • 같은 계층 간의 주입이 바람직한가? 한단계 낮은 계층을 주입받는게 바람직한가?
    • 아예 그런 상황이 안 나오도록 Answer는 독자적으로 존재할 수 없다. QuestionService에서 Answer를 처리하는게 바람직하다. 의존성이 있기 때문.
    • 하지만 반드시 필요한 상황이라면?