본문 바로가기

전체 글

(51)
Step 이란? 1. 기본 개념 Batch Job 을 구성하는 독립적인 하나의 단계로서 실체 배치 처리를 정의하고 컨트롤하는 데 필요한 모든 정보를 가지고 있는 도메인 객체 단순한 단일 태스크 뿐 아니라 입력과 처리 그리고 출력과 관련된 복잡한 비즈니스 로직을 포함하는 모든 설정들을 담고 있다. 배치 작업을 어떻게 구성하고 실행할 것인지 Job 의 세부 작업을 Task 기반으로 설정하고 명세해 놓은 객체 모든 Job은 하나 이상의 step 으로 구성됨 2. 기본 구현체 TaskletStep : 가장 기본이 되는 클래스로서 Tasklet 타입의 구현체들을 제어한다. PartitionalStep : 멀티 스레드 방식으로 Step 을 여러 개로 분리해서 실행한다. JobStep : Step 내에서 Job 을 실행하도록 한다...
JobExecution 이란? 1.기본 개념 JobIstance 에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체 시작시간, 종료시간, 상태(시작됨, 완료, 실패), 종료상태의 속성을 가짐 JobIstance 과의 관계 JobExecution 은 'FAILED' 또는 'COMPLETED' 등의 Job의 실행 결과 상태를 가지고 있음 JobExecution 의 실행 상태 결과가 'COMPLETED' 면 JobInstance 실행이 완료된 것으로 간주해서 재 실행이 불가함 JobExecution 의 실행 상태 결과가 'FAILED' 면 JobInstance 실행이 완료되지 않은 것으로 간주해서 재 실행이 가능함. JobParameter 가 동일한 값으로 Job 을 실행할지라도 JobInstan..
JobParameter 란? 1. 기본개념 Job을 실행할 때 함께 포함되어 사용되는 파라미터를 가진 도메인 객체 하나의 Job 에 존재할 수 있는 여러개의 JobInstance 를 구분하기 위한 용도 JobParameter 와 JobInstance 는 1:1 관계 2. 생성 및 바인딩 어플리케이션 실행 시 주입 java -jar ***.jar requestDate=20220101 코드로 생성 JobParameterBuilder, DefaultJobParametersConter SpEL 이용 @Value(“#{jobParameter[requestDate]}”), @JobScope, @StepScope 선언 필수 3. BATCH_JOB_EXECUTION_PARAM 테이블과 매핑 JOB_EXECUTION 과 1:M 의 관계 4. 실습 ..
Job Instance란? 1. 기본개념 Job 이 실행될 때 생성되는 Job 의 논리적 실핼 단위 객체로서 고유하게 식별 가능한 작업 실행을 나타냄. Job 의 설정과 구성을 동일하지만 Job 이 실행되는 시점에 처리하는 내용은 다르기 때문에 Job 의 실행을 구분해야 함. 예들 들어 하루에 한 번씩 배치 Job 이 실행된다면 매일 실행되는 각각의 Job 을 Instance 로 표현한다. JobInstance 생성 및 실행 처음 시작하는 Job + JobParameter 일 경우 새로운 JobInstance 생성 이전과 동일한 Job + JobParameter 으로 실행 할 경우 이미 존재하는 JobInstace 리턴 내부적으로 JobName + JobKey (JobParameter 의 해시값)를 가지고 JobInstance 객..
Job이란? 1. 기본 개념 배치 계층 구조에서 가장 상위에 있는 개념으로 하나의 배치작업 자체를 의미함. "API 서버의 접속 로그 데이터를 통계 서버로 옮기는 배치"인 Job 자체를 의미한다. Job Configuration 을 통해 생성되는 객체 단위로서 배치 작업을 어떻게 구상하고 실행할 것인지 전체적으로 설정하고 명세해 놓은 객체 배치 Job 을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체로 제공한다. 여러 Step 을 포함하고 있는 컨테이너로서 반드시 한 개 이상의 Step 으로 구성해야 함. 2. 기본 구현체 SimpleJob 순차적으로 Step 을 실행시키는 Job 모든 Job 에서 유용하게 사용할 수 있는 표준 기능을 갖고 있음 FlowJob 특정한 조건과 흐름에 따라 Step 을 ..
@Async 사용법 @Async 사용법 많은 블로그에도 정리가 잘 나와있는 방법이다. 1. @EnableAsync로 @Async를 쓰겠다고 스프링에게 알린다. 2. 비동기로 수행되었으면 하는 메서드위에 @Async를 적용한다. 스프링 가이드에도 마찬가지로 설명해준다. 만약에 별도로 @Async에 대한 설정이 없으면 새로운 비동기 작업을 스레드 풀에서 처리하는 게 아니라 새로운 스레드를 매번 생성해서 작업을 수행시키는 것이 디폴트 설정이다. 그래서 쓰레드풀을 빈으로 등록시켜줘서 자동으로 해당 스레드 풀로 작업을 넘기도록 설정한다. @Configuration @EnableAsync public class AsyncThreadConfiguration { @Bean public Executor asyncThreadTaskExecu..
MapStruct 사용법 정의 MapStruct는 Entity와 Dto간의 매핑을 지원하는 라이브러리이다. 종류 Entity와 Dto간의 매핑을 위해 지원하는 라이브러리는 크게 ModelMapper와 MapStruct가 있다. 특징 MapStruct는 컴파일시 미리 생성된 구현체를 통해 Mapping하기 때문에 속도적인 측면에서 이점이 있다. ModelMapper의 경우 리플렉션 기반으로 동작하기도 하고 퍼포먼스에 대한 이슈가 많은편 적용 public interface OrderAsInfoMapper { @Mapping(source = "id", target = "orderAsId") @Mapping(source = "orderAsSerial", target = "orderAsSerial", qualifiedByName = "S..
동시성을 구현할 때 명심할 것들 #12 목차 1. 동시성 프로그래밍이란 2. 동시성 프로그래밍이 필요한 이유 3. 안전한 동시성 프로그래밍 규칙 4. 동시성 테스트 방법 동시성 프로그래밍이란? 어플리케이션을 효율적으로 실행하기 위해 멀티코어를 온전히 활용하도록 구현하는 방식 동시성 프로그래밍이 필요한 이유 동시성 프로그래밍의 미신과 오해(1) 동시성은 항상 성능을 높여준다 (X) 동시성은 때로 성능을 높여준다 (0) 대시 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만 성능이 높아진다. 예시 : 웹 브라우저에서 여러 이미지 리소스들을 불러와 다운로드할 때 예시 상황 : Servlet Java Servlet 동시성 구현 요청이 들어오면 Thread Pool에 있는..