🌱 spring
-
Spring Batch - Job Flow🌱 spring/🚛 spring batch 2022. 12. 16. 01:03
📌 Spring Batch Job Flow 실전에서 사용할 수 있는 Spring Batch 내용 Step 실제 Batch 작업을 수행하는 역할 Batch로 실제 처리하고자 하는 기능과 설정을 모두 포함하는 장소 Job 내부의 Step들 간의 순서 혹은 처리 흐름을 어떻게 제어❓ (Step 들을 어떻게 관리 ?) Next StepNextJobConfiguration.java 샘플코드 @Slf4j @Configuration @RequiredArgsConstructor public class StepNextJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderF..
-
메타데이터 테이블🌱 spring/🚛 spring batch 2022. 12. 16. 00:53
📌 메타 테이블 알아보기 BATCH_JOB_INSTANCE BATCH_JOB_INSTANCE SELECT * FROM BATCH_JOB_INSTANCE; JOB_INSTANCE_ID : 테이블의 PK JOB_NAME : 수행한 Batch job name BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 테이블이다. Job Parameter ❓ Spring Batch 가 실행될 때 외부에서 받을 수 있는 파라미터 ex) 특정 날짜를 Job Parameter로 넘긴 경우 Spring Batch는 해당 날짜 데이터로 데이터를 조회 / 가공 / 입력 등의 작업을 할 수 있다. 같은 Batch Job 이라도 Job Parameter가 다르다면 BATCH_JOB_INSTANCE 에..
-
MySQL 환경 - Spring Batch🌱 spring/🚛 spring batch 2022. 12. 16. 00:47
📍 MySQL 환경에서 Spring Batch 실행 실제로 Spring Batch 는 어플리케이션 코드만 작성하면 되는 것이 아니다!! 메타 데이터 테이블 들이 필요하다 메타 데이터 데이터를 설명하는 데이터 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터 Spring Batch의 메타데이터 이전에 실행한 Job이 어떤 것들이 있는지 최근 실패한 Batch Parameter에는 어떤 것들이 있는지 최근 성공한 Job은 어떤 것들이 있는지 다시 실행하면 어디서 부터 시작하면 될지 어떤 Job에 어떤 Step들이 있는지 Step들 중 성공한 Stpe과 실패한 Step들은 어떤 것들이 있는지 등등 Batch 어플리케이션을 운영하기 위한 메타데이터가 여러 테이블에 나눠져 있다. 메타 데이터의 ..
-
Spring Batch🌱 spring/🚛 spring batch 2022. 12. 16. 00:37
❓배치 어플리케이션 배치(Batch)는 일괄처리 라는 뜻을 가지고 있다. 매일 전 날의 데이터를 집계해야 한다고 가정 집계 과정을 어디서 수행해야 할까?? 웹 어플리케이션으로만 생각한다면 Tomcat + Spring MVC 를 생각한다. 하지만 이렇게 큰 데이터를 읽고 가공 후 저장한다면 해당 서버는 CPU, I/O 등의 자원을 다 써버려서 다른 Request 처리를 못하게 된다. 집계 기능은 하루에 1번 수행 이를 위해 API를 구성하는 것은 낭비 ❗ 데이터가 너무 많아 처리 중에 실패가 나는 경우? 실패한 위치부터 다시 실행할 수 있다면 얼마나 좋을까 이미 집계 함수를 누군가 실행했는데 다른 누군가 또 실행시켜서 데이터가 2배가 된다면? 같은 파라미터로 같은 함수를 실행할 경우 이미 실행한 적이 있다..
-
Spring Interceptor에서 Request 데이터 처리🌱 spring 2022. 12. 6. 17:09
📍 HttpServletRequest - InputStream ‘application/json’ 타입의 데이터를 Servlet의 Filter 나 Spring의 Interceptor에서 따로 처리를 해주기 위해서는 HttpServletRequest의 InputStream 을 읽어야 한다. 인증 작업 등과 같은 상황에서 사용할 수 있다. ⚠️ 하지만 HttpServletRequest의 InputStream은 한 번 읽으면 다시 읽을 수 없다. 톰캣 개발자들이 막아 둠. Interceptor나 Filter에서 InputStream을 읽게 되면 이후 Spring이 Converter를 이용해 JSON 데이터를 바인딩 처리할 때 다음과 같은 에러가 발생한다. java.lang.IllegalStateException..
-
애플리케이션 컨텍스트와 빈팩토리🌱 spring 2022. 11. 16. 11:23
❓애플리케이션 컨텍스트 (Application Context) 애플리케이션 컨텍스트는 빈들의 생성과 의존성 주입 등의 역할을 하는 일종의 DI 컨테이너이다. SpringBoot를 이용한다면 애플리케이션 종류에 따라 각기 다른 종류의 ApplicationContext가 내부에서 만들어진다. 웹 애플리케이션이 아닌 경우 애플리케이션 컨텍스트 : AnnotationConfigApplication 웹 서버 : ❌ 서블릿 기반의 웹 애플리케이션인 경우 애플리케이션 컨텍스트 : AnnotationConfigServletWebServerApplicationContext 웹 서버 : Tomcat 리액티브 웹 애플리케이션인 경우 애플리케이션 컨텍스트 : AnnotationConfigReactiveWebServerAppl..
-
JPA - @ElementCollection🌱 spring 2022. 11. 2. 17:49
값 타입 컬렉션 값 타입 컬렉션이란 컬렉션에 값 타입을 담는 것을 의미한다 연관관계 매핑에서 엔티티를 컬렉션으로 사용하는 것이 아닌 값 타입을 컬렉션에 쓰는 것. 값 타입❓ 엔티티 ❓ 값 타입은 흔히 엔티티와 많이 비교 된다. 엔티티는 흔히 @Entity로 정의하는 객체이며 @Id라는 어노테이션으로 정의한 PK(식별자)를 통해 계속적으로 추적이 가능하다. 하지만, 값 타입은 식별자라는 개념이 존재하지 않아 추적이 어렵다. 값 타입은 흔히 우리가 사용하는 Integer, String 과 같은 자바 원시타입과 같은 존재이다. 흔히 사용하는 객체와 달리 공유에 안전하고 side effect가 발생하지 않는다. 임베디드 타입의 경우에는 구성 요소 자체가 값 타입으로 이루어져 있긴 하지만 임베디드 타입 자체가 불..
-
JPA - Embedded Type🌱 spring 2022. 11. 2. 17:23
🗂 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 의미 식별자가 없고 값만 존재 → 변경시 추적 불가 값 타입 분류 기본 값 타입 자바 기본 타입 (int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입 컬렉션 값 타입 임베디드 타입(Embedded Type) ❓ 복합 값 타입을 의미한다 새로운 값 타입을 직접 정의할 수 있다. JPA는 임베디드 타입 이라고 불려진다 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고 한다. 직접 정의한 임베디드 타입도 int, String 처럼 값 타입이다!!! ⭐ 사용방..