Spring 71

[Spring Batch] TaskletStep 아키텍처

TaskletStep 간단 요약 1. Job이 Step을 실행 2. Step은 RepeatTemplate 내 Tasklet을 실행 3. Tasklet 내 비즈니스 로직 수행 후 예외 발생 여부에 따른 조건 분기 3.1 예외 발생 시 반복문 종료 및 Step 종료 4. 정상적으로 비즈니스 로직이 수행될 경우 RepeatStatus에 따른 조건 분기 4.1 RepeatStatus가 FINISHED일 경우 반복문 종료 및 Step 종료 4.2 RepeatStatus가 CONTINUABLE일 경우 2번으로 돌아가서 다시 Tasklet 실행 TaskletStep 상세 1. SimpleJob이 각각의 Step들을 실행합니다. SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300 ..

Spring 2023.07.11

[Spring Batch] SimpleJob 아키텍처

SimpleJob 간략 흐름 SimpleJob을 실행하면 Job->Step->Tasklet 순서로 실행이 되고 각 과정마다 메타데이터가 생성되어 DB에 저장이 됩니다. SimpleJob 아키텍처 1. JobLauncher가 JobParameters를 받고 JobInstance 신규 생성 여부 및 JobInstance 실행 가능 여부를 파악합니다. JobParameters가 동일한 JobInstance가 존재한다면 해당 JobInstance를 기준으로 실행 가능 여부를 파악 이미 생성된 JobInstance의 배치 상태가 COMPLETED라면 JobRestartException 발생하며 실행 불가 JobInstance가 존재하지 않는다면 JobInstance를 신규 생성 SimpleJobLauncher의 ..

Spring 2023.07.10

[Spring Batch] 스프링 배치 도메인 정리

Job 배치 계층 구조에 최상위 개념으로 하나의 배치 작업 자체를 의미 ex) "elasticsearch에 저장된 로그를 RDB로 옮기는 배치" -> Job 배치 작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 놓은 객체 반드시 한 개 이상의 Step을 구성 Spring Batch가 기본 구현체 제공 SimpleJob FlowJob JobInstance Job이 실행될 때 생성되는 Job의 논리적 실행 단위 (실행되는 시점) 하루에 한 번씩 배치 Job이 실행될 경우 매일 실행되는 각각의 Job을 JobInstance로 표현 따라서, Job과 JobInstance는 1:N 관계 JobInstance 생성 및 실행 기준 Job과 JobParameter 조합이 신규일 경우 새로운 JobIns..

Spring 2023.07.06

[Spring] 트랜잭션 전파 정리

개요 트랜잭션이 이미 진행 중인데 추가로 트랜잭션을 수행할 때 추가 트랜잭션이 어떻게 동작할지 결정하는 것을 트랜잭션 전파 혹은 Transaction Propagation이라고 합니다. 이번 게시글에서는 스프링에서 제공하는 트랜잭션 전파에 대해 간단히 정리해 보겠습니다. 이해를 돕기 위해 아래 게시글을 먼저 보고 오는 것을 추천드립니다. https://jaimemin.tistory.com/2271 @Transactional 동작 원리 용어 정리 트랜잭션 관리에는 크게 두 가지 방법이 있습니다. 선언 방식의 트랜잭션 관리 프로그래밍 방식의 트랜잭션 관리 선언적 트랜잭션 관리 @Transactional 애노테이션 하나만 선언해서 편리 jaimemin.tistory.com 트랜잭션 전파 옵션 스프링 프레임워크..

Spring 2023.04.30

[Spring] @Transactional 적용 시 주의 사항

개요 앞선 포스팅에서 @Transactional 애노테이션 적용 시 프록시 방식의 AOP를 통해 트랜잭션이 적용되는 내용을 정리했습니다. https://jaimemin.tistory.com/2271 @Transactional 동작 원리 용어 정리 트랜잭션 관리에는 크게 두 가지 방법이 있습니다. 선언 방식의 트랜잭션 관리 프로그래밍 방식의 트랜잭션 관리 선언적 트랜잭션 관리 @Transactional 애노테이션 하나만 선언해서 편리 jaimemin.tistory.com 이번 게시글에서는 @Transactional 적용 시 주의할 사항을 정리해 보겠습니다. @Transactional 적용 시 주의 사항 @Transactional을 적용 시 주의할 점이 크게 세 가지가 있습니다. 트랜잭션을 적용하기 위해서는..

Spring 2023.04.18

@Transactional 동작 원리

