문제
오늘은 하루종일 에러에 시달렸다.
오늘의 에러는 Access Denied 여러 권한 에러 null에러 등에 등장하는 에러라 정답을 찾기가 힘들었다.
서비스에서 리턴시에 계속 에러가 나면서 프로그램이 터짐.
시도한 것
- 커밋하기 전으로 돌아가서 다시 만들기
- SecuriyConfig에 Get요청 모두 permitAll()
- 반환값 Entity로 바꾸기
해결
알고보니 Jackson에러 였던것으로 보였다.
Jackson은 쉽게 말하면 프론트로 Json데이터를 보내거나 받아올 때 클래스로 형변환을 해주는 친구이다.
Jackson에서 에러가 난다는 것은 Json으로 변환 하는데 문제가 생겼다는 것인데
문제는 Dto에 있었다.
보면 커서가 있는 곳에 Board Entity자체를 받아오고있는데, 해당 Entity는 내부에 Board를 들고있는 Entity를 가지고 있어 순환참조가 일어난다. 쉽게말해 Json으로 열면 Board안에 board_user 안에 Board 안에 board_user ...
이렇게 무한히 이어진다. 해당 위치를 Dto로 바꾸며 해결했다. 물론 반환값도 Column의 Dto로 바꿔줬다.
알게된 것
Dto는 순환참조 문제 때문도 있지만 엔티티가 바뀌거나 필드가 추가되어도, 건드리지 않아도 된다는 장점이 있고, 프론트에 필요한 데이터만 Response해주는게 좋기 때문에 항상 사용하는게 좋다.