에러 중간 점검

가온·2024년 11월 23일

내 역량에 비해 너무 큰 프로젝트를 벌려놓은 건 아닐까?
그러나 어쩌겠어
해야지

그 과정에서 겪은 에러를 적어본다.
일단 적어두고... 공부는 프로젝트 끝나고 다시 해야겠다.

스프링 시큐리티 관련 에러

403 에러

403 에러의 원인은 주로 권한 설정이나 인증 정보 전달 문제에서 발생합니다. 이번 경우에서 발생한 403 에러의 주된 원인은 다음과 같습니다:

  1. Principal 객체와 Authentication 객체 문제:

    UserProfileController에서 Principal 객체를 사용하여 인증된 사용자의 이메일을 가져오는 방식에 혼선이 있었습니다. 특히 principal.getName()이 기대한 이메일을 반환하지 못하거나 객체 타입을 정확히 파악하지 못하면서 인증이 완벽하게 이루어지지 않았습니다. 이를 해결하기 위해 Principal이나 Authentication 객체에서 사용자 정보를 정확히 가져오도록 코드를 수정하면서 문제가 해결되었습니다.

  2. DTO 설계 및 필요 없는 필드 제거:
    UserProfileDTO에서 불필요한 user_idpet_id 필드를 제거함으로써, 서버가 DTO를 올바르게 받아들이고 검증 오류를 피할 수 있었습니다. 이러한 불필요한 필드가 포함되면서 DTO 검증 과정에서 불일치가 생길 수 있고, 이는 403 Forbidden과 같은 오류로 이어질 수 있습니다.

  3. JWT 인증 필터 설정:
    JWT 토큰을 제대로 검증하고 SecurityContextHolder에 인증 객체를 설정하는 과정에서 발생한 문제도 원인이 될 수 있었습니다. JwtAuthenticationFilter에서 인증이 제대로 설정되도록 필터 내부의 로직과 로그를 점검해주신 것이 문제 해결에 큰 도움이 되었습니다.

결론

결국, 인증 객체의 설정 및 DTO의 불필요한 필드로 인해 서버가 요청을 허용하지 않은 것이 403 Forbidden의 원인이었습니다. 모든 요소가 정확히 설정되고 나니 정상적으로 200 OK 응답이 반환되었습니다.

415 에러

principal 객체 사용 -> authentication 객체 사용 변경

RETSful 관련

이 외의 에러

문제 해결 메모: pets 필드가 null로 응답되는 문제

문제 요약

  • 현상: /profile 엔드포인트로 GET 요청 시, 응답 JSON에서 pets 필드가 null로 표시됨.
  • 예상: 해당 사용자에게 여러 개의 Pet 객체가 연관되어 있으므로, pets 필드에 Pet 정보가 포함되어야 함.

원인 분석

UserService 클래스의 getUserProfile 메서드에서 UserProfileDTO 객체를 생성할 때, pets 필드를 설정하지 않아서 발생하는 문제입니다.

추후 정리해야 할 것

.trim() 이 뭔지?

무한 순환 참조 해결했던 방법

컨트롤러의 소유권 검증 문제


이런 저런 에러들이 있었지만, 일단 이 정도 정리해두고 계속 진행 중이다.

이 과정에서 깨달은 건
1. 기획이 정말 중요하다.
2. 개발 설계도 정말 정말 중요하다.
3. 그러나 킵고잉하는 정신도 참 중요하다.

일단 나는 1,2번을 놓쳤으니 3번의 깨달음으로 킵고잉 중이다.
정말 정말 바쁘지만, 일단 파이팅!

0개의 댓글