대머리개발자

[코틀린] 스프링 배치(1) - 사전 주저리 본문

개발이야기/코틀린

[코틀린] 스프링 배치(1) - 사전 주저리

대머리개발자 2023. 9. 1. 22:57
728x90

 

일회성 작업으로 이관 모듈을 많이 작업을 해봤다.

두고두고 재활용하려고 고민했던 기억이 있다.

 

고민에 대한 두 가지의 목표

 

1. 대부분 대량의 데이터를 이관 했기 때문에 성능적인 면을 고민

2. 정상적으로 이관이 되지 않았을 경우 예외 처리에 대한 고민

 

하나의 쓰레드로는 제아무리 멋드러지게 구현한다고 하더라도 멀티 쓰레드에 젭이 안 된다.

프로브 한마리랑 열마리가 자원을 캐는양이 젭이 안 되는 것처럼....

 

아무튼 내가 고민했던것들이 이미 스프링 진영에서 지원하고 있던 부분이다.

oauth를 작업 할 때 도 경험했던 느낌이지만 범용적으로 지원하기 때문에 투머취하다. 즉 무겁다.ㅎ

그래서 여유가 있고 코드를 짜는 즐거움을 알고 있다면.. 밑바닥부터....해보면 여러 포인트에서 충분히 재미를 느낄수 있을 것 같다.

 

    public void bizFileMigration(String dataReaderClass, String migProcess, int poolSize){
        long startTime =  System.currentTimeMillis();

        ExecutorService executor = Executors.newFixedThreadPool(poolSize);

        LogInfo logInfo = Utils.getLogInstance("", "bizFileMigration");        

        MigrationContext migContext = new MigrationContext();

        migContext.setDataReader( (BaseMigrationDataReader) SpringApplicationContextUtil.getContext().getBean( dataReaderClass));
        migContext.setMigrationProcess( (BaseMigrationProcess) SpringApplicationContextUtil.getContext().getBean( migProcess));

        setTargetDBData( migContext, "targetSqlSession", 500);

        migContext.setJobCode( "BizFile");

        for(int i = 0; i < poolSize;i++) {
            executor.execute( new MigrationJob(migContext));
        }

        executor.shutdown();

        try {
            // 쓰레드가 전부 종료 되었는지 체크(종료되면 while문을 빠져나감)
        	boolean flagFinish = true;
            while(flagFinish){
            	flagFinish = !executor.awaitTermination(10, TimeUnit.SECONDS);
            }

            migLogConsole(logInfo, migContext, startTime);

        } catch (InterruptedException e) {
            //
        }
    }

스프링 배치 개념을 아직 자세히 보지는 않았지만 큰 맥락에선 비슷할듯 하다. 데이터를 읽고 ->> 가공하고 ->> 성공여부 기록하고

 

오픈소스 형태로 지원하는 것이니.. 훨씬 안정적이면서 성능적인 부분까지 도모 할 수 있을거라는 

기대를 가지고 스프링 배치를 사용해보려고 한다.

 

 

 

728x90

'개발이야기 > 코틀린' 카테고리의 다른 글

[코틀린] 더욱 코틀린스럽게(apply, also)  (0) 2023.09.07
[코틀린] 스프링 배치(2) - 적용  (0) 2023.09.04
[코틀린] queryDSL  (1) 2023.06.13
[코틀린] NULL 처리  (0) 2023.05.16
[코틀린] 스프링 DI  (1) 2023.04.21