용어 정리 트랜잭션 관리에는 크게 두 가지 방법이 있습니다. 선언 방식의 트랜잭션 관리 프로그래밍 방식의 트랜잭션 관리 선언적 트랜잭션 관리 @Transactional 애노테이션 하나만 선언해서 편리하게 트랜잭션을 적용하는 방법 "트랜잭션을 적용하겠다"라고 메서드나 서비스에 선언하기만 하면 AOP를 통해 트랜잭션이 적용되는 방식 프로그래밍 방식의 트랜잭션 관리 PlatformTransactionManager 또는 TransactionTemplate 등을 통해 트랜잭션 관련 코드를 직접 작성하는 방법 이번 게시글에서는 선언적 트랜잭션 관리의 동작 원리에 대해 알아보겠습니다. Transaction AOP 전체 흐름 @Transactional 애노테이션이 선언되면 AOP를 통해 트랜잭션이 적용되므로 Trans..

Spring 2023.03.29

Springboot 동작 방식 및 분석하는 방법

개요 Spring Initialzr가 제공해 주는 프로젝트 템플릿 덕분에 개발자들은 손쉽게 스프링 부트 프로젝트 개발을 시작할 수 있습니다. 버튼 몇 번 클릭만 하면 개발을 바로 진행할 수 있기 때문에 편리하다는 장점이 있지만, 이로 인해 저를 포함해서 많은 개발자들이 스프링 부트의 내부 동작 과정 및 AutoConfiguration에 의해 추가된 빈들을 배우지 않는 단점이 있습니다. 따라서, 이번 게시글에서는 스프링 부트가 내부적으로 구성 정보를 어떻게 추가하는지 살펴보고 추가된 bean들에 대해 확인하는 방법을 간략하게 소개하겠습니다. 글을 읽기에 앞서 아래 게시글들을 참고하시면 이해가 더 잘 될 것 같습니다. https://jaimemin.tistory.com/2259 [Spring Boot] Au..

Spring 2023.03.15

[Spring] @Conditional 정리

개요 스프링 4.0부터 추가된 Conditional 애노테이션에 대해 간단히 정리해 보겠습니다. @Conditional & Condition 인터페이스 앞서 언급했듯이 @Conditional은 Spring 4.0부터 추가가 되었고 이름 뜻대로 모든 조건을 충족해야지만 스프링 컨테이너에 Bean으로 등록시키는 역할을 수행합니다. @Conditional은 @Configuration 클래스와 @Bean 메서드에 적용이 가능하기 때문에 Target이 타입과 메서드 모두 적용되며 클래스 조건을 만족하지 못하는 경우 메서드는 무시가 됩니다. 스프링 부트가 사용하는 @Conditional의 가장 대표적인 방법은 클래스의 존재를 확인할 때이며 이를 위해 @ConditionalOnClass와 @ConditionalOnM..

Spring 2023.03.07

[Spring Boot] AutoConfiguration

개요 스프링 부트의 Bean 구성 정보는 Component Scan에 의해서 등록되는 Bean과 AutoConfiguration에 의해 자동으로 등록되는 빈으로 구분됩니다. 이번 게시글에서는 일반적으로 자동으로 등록되는 빈과 함께 AutoConfiguration의 동작 메커니즘에 대해 작성해 보겠습니다. Bean의 역할과 구분 AutoConfiguration 동작 메커니즘에 대해 알아보기 전에 앞서 Bean의 정의와 함께 역할과 구분에 대해 알아야 합니다. Bean이란 스프링 컨테이너에서 생성되고 관리되는 자바 객체이며 모두 싱글톤으로 관리됩니다. Bean은 크게 3가지로 구분할 수 있는데 아래와 같습니다. Application Logic Bean Application Infrastructure Bean..

Spring 2023.03.06

[Spring Boot] 메타 애노테이션과 합성 애노테이션

개요 스프링 부트에는 annotation 관련 기능을 많이 제공하고 있는데 저 포함 많은 개발자가 동작 방식을 자세히 모르는 상태로 개발을 하고 있는 것 같습니다. 스프링에서 기본으로 제공하는 애노테이션 같은 경우 동작 원리를 모르는 상태로 사용해도 개발하는데 문제없지만 커스텀하게 애노테이션을 선언해야 할 경우 문제가 발생할 확률이 큽니다. 따라서 이번 게시글에서는 간략하게 스프링에서 제공하는 메타 애노테이션과 더불어 합성 애노테이션에 대해 알아보겠습니다. 메타 애노테이션(Meta-annotation) 메타 애노테이션은 애노테이션에 적용한 애노테이션을 의미합니다. 예를 들자면, @Controller 애노테이션이 부여된 클래스는 @Controller의 메타 애노테이션인 @Component가 직접 사용된 것..

Spring 2023.03.06