본문 바로가기
백엔드/Spring Batch

Multi Thread로 처리하기

by 임지혁코딩 2024. 1. 15.

 

주어진 상황  :

사실, 많은 데이터도 아니다. 하지만 더 많다고 가정하고, 이런 데이터를 넣어야 하는 상황이다. 

 

1. 매핑할 데이터가 필요하다!

2. 이를 직접 생성자를 불러서 넣는것보단, field mapping을 하자 

 

: 생성자를 안쓰고 이렇게 설정해준 이유는?

이와 같이, 생성시 호환성 문제 때문!

이제, config를 설정하자 

 

3. data를 읽어오는 reader!

 

amountdto를 일겅오며, 그 이름을 지정했다. setmapper는 위에서 설정한대로, 각 라인의 분할은 linetokenizer로 분할하였다. 

 

4. 중간 과정 processor!

사실은 이보다 복잡한 process가 생길 수 있다. (전처리 등등) 

간단하게 100배를 했다.

 

5. writer!

 

이 부분이, 간단한 예시이다. 

지금은 outputfile에 저장하는 정도로 마무리 되었지만, 실제로는 이 writer과정에서 db에 저장한다. 

 

6. job,step!

write,read,process는 모두 step에, 해당 step들은 job에 들어가게 된다 .

 

 

6. 결과 ! 

지금은 txt로 저장했다. 하지만 실무에서는 아마 db에 저장될 것으로 예측한다. 

 

질문 : 이게 지금 멀티 쓰레드가 작동된게 아니잖아! 

맞다. 이제부터 멀티 쓰레드를 작동시켜 보겠다 . 

 

그 구현을 , TaskExecutor를 통해 한다 .

 

taskexecutor의 예시 . 

이후 step에 추가하게 되면 

 

데이터가 뒤죽박죽 write 된다. 

 

왜일까? -> 쓰레드는 프로세스에서 작동하는 일꾼과 같은 개념으로 생각한다. 

멀티 thread로 작동하면, 쓰레드가 동작하는 순서대로 write되기 때문에 순서가 변경된다 . 

(기존엔 1개의 쓰레드로 모든 작업을 진행, 순서대로 write될 수 밖에 없었다)

 

하지만 multithread가 항시 향상을 불러오진 않는다. (데이터의 lock 혹은 제약 때문에)

 

쓰레드들의 동작을, 로그로 표현해 보았다. 

'백엔드 > Spring Batch' 카테고리의 다른 글

Spring Batch Exception  (0) 2024.01.15
Spring Batch Test  (0) 2024.01.15
Spring Batch 활용  (0) 2024.01.14
Spring Batch 아키텍처  (1) 2024.01.14
배치 프로그램이란? / Spring Batch를 쓰는 이유  (0) 2024.01.14