
Contents
[ open-in-view란? ][ open-in-view란? ]

레이지 로딩을 하려면 커넥션이 끊기면 안된다.
뷰 랜더링까지 커넥션이 연결되어야 한다.
때문에 커넥션을 끊지 않고,
레이지 로딩의 시점을 뷰 랜더링까지 끌고가는 것을 open-in-view 라고 한다.
(오프닝 뷰 설정 -> 디폴트 : true)
그럼 보통 어디에서 커넥션이 끊길까?
-> 서비스가 종료될 때, 레이지 로딩의 커넥션이 끊긴다!
[ 댓글 목록보기를 예시로 open-in-view 설명 ]
커넥션 객체가 만들어졌다 = DB에 연결된 스트림이 만들어졌다
클라이언트가 요청하는 순간 커넥션 객체가 만들어진다. (=스트림이 연결되었다)
컨트롤러가 서비스를 때리고, 서비스가 레파지토리를 때리고, 레파지토리가 db를 때린다.
board랑 user가 조인된걸 받아와서 돌려줌
-> 그럼 이 서비스가 응답 받은건 댓글이 없는 board와 user만 받은거임
이걸 서비스가 다시 컨트롤러에 전달하죠? 근데 Board 객체에 댓글 없죠?
마지막으로 컨트롤러가 응답해주기 직전에 뷰를 만들어주죠 (응답 준비)
이 응답을 준비하는 과정에서 만약 추가적으로 댓글 정보가 필요하다면,
그리고 데이터베이스 연결이 여전히 유지되고 있다면(Open-in-View가 true),
이 댓글 정보를 지연 로딩(Lazy Loading)으로 가져오는 것!
이때까지 커넥션이 유지되고 있어야지만 Lazy Loding이 가능하다는 말임!
만약 서비스에서 컨트롤러로 넘어가는 순간에 끊기면 레이지 로딩 불가능!!
[ 그러나 쓰지 마라! DTO를 활용하라! ]
그런데... 이렇게 게속 유지를 하면 서버 부하가 커진다. 때문에 서비스에서 모든 getter를 호출하여 필요한 데이터를 미리 로드하고, 이를 바탕으로 DTO를 생성, Lazy Loding 설정을 한 후 컨트롤러로 전달한다. 서비스에서 DTO 만들어서 하라. 오픈 인 뷰 꺼버리고... 레이지 로딩쓰면 불안해함. 끊길까봐...
오픈 인 뷰를 false로 하면 -> 서비스가 종료될 때 커넥션이 끊겨버림
오픈 인 뷰 true는 -> 사용자에게 최종적으로 응답을 보내기 직전까지 유지
[ open-in-view 설정 ]

[ open-in-view - false ]

서비스에서 끝 ( c - 커넥션 / f - false )

오픈 인 뷰가 false면 이런 오류가 뜬다. 레이지 로딩 실패(?)
[ open-in-view - true ]

여기 뷰까지(보라색 상자) 커넥션을 끌고 오는 것 (레이지 로딩 땜시)
Share article