상세 컨텐츠

본문 제목

영속성 컨텍스트 문제를 DTO로 해결

트러블슈팅

by ksjsjsj 2025. 1. 23. 17:14

본문

문제 원인

채팅 메시지를 불러와야 하는데 Room 엔티티가 세션을 벗어나서 로딩되려고 할 때,

세션이 닫혀 있어서 연관된 데이터를 불러오지 못하는 상황이 발생.

이 문제는 영속성 컨텍스트와 관련이 있으며, 트랜잭션 밖에서 연관된 객체를 접근할 때 발생한다.

 

해결 방법

  • DTO를 사용하여 필요한 필드만 조회

필요한 필드만 조회하는 DTO를 활용. Room 엔티티를 직접 반환하는 대신,

메시지 목록을 미리 로딩한 후 필요한 데이터만 포함하는 DTO로 변환하여 반환.

이로 인해 트랜잭션 종료 후에도 데이터를 안전하게 사용할 수 있어 영속성 컨텍스트 문제를 방지할 수 있다.

 

 

결론

List<ChatMessage> 엔티티 리스트를 반환하는 기존 방식에서

List<RequestMessage> DTO 리스트로 반환하는 방식으로 변환, 에러를 해결했다

 

 

관련글 더보기