Skip to content

feat: 대규모 데이터 삽입을 위한 Spring Batch Job 구현#366

Merged
mangsuyo merged 10 commits intodevfrom
test/insert-data#365
Sep 6, 2025
Merged

feat: 대규모 데이터 삽입을 위한 Spring Batch Job 구현#366
mangsuyo merged 10 commits intodevfrom
test/insert-data#365

Conversation

@mangsuyo
Copy link
Member

@mangsuyo mangsuyo commented Sep 6, 2025

📌 관련 이슈

성능 테스트를 위한 대용량 더미 데이터 삽입 #365


🛠️ 작업 내용

현재 운영 DB의 데이터는 테이블당 최대 3,000건 수준으로, 향후 발생할 수 있는 대규모 트래픽 상황에서의 성능 병목 현상을 사전에 식별하기 어렵습니다. 이에 신뢰성 있는 성능 테스트 환경을 구축하기 위해 수백만 건의 더미 데이터를 생성하는 Spring Batch 기능을 구현했습니다.

대용량 데이터를 안정적으로 생성하고 삽입하기 위해 Spring Batch 프레임워크를 채택했습니다. 채택한 이유는 아래와 같습니다.

Chunk 지향 처리: ItemReader - ItemProcessor - ItemWriter 구조를 채택하여, 데이터를 일정 단위(Chunk)로 묶어 처리합니다. 이는 대량 데이터 삽입 시 발생할 수 있는 메모리 부족 문제를 방지하고 안정적인 트랜잭션 관리를 가능하게 합니다.

Jpa 방식 대신 Jdbc를 이용한 쿼리, rewriteBatchedInserts=true 옵션을 사용하여 데이터베이스 INSERT 성능을 극대화했습니다.

📊 더미 데이터 현황 및 용량 측정 결과

  1. 로컬에 집어넣은 더미 데이터 용량 측정 결과
feed      1,000,000 건    212.41 MB    약 0.21 KB
feed_like   500,000 건     65.69 MB    약 0.13 KB
bookmark    500,000 건     63.69 MB    약 0.13 KB
student     100,000 건     19.06 MB    약 0.19 KB
comment     100,000 건     20.06 MB    약 0.20 KB

총계        2,200,000 건   약 380.91 MB

5개 테이블의 평균 Row 크기는 약 0.176KB입니다.

  1. 개발 EC2의 디스크 용량
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           475M     0  475M   0% /dev/shm
tmpfs           190M  484K  190M   1% /run
/dev/xvda1      8.0G  6.1G  2.0G  76% /
tmpfs           475M  524K  475M   1% /tmp
/dev/xvda128     10M  1.3M  8.7M  13% /boot/efi
tmpfs            95M     0   95M   0% /run/user/1000

이전 이슈에서 공유된 EC2의 남은 용량은 2GB로,
총 가용 공간: $2 \text{ GB} = 2 * 1024 * 1024 \text{ KB} = 2,097,152 \text{ KB}$

인덱스 공간과 메모리 사용을 고려하지 않았을 때 약 천백만건의 데이터를 개발 DB서버에 넣을 수 있습니다.

🎯 리뷰 포인트

이번 PR은 개발 DB에 바로 대용량 데이터를 넣기 전에, 먼저 로컬에서 안정적으로 데이터를 생성할 수 있는 Batch 환경을 만드는 데 중점을 뒀습니다.

우선 로컬에서 N+1 같은 쿼리 문제를 찾아 최적화를 진행하고, 나중에 준비가 되면 개발 서버에 데이터를 올려서 트래픽 병목 현상이나 성능 지표를 측정할 계획입니다.

모든 개발자가 로컬 환경에서 대용량 데이터 삽입 Job을 실행할 필요는 없습니다.
이에 따라, Job 자동 실행 옵션을 기본적으로 비활성화했습니다.

로컬에서 더미 데이터 생성이 필요한 경우, application-local.properties 파일의 설정을 다음과 같이 변경하여 Job을 실행할 수 있습니다.

# Batch Job 자동 실행 활성화/비활성화
# true로 변경 시 애플리케이션 시작 시 Job이 실행됩니다.
spring.batch.job.enabled=true

@mangsuyo mangsuyo added ⚙ Setting 개발 환경 세팅 ✨ Feature 기능 개발 labels Sep 6, 2025
@mangsuyo mangsuyo merged commit f52fa2c into dev Sep 6, 2025
1 check passed
@mangsuyo mangsuyo deleted the test/insert-data#365 branch September 6, 2025 06:12
@mangsuyo mangsuyo self-assigned this Sep 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발 ⚙ Setting 개발 환경 세팅

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant