Skip to main content Link Search Menu Expand Document (external link) Copy Copied

코드리뷰에서 배운 점

  1. 단일 필드 클래스와 빌더 패턴
    단일 필드만 가진 클래스는 객체 생성의 유연성을 충분히 제공하지 못하기 때문에, 빌더 패턴을 사용하는 것을 지양하는 것이 더 좋다.

  2. 애너테이션의 배치 순서
    메서드 동작에 영향을 주는 애너테이션(ex: @Transactional)은 메서드 선언부 상단에, 컴파일 시점에만 영향을 주는 애너테이션(ex: @Override)은 그 아래에 배치하는 것이 관례적이며, 코드 가독성 측면에서도 유리하다.

  3. DTO에서 롬복 사용 주의
    DTO에서는 무분별한 롬복(ex: @Data) 사용을 지양하여, 데이터의 불변성이 의도치 않게 깨지는 상황을 방지하는 것이 좋다. 관련해서, RequestDto에 롬복 사용 시 고려해야 할 부분은 이 블로그 글을 참고하면 도움이 될 것 같다.


유저 도메인 API 작업 중 발생한 문제 회고

오늘은 드디어 유저 도메인 API 작업을 시작하려 했으나, 전날 마무리했다고 생각한 Security 모듈에서 다양한 에러가 발생했다. 403, 401, 404, 500 에러가 복합적으로 발생하여 문제의 원인을 정확히 파악하기 어려웠다. 필터, SecurityContextHolder, 예외 처리, JWT, SecurityConfig 등 다양한 부분에서 문제를 찾으며 8시간을 헤맨 것 같은데 정신적으로 너무 지쳤다. 이후 마음을 다잡고 문제가 중첩되어있을 수도 있다는 전체를 추가하고 하나씩 원인 파악을 시작해서 결국, 총체적 난국이었다는 것을 알게되었다.


  • RequestDto 문제
    @RequestBody에 사용된 RequestDto@NoArgsConstructor가 누락되어 Jackson이 데이터 바인딩에 실패했다. 이로 인해 Security 인증 필터에서 500 에러가 발생하며 예외 메시지 (no Creators, like default constructor, exist): cannot deserialize from Object value가 출력되었다.

  • 404와 403 에러 연쇄 발생
    Security context에서 예외가 제대로 처리되지 않아 Spring context가 /error로 리다이렉트했으며, 이때 해당 리다이렉트 접근 권한이 없어 403 에러로 이어졌다.

  • 중복 파싱 문제
    파싱이 중복 처리되는 부분에서 추가적인 예외가 발생했다.

  • 로그아웃 및 토큰 갱신 기능 미비
    로그아웃 및 토큰 갱신 기능이 없어 토큰 만료 시 예외가 발생하는 상황이었다.

최종적으로 토큰 만료 시간을 제거하는 대신 코드리뷰에서 토큰의 사용 목적에 맞춰 임의로 긴 시간으로 설정하는 것이 낫다는 피드백을 받아 수정하였다.


오늘 자주 사용한 Git 명령어들

푸시하지 않은 상태에서 이전 커밋에 합치기

// 스테이지에 Add하기
git add {파일의 절대경로}

// 이전 커밋에 반영하기
git commit --amend

긴급 수정 작업을 위한 Git 명령어 순서

# 현재 작업 중인 파일을 스태시하기
git stash

# 새로운 브랜치를 생성하고 해당 브랜치로 체크아웃하기
git checkout -b {새로운-브랜치-이름}

# 수정 작업 완료 후 변경 사항 커밋하기
git add .
git commit -m "긴급 수정 작업"

# 브랜치를 원격 저장소에 푸시하기 (필요한 경우)
git push origin {새로운-브랜치-이름}

# 기존 작업 복구를 위해 스태시를 적용하기 (작업 브랜치로 돌아가서)
git checkout {원래-작업-브랜치}  # 원래 작업하던 브랜치로 돌아가기
git stash pop                     # 스태시에서 복구하기