대량의 데이터를 처리할 때, 전체를 한 번에 다루기보다는 일정 단위로 나누어 처리하는 방식이 안정성과 효율성 측면에서 매우 중요합니다. 특히 데이터베이스 저장, 외부 API 호출, 파일 저장 등에서 과부하를 방지하기 위해 자주 사용됩니다. 이번 글에서는 Python에서 배열을 1000개 단위로 잘라 반복 처리하는 실용적인 코드를 소개합니다.
문제 상황
예를 들어, 수만 건의 데이터를 다룰 때 이를 한 번에 처리하려 하면 다음과 같은 문제가 발생할 수 있습니다.
- 데이터 크기가 너무 커서 메모리 부담이 큼
- API 요청 횟수 또는 처리 용량에 제한이 있음
- 에러 발생 시 어느 구간에서 문제가 생겼는지 파악하기 어려움
이런 상황에서 데이터를 1000개 단위로 나누어 처리하면 안정성, 추적 가능성, 오류 회피에 큰 도움이 됩니다.
해결 방법
Python에서는 range()
와 슬라이싱을 조합해 간단히 구현할 수 있습니다.
data = [...] # 처리할 데이터 리스트
for i in range(0, len(data), 1000):
chunk = data[i:i+1000] # 1000개씩 나누기
print(f"{i} ~ {i+len(chunk)-1}번째 데이터 처리 중")
# 여기에 실제 처리 로직을 작성
# 예: process_data(chunk)
코드 설명
range(0, len(data), 1000)
→ 0부터 데이터 길이까지 1000씩 증가하는 반복 범위를 생성합니다. 예를 들어 0, 1000, 2000처럼 반복됩니다.data[i:i+1000]
→ 리스트를 슬라이싱해서 1000개씩 잘라냅니다. 마지막 구간은 남은 데이터 수만큼만 슬라이싱되므로 별도 처리 없이도 안전합니다.print(f"{i} ~ {i+len(chunk)-1}번째 데이터 처리 중")
→ 현재 어떤 범위의 데이터를 처리 중인지 로그로 남기면 디버깅 및 진행 상황 파악에 유용합니다.
실무에서의 활용 예시
- DB에 배치 단위로 Insert 처리
- API 요청 시 rate limit을 고려한 처리
- 대용량 데이터를 파일로 나눠 저장
- 진행 로그 추적 및 오류 위치 파악
유의할 점
- 슬라이싱 시
i+1000
이 리스트 길이를 넘어도 에러가 나지 않고 자동으로 범위 내까지만 처리됩니다. - 인덱스 범위 출력 시
i+len(chunk)-1
처럼 슬라이싱된 실제 길이를 기반으로 계산해야 마지막 인덱스를 정확히 알 수 있습니다. - 반복 중 데이터를 바로 변경하거나 삭제하는 경우에는
copy()
를 사용하거나 원본을 건드리지 않도록 주의해야 합니다.
마무리
이와 같이 range()
와 슬라이싱을 함께 사용하면 Python에서 데이터를 일정 단위로 나누어 효율적이고 안전하게 처리할 수 있습니다. 실무 자동화 작업, 대용량 데이터 처리, API 연동 등 다양한 작업에서 활용할 수 있는 유용한 코드 패턴이니 꼭 익혀두시길 추천드립니다.
반응형
'개발 (Development) > Python' 카테고리의 다른 글
[Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법 (0) | 2025.07.20 |
---|---|
[Python] JSON 파일을 CSV로 변환 (1) | 2025.06.01 |
[Python] Pandas DataFrame에서 값이 저장되지 않는 이유와 해결 방법 (0) | 2025.05.18 |
[Python] Pandas DataFrame에서 for문을 이용해 특정 컬럼 값 변경하기 (0) | 2025.05.18 |
[Python] Docker image load (0) | 2025.02.23 |