문제상황
게시글 상세보기 기능을 구현하고 테스트해보았다. 그러자 다음과 같은 에러가 발생했다.org.hibernate.LazyInitializationException: could not initialize proxy [com.nbe2.domain.user.User#1] - no Session
문제원인
연관관계를 참조할 때 사용한 Lazy전략과 관련된 문제였다.
현재 게시글(Post)와 사용자(User)가 양방향 연관관계를 LAZY전략으로 가지고 있다. 그리고 게시글 단건 조회 컨트롤러에서 Post를 조회한 후, ResponseDTO로 변환할 때 Post가 가진 User의 name을 참조한다. 이 역시 트랜잭션 안에서 이루어져야 하는 일인데, 트랜잭션이 설정된 서비스 밖인 컨트롤러에서 조회를 시도하므로 예외가 발생한 것이었다.
문제해결
컨트롤러에서 Post를 조회하여 ResponseDTO로 변환하지 않고, 서비스 레이어에서 바로 User의 name을 조회하여 Command로 변환해 반환하여 해결하였다.
+ 컨트롤러에 @Transactional을 달아주는 방법도 고려했으나, 현재 멀티모듈로 구현되어 있고 api모듈에는 JPA의존성이 없어서 이 방법은 불가능했다.
* 다음 블로그 포스팅을 참고
https://wjcodding.tistory.com/81