기술공부/개발_코드

배치처리 vs. 개별처리

넹넹선생님 2025. 2. 25. 13:48
728x90
반응형

for문을 돌려서 한 개씩 처리하는 방식은 어떨까?

배치 처리와 비교했을 때, for문을 돌려서 한 개씩 처리하는 방식은 **"개별 처리"**라고 볼 수 있습니다.
즉, 배치(batch) 처리 대신 데이터를 하나씩 반복문을 돌면서 처리하는 방식인데, 이는 상황에 따라 비효율적일 수도 있고, 적절할 수도 있습니다.


❌ 한 개씩 처리하는 경우 (비효율적인 방식)

📌 SQL 쿼리를 개별 실행하는 경우

for code in code_list:  # 50만 개 문서 코드가 있다고 가정
    query = f"SELECT * FROM T_CONTENT_MASTER WHERE CONTENT_CODE = '{code}'"
    cursor.execute(query)
    result = cursor.fetchall()
    process(result)

❌ 문제점

  1. 쿼리 실행이 너무 많아짐 → 50만 개의 코드를 각각 개별 쿼리로 실행하면, SQL이 50만 번 실행됨 (DB 부하 증가)
  2. 성능이 매우 느림 → 배치 처리(IN으로 여러 개 한 번에 조회)보다 개별 실행이 훨씬 느림
  3. 네트워크 부하 증가 → 데이터베이스와의 통신이 지나치게 많아지면서 응답 속도가 느려질 수 있음

대안: IN 절을 사용하여 한 번에 여러 개를 조회하는 배치 처리를 적용하는 것이 더 나음.


📌 API를 개별 요청하는 경우

import requests

for code in contentCodes:  # 50만 개 문서 코드
    response = requests.post("https://api.example.com/", json={"code": code})
    data = response.json()
    process(data)

❌ 문제점

  1. 서버 요청이 너무 많아짐 → 50만 번의 API 요청을 보내게 되어 서버 부하 발생
  2. 응답 속도 느려짐 → 네트워크 트래픽 증가로 인해 요청-응답 속도가 심각하게 느려질 수 있음
  3. 요금 증가 (클라우드 서비스 이용 시) → API 호출 수에 따라 비용이 발생하는 경우 비용이 급증할 가능성이 있음

대안: 여러 개의 문서 코드를 한 번에 묶어서 요청하는 배치 처리를 적용하면 훨씬 효율적임.


📌 Pandas로 한 개씩 파일 처리하는 경우

import pandas as pd

df = pd.read_csv("big_data.csv")

for _, row in df.iterrows():
    process(row)  # 하나씩 처리

❌ 문제점

  1. iterrows()는 매우 비효율적 → Pandas에서 row-by-row 처리는 매우 느림 (벡터 연산을 활용하는 것이 더 빠름)
  2. 한 번에 처리하는 것이 더 효율적 → DataFrame 연산을 활용하여 한 번에 처리하는 것이 더 빠름

대안: apply() 함수 또는 벡터 연산을 사용하여 한 번에 처리하거나, **chunk 단위(배치 크기)**로 나누어 처리하는 것이 더 효율적.


✅ 언제 개별 처리가 유리할까?

하지만 개별 처리가 유리한 경우도 있습니다.

1️⃣ 하나의 요청이 매우 무거운 경우

✔ 배치 처리를 하면 한 번에 너무 많은 데이터가 한꺼번에 처리되어 서버가 부담을 느낄 수도 있음
✔ 개별 처리하면 서버가 감당할 수 있는 작은 단위로 처리 가능

예시:

  • 대량 파일 업로드 시, 한꺼번에 모든 파일을 전송하면 과부하가 걸릴 수 있음 → 개별 업로드 처리
  • 트랜잭션 처리 시, 한 번에 너무 많은 데이터를 변경하면 충돌이 발생할 수 있음 → 개별 트랜잭션 실행

2️⃣ 각 요청이 독립적으로 처리되어야 하는 경우

✔ 배치 처리하면 모든 요청이 하나의 쿼리에 묶이므로, 하나가 실패하면 전체가 실패할 수도 있음
✔ 개별 처리하면 실패한 요청만 다시 실행할 수 있음

예시:

  • 은행 이체 시스템: 모든 계좌 이체를 한꺼번에 처리하면 일부 실패 시 전체가 롤백될 수 있음 → 개별 실행
  • 이메일 발송 시스템: 배치 처리 중 하나의 이메일 전송이 실패하면 전체가 실패할 수 있음 → 개별 전송

🚀 결론: 언제 배치 처리 vs 개별 처리?

처리 방식 배치 처리 (batch) 개별 처리 (for문으로 하나씩)

데이터 개수 많을 때 (수천~수백만 건) 적을 때 (수십~수백 건)
데이터베이스 부하 적음 (한 번에 여러 개 조회) 많음 (SQL 실행 횟수 증가)
API 요청 부하 적음 (네트워크 트래픽 감소) 많음 (반복 요청으로 속도 저하)
처리 속도 빠름 (한 번에 처리) 느림 (반복 실행)
개별 실패 시 대응 전체 실패 가능 실패한 것만 재시도 가능
서버 부하 고려 서버가 감당 가능할 때 서버가 감당하기 어려울 때
  • 배치 처리대량 데이터를 처리할 때 빠르고 효율적
  • 개별 처리각 요청이 독립적이거나 실패 시 개별 재처리가 필요한 경우

일반적으로 배치 처리가 더 효율적이지만, 특정 상황에서는 개별 처리가 필요할 수도 있다! 🚀

728x90
반응형