Project

[졸업프로젝트] Lombok의 @ToString StackOverflowError 해결

메델 2023. 6. 5. 16:10

[문제 상황]

내가 맡은 로그인/회원가입 부분에서 500 ERROR가 뜬다고 팀원한테 연락이 왔다. 그래서 내가 놓친 부분이 있나 하고 포스트맨으로 다시 API 테스트한 결과 잘 작동하는 것을 알 수 있었다. 혹시 몰라서 팀원한테 git branch에 팀원 프로젝트를 올려달라 그랬고 git clone 해서 본 결과  내 PC에서는 잘작동하는 것을 확인할 수 있었다.차이점은 딱 하나였다. 팀원과 나의 DB 내용이었다. 각자 Local에서 테스트 했기 때문에 DB 내용이 다를 수밖에 없었는데 나는 회원가입/로그인 부분을 담당했기 때문에 Sticker 객체에 대한 내용은 DB에 없었다.

 

[해결 방법]

팀원한테 포스트맨의 오류 메세지를 보내달라 그랬고 오류를 읽어본 결과 스택오버플로우임을 확인할 수 있었다. 그래서 스택오버플로우에 대해 구글링을 한 결과 lombok의 ToString 어노테이션 때문임을 알 수 있었다. JPA에서 객체간의 양방향 관계인 경우 두 객체가 서로를 인스턴스 멤버로 가지고 있기 때문에 서로 참조를 하기 때문에 StackOverflowError가 발생한 것이다.

 

이에 대한 해결 방법은 

 

방법 1. lombok의 @Data를 제거하고 @Getter, @Setter만 사용한다. @toString을 재정의한 후 Entity 연관관계로 설정되어 있는 속성을 제거한다.

방법 2. @ToString(exclude="diary") 이런식으로 Entity 클래스에 추가해준다. 

 

해당 프로젝트는 2번의 방법을 사용하여 Entity에 추가해서 해결하였다.