-
오버 페치(Over-Fetch)와 언더 페치(Under-Fetch)란?Back-End 2024. 11. 25. 22:12반응형
현대 웹 애플리케이션 개발에서는 클라이언트와 서버 간의 효율적인 데이터 통신이 매우 중요합니다. 그러나 이 과정에서 오버 페치(Over-Fetch)와 언더 페치(Under-Fetch)라는 문제가 발생할 수 있습니다. 이 두 가지 문제는 애플리케이션의 성능 저하, 사용자 경험 악화, 그리고 네트워크 리소스 낭비로 이어질 수 있습니다.
오버 페치(Over-Fetch)란 무엇인가?
오버 페치는 클라이언트가 실제로 필요로 하지 않는 불필요한 데이터까지 서버로부터 가져오는 상황을 말합니다. 이는 클라이언트가 요청한 데이터보다 더 많은 데이터를 받아오는 것으로, 네트워크 리소스의 낭비와 성능 저하를 초래합니다.
예시
사용자가 프로필 페이지에서 자신의 이름과 이메일만 확인하려고 합니다. 그러나 서버에서 프로필 정보를 요청하면 이름과 이메일뿐만 아니라 주소, 전화번호, 생일 등 모든 사용자 정보를 반환합니다. 이때 클라이언트는 필요하지 않은 데이터를 받아오게 되며, 이는 오버 페치의 대표적인 사례입니다.
문제점
- 네트워크 대역폭 낭비: 불필요한 데이터를 전송하면서 네트워크 리소스를 소모합니다.
- 성능 저하: 전송되는 데이터 양이 많아져 페이지 로딩 속도가 느려집니다.
- 보안 위험: 필요하지 않은 민감한 정보까지 노출될 수 있습니다.
해결 방법
- GraphQL 도입: 클라이언트가 필요한 데이터만 정확히 지정하여 요청할 수 있습니다.
query { user { name email } }
위의 쿼리는 서버로부터 이름과 이메일만 받아옵니다.
- REST API 최적화: 쿼리 파라미터를 사용하여 필요한 데이터만 요청합니다.
- 예시: /users?fields=name,email
언더 페치(Under-Fetch)란 무엇인가?
언더 페치는 클라이언트가 원하는 데이터를 한 번의 요청으로 가져오지 못하고, 여러 번의 추가 요청을 해야 하는 상황을 말합니다. 이는 데이터 요청이 충분하지 않아 발생하며, 클라이언트의 로직을 복잡하게 만듭니다.
예시
게시판에서 게시글 목록과 각 게시글의 작성자 정보를 동시에 보여주고자 합니다. 하지만 서버의 /posts 엔드포인트는 게시글 목록만 반환하고 작성자 정보는 포함하지 않습니다. 따라서 클라이언트는 각 게시글마다 /users/{id} 엔드포인트를 추가로 호출하여 작성자 정보를 가져와야 합니다.
문제점
- 추가적인 네트워크 요청 증가: 여러 번의 API 호출로 네트워크 트래픽이 증가합니다.
- 응답 시간 지연: 추가 요청으로 전체 응답 시간이 길어집니다.
- 클라이언트 로직 복잡화: 데이터를 병합하고 관리하는 로직이 복잡해집니다.
해결 방법
- GraphQL 활용: 필요한 모든 데이터를 한 번의 요청으로 가져옵니다.
query { posts { id title author { name email } } }
이 쿼리는 게시글과 작성자 정보를 동시에 받아옵니다.
- REST API 개선: 엔드포인트를 확장하여 필요한 데이터를 함께 반환합니다.
- 예시: /posts?include=author
오버 페치와 언더 페치의 비교
GraphQL과 REST API를 통한 해결 방안
GraphQL의 활용
GraphQL은 Facebook에서 개발한 쿼리 언어로, 클라이언트가 필요한 데이터 구조를 명시적으로 정의하여 서버에 요청할 수 있습니다. 이를 통해 오버 페치와 언더 페치 문제를 효과적으로 해결할 수 있습니다.
- 장점:
- 필요한 데이터만 정확하게 가져올 수 있음
- 한 번의 요청으로 복잡한 데이터 구조를 받아올 수 있음
- 단점:
- 초기 도입 및 학습 비용이 높음
- 캐싱 등의 기존 REST API 기술 적용이 어려울 수 있음
REST API 최적화
기존의 REST API에서도 엔드포인트 설계와 쿼리 파라미터 활용으로 오버 페치와 언더 페치 문제를 완화할 수 있습니다.
- 필드 선택 기능 제공:
- 예시: /users?fields=name,email로 필요한 필드만 요청
- 데이터 병합 엔드포인트 제공:
- 예시: /posts-with-authors 엔드포인트를 만들어 게시글과 작성자 정보를 함께 반환
결론
오버 페치와 언더 페치는 웹 애플리케이션의 성능과 사용자 경험에 큰 영향을 미치는 중요한 이슈입니다. 이를 해결하기 위해서는 클라이언트와 서버 간의 데이터 통신을 효율적으로 설계하는 것이 필수적입니다. GraphQL과 같은 최신 기술을 도입하거나 REST API를 최적화하여 클라이언트가 필요한 데이터를 정확하고 효율적으로 제공하는 것이 중요합니다.
핵심은 클라이언트의 요구에 맞춰 필요한 데이터를 정확히 제공하는 것입니다. 이를 통해 애플리케이션의 성능을 향상시키고, 사용자에게 더욱 빠르고 만족스러운 경험을 제공할 수 있습니다.
반응형'Back-End' 카테고리의 다른 글
Back-End: Golang(Next)와 Spring(Interceptor) (0) 2024.11.22 라우터(Router)란? (1) 2024.11.20