Lazy loading
Lazy loading 이란?
Lazy loading은 사용자의 상호작용이 발생하기 전까지 특정 리소스들을 로딩하지 않는 방식이다. 따라서 사용자가 해당 리소스에 접근하기 전까지는 리소스를 로드하지 않고, 이를 통해 초기 페이지 로딩 속도를 향상시킬 수 있다.
Lazy loading 의 목적
1) 최초 페이지 로딩 시간을 개선하고 당장 화면에 표시하지 않는 이미지, 영상 등의 리소스를 나중에 로딩하면서
2) 최초 데이터 전달 양을 감소시키는 것이다.
웹 페이지를 로딩하는 기존 방식은 모든 리소스들을 한번에 받는 것이다. 이렇게하면 최초 로딩 시간이 더 커지게 된다.
이러한 문제를 해결하기 위해 사용할 수 있는 기술이 레이지 로딩인 것이다.
레이지 로딩을 적용하면, 화면에 당장 보여지지 않거나 아직 유저의 인터렉션이 일어나지 않은 특정 리소스들의 로딩을 딜레이시킬 수 있다. 이러한 방식을 적용하면 당장 필요한 컨텐츠들이 먼저 로딩되고, 다른 리소스들은 필요해질 때 로딩되기 때문에 웹 페이지의 퍼포먼스를 눈에 띄게 개선할 수 있다.
예를 들어, 사용자가 화면을 스크롤하여 특정 이미지가 나타나는 순간에 이미지를 로딩하는 것이 레이지 로딩의 일종이다. 사용자가 스크롤하지 않으면 해당 이미지는 로딩되지 않으며, 따라서 초기 페이지 로딩 시간이 단축된다.
레이지 로딩은 주로 이미지와 영상들에 적용된다.
프로세스 관점 lazy loading
프로세스가 커널에게 익명 페이지를 할당 요청하면 커널은 프로세스에게 가상 메모리 주소 공간을 부여한다. 이 부여된 가상 메모리 공간은 아직 실제 물리 메모리 페이지로는 할당되지 않은 공간이다.
실제 loading은 사용자 프로세스에서 해당 메모리에 접근을 시도할 때가 되어서야 이뤄지는데, 이를 lazy loading이라고 한다.
pintos의 bogus page fault 중 하나가 lazy loading으로 인한 page fault이다.
lazy loading으로 인해 가상 메모리 주소가 존재하는 유효한 페이지이지만 물리 메모리와 맵핑이 되어 있지 않은 상태이다. 따라서 이 페이지 폴트가 유효하지 않은 페이지에 접근한 폴트인지 확인하고 아닐 경우 lazy loading으로 인한 fault로 판단하여 해당 메모리에 대한 loading을 실행한다.
+ eager loading
데이터베이스에서 사용되는 용어로, 관계형 데이터베이스에서 연관된 데이터를 미리 로드하는 방식을 가리킨다.
lazy loading과 대비되는 개념으로, lazy loading은 연관된 객체나 엔티티가 실제로 필요한 시점에 로드되는 반면,
eager loading은 미리 해당 객체나 엔티티를 함께 로드한다.
예를 들어, 사용자와 해당 사용자가 작성한 게시물이라는 두 개의 엔티티가 있을 때, eager loading을 사용하면 특정 사용자를 조회할 때 해당 사용자가 작성한 모든 게시물을 함께 로드할 수 있다. 이렇게 함으로써 나중에 해당 사용자의 게시물을 접근할 때 따로 추가적인 쿼리를 실행 할 필요가 없어져 성능이 향상된다.
eager loading은 주로 데이터베이스와 관련된 작업을 수행하는 곳에 쓰인다. ( 웹 애플리케이션 개발, 빅데이터 처리, API 개발, 모바일 애플리케이션 등)