오늘은 데이터 이행 시간을 단축하기 위한 실질적인 팁을 여러분과 공유하려 합니다. 최근 프로젝트에서 이행 테스트 결과를 분석하면서 흥미로운 발견을 했기 때문인데요.
바로 몇 개의 주요 테이블이 전체 이행 시간의 대부분을 점유하고 있었던 사실입니다. 이와 관련해 ‘파레토 법칙’을 적용하면 어떤 결과를 얻을 수 있을지 자세히 알아보겠습니다.
파레토 법칙 적용하기
여러분은 파레토 법칙, 일명 80:20 법칙에 대해 들어보셨나요?
이는 “소수의 원인이 대부분의 결과를 만든다”는 원칙입니다. 예를 들어, 상위 20%의 부유한 사람들이 전체 부의 80%를 차지하고 있는 현상을 떠올리시면 됩니다. 그렇다면 데이터 이행에도 이 법칙이 적용될까요?
사실 지금 일하고 있는 프로젝트에서 데이터를 분석한 결과, 상위 6개 테이블이 전체 이행 시간의 90%를 점유하고 있었습니다. 파레토 법칙이 여기에서도 예외가 아니었습니다.
이에 따라 우리는 비효율적으로 모든 테이블을 개선할 필요 없이, 이 상위 테이블들에 집중하는 것이 더 효율적임을 깨달았습니다.
이행 시간 단축 방법
그렇다면, 구체적으로 어떻게 이행 시간을 단축시킬 수 있을까요? 두 가지 방법을 제안합니다. ‘병렬 처리’와 ‘배치 분산처리’입니다.
1. 병렬처리
첫 번째 방법은 병렬처리입니다. 데이터 row의 건수가 많아질수록 시간이 오래 걸리는 현상을 확인했는데, 특히 3천만 건을 초과하면 이 현상은 더욱 가중되었습니다.
이럴 경우 데이터 건수를 나누어 병렬로 로드하면 더 효율적입니다. 예를 들어 MySQL 데이터베이스에서는 row 건수를 3천만 건 미만으로 여러 개로 파일을 쪼개서 처리하는 방법을 사용합니다.
2. 배치 분산처리
두 번째 방법은 배치 분산처리입니다. 시스템 자원을 많이 사용하는 주요 테이블을 분리하는 방식입니다. 하나의 프로세스가 모든 자원을 사용하면 다른 프로세스는 대기해야 하므로, 이를 스케줄러에서 조정하여 배치 최적화를 이루는 것입니다.
AWS RDS를 사용한다면 CloudWatch나 DataDog을 활용하여 이행 시간 동안의 시스템 사용량을 모니터링하고 조정할 수 있습니다.
위에서 확인할 수 있듯이 5시 20~30분을 기점으로 양 옆으로 7~8개 프로세스가 동시에 돌고 있는 것을 알 수 있습니다. 프로그램을 재 배치해서 동시 실행 개수를 줄이는 방법입니다.
마무리
여러분은 파레토 법칙의 중요 성질을 통해 다양한 문제를 해결하는 경험을 해보셨나요? 개인적으로도 많은 일들이 이러한 원리를 따른다고 생각합니다.
중요한 것은 적절한 문제에 적합한 방법을 적용하는 것입니다. 가장 중요한 것 몇 가지를 해결하면 전체적인 개선 효과를 볼 수 있다는 것을 알 수 있죠.