채팅방 목록 순환참조 문제

2024. 11. 16. 02:11·Spring/Spring 트러블 슈팅

원인은?

프로젝트에서 채팅방 목록을 조회할 때 발생하는 순환 참조 문제를 해결하기 위해 코드를 개선하였다. 기존에는 ChatRoom 엔티티를 그대로 반환하거나 참조하는 과정에서 @ManyToOne 또는 @OneToMany와 같은 양방향 관계로 인해 순환 참조가 발생할 수 있었으나, 이로 인해, 직렬화 과정에서 무한 루프에 빠지는 문제가 있었다.

 

어떻게 해결했나?

이를 해결하기 위해 DTO(Data Transfer Object)를 활용하여 필요한 필드만 가져오도록 하였다.

 

ChatDto.ChatRoomDto라는 DTO를 정의하여 채팅방 조회 시 필요한 최소한의 필드(chatRoomId, createdAt)만 반환하도록 하고,

ChatRoom 엔티티의 조회 메서드를 변경하여 ChatRoomDto로 변환 후 반환하도록 하였다.

 

특정 채팅방 조회 (getChatRoom): chatRoomRepository를 통해 chatRoomId로 특정 채팅방을 조회하고, 존재하지 않을 경우 예외를 발생시킵니다. 이후 ChatRoomDto 객체로 변환하여 필요한 정보만을 담아 반환.

 

모든 채팅방 목록 조회 (getChatRooms): chatRoomRepository의 findAll 메서드를 호출하여 모든 채팅방을 가져온 뒤, 스트림 API와 map을 사용하여 각 ChatRoom 엔티티를 ChatRoomDto로 변환하고, 이를 리스트로 수집하여 반환.

 

이와 같은 방식으로 순환 참조 문제를 해결할 수 있었으며, 채팅방 목록 조회 시 발생하던 무한 루프 문제를 방지할 수 있었습니다.

반응형

'Spring > Spring 트러블 슈팅' 카테고리의 다른 글

Could not write JSON  (1) 2024.09.05
Spring Port 8080 is already in use  (0) 2024.08.15
'Spring/Spring 트러블 슈팅' 카테고리의 다른 글
  • Could not write JSON
  • Spring Port 8080 is already in use
wanduek
wanduek
차근차근 쌓아가는 지식
  • wanduek
    완득님의 블로그
    wanduek
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Onboarding (0)
      • 아티클 (0)
      • SQL 정리 (20)
      • 웹개발 기초정리(프엔) (9)
      • (Java)코테연습 (27)
      • 미니 프로젝트 (9)
        • 자기소개 웹페이지 (5)
        • 수강생 관리 프로그램(Java) (4)
      • GitHub 오류 및 명령어 정리 (7)
      • Java 문법정리 (Array부터) (17)
      • Java로 이용한 기능 (2)
      • Web지식 (12)
        • web3 (6)
        • 네트워크 (6)
      • 인텔리제이 오류 대처 방법 (1)
      • Computer Science (7)
      • Spring (38)
        • 미니 프로젝트(배달) (2)
        • Spring 트러블 슈팅 (3)
        • QueryDSL, JPQL (3)
        • 미니 프로젝트(뉴스피드) (5)
        • 미니 프로젝트(Trello) (2)
      • 개발자 밋업 (1)
      • Docker (2)
      • Redis (1)
      • AWS (6)
        • AWS 트러블 슈팅 (2)
      • Jmeter (2)
      • 우리 지금 만나 (12)
      • Kafka (1)
      • RabbitMQ (2)
        • 트러블 슈팅 (1)
      • STOMP (2)
      • WebSocket (3)
        • 트러블 슈팅 (2)
      • Node.js (2)
      • Elastic Search (2)
      • Nginx (1)
      • 퍼블엘 (2)
      • openresty (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    github
    ㅏㄷ
    백앤드개발자 #초심자
    fetch
    jquery
    groupby
    json
    where
    git
    SQL
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
wanduek
채팅방 목록 순환참조 문제
상단으로

티스토리툴바