wooritech/리얼그리드

대량 데이터 처리 시 성능 저하 해결하기: 리얼그리드로 최적화된 성능 구현

atomicdev 2024. 9. 11. 17:27
728x90

대량 데이터 처리 시 성능 저하 해결하기: 리얼그리드로 최적화된 성능 구현

Problem: 대량 데이터 처리 시 성능 저하

초급 웹 개발자들이 웹 애플리케이션을 개발하면서 자주 겪는 문제 중 하나는 대량의 데이터를 클라이언트 측에서 효율적으로 처리하는 것입니다. 수만 개 이상의 데이터를 테이블이나 그리드 형식으로 출력해야 할 때, 자칫 잘못 구현하면 브라우저가 느려지거나 심지어 응답이 멈출 수 있습니다. 성능 저하 문제는 사용자 경험을 해치는 주요 요인 중 하나이며, 이로 인해 데이터를 효율적으로 처리하는 방법을 찾는 것이 필수적입니다.

다음과 같은 상황에서 성능 저하를 자주 경험하게 됩니다:

  • 10,000건 이상의 데이터를 한 번에 로드할 때 페이지가 느려지거나 브라우저가 멈춘다.
  • 스크롤을 내릴 때마다 데이터 렌더링 속도가 느려져 UI가 버벅거린다.
  • 필터링, 정렬 등의 작업을 수행할 때 처리 시간이 길어져 사용자 경험이 나빠진다.

Design: 리얼그리드를 활용한 성능 최적화 설계

이 문제를 해결하기 위해서는 효율적인 데이터 처리 및 렌더링이 필요합니다. 리얼그리드(RealGrid)는 대량의 데이터를 빠르게 처리할 수 있는 고성능 그리드 시스템을 제공하며, 이를 통해 성능 저하 문제를 해결할 수 있습니다. 리얼그리드는 다음과 같은 기술적 개념으로 성능을 최적화합니다:

  1. Lazy Loading: 모든 데이터를 한 번에 로드하지 않고, 사용자가 스크롤하거나 필요할 때마다 데이터를 로드하는 방식입니다. 이를 통해 초기 로딩 속도가 빨라지고 메모리 사용량을 줄일 수 있습니다.
  2. Virtual Scrolling: 화면에 보이는 데이터만 렌더링하고, 나머지 데이터는 메모리에서 유지하는 방식입니다. 이를 통해 스크롤 시 대량 데이터를 처리하면서도 성능을 유지할 수 있습니다.
  3. 서버 페이징(Server-side Paging): 대량의 데이터를 한 번에 클라이언트로 전송하지 않고, 서버에서 페이지 단위로 데이터를 나누어 필요한 만큼만 전송하는 방법입니다. 서버 측에서 데이터를 처리하여 클라이언트의 부하를 줄일 수 있습니다.

Solution: 리얼그리드를 사용한 대량 데이터 처리 최적화 사례

실제 문제 상황
A라는 초급 개발자는 20,000개의 고객 데이터를 웹 페이지에 표시하는 기능을 구현 중입니다. 처음에는 일반적인 HTML 테이블을 사용했지만, 로드 시간과 렌더링 속도가 매우 느려져 브라우저가 멈추거나 성능이 심각하게 저하되었습니다. A는 고객의 데이터를 정렬, 필터링, 페이징까지 할 수 있는 효율적인 솔루션이 필요했습니다.

리얼그리드를 활용한 해결 방법
A는 리얼그리드를 사용해 다음과 같이 문제를 해결했습니다:

  1. Lazy Loading 구현
    리얼그리드에서 제공하는 Lazy Loading 기능을 통해, A는 페이지가 처음 로드될 때 모든 데이터를 로드하지 않고, 스크롤을 내릴 때마다 추가 데이터를 로드하는 방식을 적용했습니다. 이를 통해 초기 로딩 속도를 크게 개선했습니다.
    const provider = new RealGrid.LocalDataProvider();
    const gridView = new RealGrid.GridView("realgrid-container");
    gridView.setDataSource(provider);
    
    // 데이터셋에 20,000개의 데이터 로드
    provider.setRows(data);
    
    // Lazy Loading 설정
    gridView.setOptions({
        scrolling: {
            rowLazyLoading: true,
        },
    });

    Lazy Loading 적용 화면
  2. Virtual Scrolling 적용
    A는 리얼그리드의 Virtual Scrolling 기능을 사용하여 화면에 보이는 데이터만 렌더링하고, 나머지 데이터는 렌더링하지 않도록 설정했습니다. 덕분에 스크롤이 부드러워졌고, 사용자는 대량의 데이터를 빠르게 탐색할 수 있게 되었습니다.
    gridView.setOptions({
        scrolling: {
            fitToWidth: true,
            virtualScrolling: true,
        },
    });
     
  3. 서버 페이징 적용
    A는 서버에서 데이터를 페이지 단위로 처리해 클라이언트에 보내는 서버 페이징 기능을 추가했습니다. 이를 통해 한 번에 모든 데이터를 보내는 대신, 요청된 페이지에 해당하는 데이터만 전송하여 성능을 최적화했습니다.
    provider.setOptions({
        rowCount: totalRowCount,  // 서버에서 제공하는 전체 데이터 수
        paging: true,
    });
    
    // 페이지 변경 시 데이터를 서버에서 가져옴
    gridView.onPageChanged = function(page) {
        fetch(`https://api.example.com/customers?page=${page}`)
            .then(response => response.json())
            .then(data => provider.fillJsonData(data.rows));
    };
     

결과
리얼그리드를 사용한 이후, A는 20,000개의 고객 데이터를 처리하면서도 초기 로딩 시간이 크게 줄었고, 스크롤 성능도 부드럽게 개선되었습니다. 사용자들은 데이터를 빠르게 탐색할 수 있게 되었으며, 필터링과 정렬 기능도 원활하게 작동했습니다.

결론

대량 데이터 처리 시 성능 저하는 웹 개발자들이 자주 겪는 어려움 중 하나입니다. 리얼그리드의 Lazy Loading, Virtual Scrolling, 그리고 서버 페이징 기능을 활용하면 이러한 문제를 쉽게 해결할 수 있습니다. 초급 개발자도 간단한 설정을 통해 효율적이고 빠른 데이터 처리가 가능하며, 사용자 경험을 크게 개선할 수 있습니다.


이 형식은 문제 상황을 명확히 제시하고, 리얼그리드가 제공하는 설계를 개념적으로 설명한 후, 실제 코드 예제를 포함하여 문제를 해결하는 방식으로 진행됩니다.

728x90