본문 바로가기

활동들~/Help Todo (개인프로젝트)

[문제 기록] 클라이언트에 응답 시, JPA 양방향 객체 무한 참조

문제 상황

Team 목록을 클라이언트에 넘겨 줄때, 아래와 같이 무한 참조 현상이 나타났다.

문제 원인

코드

@RequestMapping(value = "/team/findTeamList")
    public ResponseEntity findTeamList(){

        List<Team> allTeams = teamService.findAllTeams();

        if (!allTeams.isEmpty()) {
            return ResponseEntity.ok().body(allTeams);
        }
        return null;
    }

Team은 소속 멤버에 대한 테이블인 JoinTeams를 가지고 있다. 

또한, JoinTeams는 Member와 양방향 관계를 가지고 있다.

이때, Team 객체의 정보를 불러올 때,

  • JoinTeams를 가져오고,
  • JoinTeams 안의 Member를 가져오고,
  • JoinTeams 안의 Member 안의 JoinTeams를 가져오고 ...

가 무한 참조 되는 것이다.

해결방법

클라이언트에 전달할 리스트 데이터를 새로운 리스트 DTO에 담아, 전달해준다.

@RequestMapping(value = "/team/findTeamList")
    public ResponseEntity findTeamList(){

        List<Team> allTeams = teamService.findAllTeams();
        
        //새로운 dto에 담아서 전달!
        List<FindTeam> list = new ArrayList<>();

        if (!allTeams.isEmpty()) {
            for(Team t : allTeams) {

                FindTeam findTeam = FindTeam.responseFindTeam(t.getName(), t.getCreator(), t.getCreateDate());
                list.add(findTeam);
            }
            
            return ResponseEntity.ok().body(list);
        }
        return null;
    }