Blog

[CS]16 즉시로딩과 지연로딩은 각각 언제 사용하면 좋은지 설명해주실 수 있을까요?

Author
Summary
즉시로딩(Eager)과 지연로딩(Lazy)?
Category
Study
Tags
CS
Favorite
Memory Date
2023/10/18
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
즉시로딩과 지연로딩은 각각 언제 사용하면 좋은지 설명해주실 수 있을까요?
일반적으로는 성능 문제와 메모리 관리를 고려하여 지연로딩을 기본으로 사용하고, 필요한 경우에만 즉시로딩을 적용하는 것이 좋습니다.
즉시로딩은 성능 향상에 도움이 되지만, 메모리 부담이 크고 불필요한 데이터 로딩 문제가 있습니다. 따라서 연관된 객체를 자주 사용하고, 객체 수가 적을 때 사용하면 좋습니다.
지연로딩은 메모리를 효율적으로 사용하고 불필요한 데이터 로딩을 피할 수 있지만, 성능 저하의 가능성이 있습니다. 따라서 연관된 객체를 자주 사용하지 않거나, 연관된 객체의 수가 많아서 모두 즉시로딩할 경우 메모리 부담이 큰 경우에 사용하면 좋습니다.
게시판 어플리케이션을 예시로 알려드리면, 우선 유저와 게시글 엔티티가 일대다로 연관관계가 있습니다.
게시판 목록을 조회할 때 해당 게시물의 작성자 정보도 함께 로딩하고 싶을 때 즉시로딩 (Eager Loading)을 사용하는 것이 좋습니다. 게시물 목록을 조회할 때 해당 게시물의 작성자 정보까지 한 번에 로딩하는 것이 효율적일 수 있습니다. 이는 게시물 목록 화면에서 작성자의 정보를 표시하기 위해 한 번에 필요한 데이터를 모두 가져오는 것이므로 성능이 향상될 수 있습니다.
게시물을 클릭하는 순간 게시글의 상세 정보를 조회함과 동시에 작성자의 자세한 정보를 로딩하고 싶을 때 지연로딩 (Lazy Loading)을 사용하는 것이 좋습니다. 게시물 목록을 조회할 때는 작성자의 자세한 정보까지 함께 로딩하지 않고, 게시물을 클릭하여 상세 정보를 조회할 때에만 작성자의 자세한 정보를 로딩하는 것이 효율적일 수 있습니다. 이는 사용자가 해당 정보를 요청할 때만 데이터베이스에서 추가 정보를 가져오기 때문에 필요한 데이터만을 가져올 수 있습니다.
추가질문 즉시로딩과 지연로딩의 좀더 자세히 알려줄 수 있나요?
각 부분의 장단점을 상세하게 말씀드리면
즉시로딩 (Eager Loading)
장점:
1.
성능 향상: 연관된 객체를 한 번에 모두 로딩하기 때문에, 데이터베이스에 대한 추가적인 쿼리를 줄일 수 있어 성능 향상에 도움이 됩니다.
2.
사용 편의성: 데이터베이스로부터 모든 필요한 정보를 한 번에 가져와서, 객체 사용 시에 따로 로딩할 필요가 없어 사용이 편리합니다.
단점:
1.
메모리 부담: 연관된 객체가 많은 경우, 즉시로딩은 모든 객체를 한 번에 로딩하기 때문에 메모리 부담이 크다는 단점이 있습니다.
2.
불필요한 데이터 로딩: 모든 연관된 객체를 가져오기 때문에, 실제로 사용되지 않는 데이터까지 로딩할 수 있습니다.
지연로딩 (Lazy Loading)
장점:
1.
메모리 절약: 필요한 순간에 연관된 객체를 로딩하기 때문에, 메모리를 효율적으로 사용할 수 있습니다.
2.
불필요한 데이터 로딩 회피: 연관된 객체를 사용할 때에만 로딩하기 때문에, 필요하지 않은 데이터를 로딩하지 않아 성능이 향상될 수 있습니다.
단점:
1.
성능 손실: 연관된 객체를 사용하는 시점에 쿼리를 실행해야 하므로, 지연로딩을 사용하는 경우 쿼리가 여러 번 발생할 수 있어 성능 저하의 가능성이 있습니다.
2.
복잡성: 객체 사용 시에 연관된 객체를 로딩하는 로직을 추가로 작성해야 하므로 코드가 복잡해질 수 있습니다.