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