1) monggoDB 사이트 접속 https://account.mongodb.com/account/login?signedOut=true Cloud: MongoDB Cloud account.mongodb.com 2) 회원가입 후 로그인시, 접속되는 화면 3) create a database ■ [Build a Database] ■ [Create] ■ [Create Cluster] 3) 이동된 화면에서 유저 생성 ■ How would you like to authenticate your connection? ■ Where would you like to connect from? [Add My Current IP Address] 를 누르면 현재 자신의 IP를 자동으로 등록해준다. ■ [Finish and Cl..
실전! Querydsl 강의 정리 3편 들어가기전 Spribgboot + Querydsl 설정 https://devfunny.tistory.com/844 [Querydsl 1편] SpringBoot2.7 + Querydsl5.0 설정하기 (Entity, Dto class to QClass) 실전! Querydsl 강의 정리 2편 Querydsl 설정 build.gradle ▶ querydsl 의존성 추가 //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" // querydsl 라이브러리 annotationProcess.. devfunny.tistory.com 예제 Entity 설정하기 https://devfunny.tis..
목표 Customer 테이블에 등록된 테스트 데이터 중 firstname 컬럼이 "A"로 시작하는 데이터를 찾아, 해당 데이터를 json 포맷으로 customer.json 파일을 생성해보자. Job 생성 JsonConfiguration.java package com.project.springbatch._58_writer_json; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; impo..
실전! Querydsl 강의 정리 2편 DTO 클래스 생성 MemberDto.java package study.querydsl.dto; import com.querydsl.core.annotations.QueryProjection; import lombok.Data; import lombok.Getter; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString public class MemberDto { private String username; private int age; public MemberDto() { } } MemberTeamDto.java package study.querydsl.dto; import com.quer..
실전! Querydsl 강의 정리 2편 Querydsl 설정 build.gradle ▶ querydsl 의존성 추가 //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" // querydsl 라이브러리 annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" // Querydsl 관련 코드 생성 기능 제공 ▶ 전체코드 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-managem..
Job 생성 아래와 같은 Job을 만들자. Processor 체이닝 리스트 기대 결과 CustomItemProcessor1 [item1, item2, item3, item4, item5, item6, item7, item8, item9, item10] CustomItemProcessor2 [item11, item22, item33, item44, item55, item66, item77, item88, item99, item1010] Job 수행 CompositionItemConfiguration.java package com.project.springbatch._66_processor_delegate; import lombok.RequiredArgsConstructor; import org.spring..
ThreadLocal ThreadLocal 클래스에는 get, set 메서드가 있는데 이를 호출하는 스레드마다 다른 값을 사용할 수 있도록 관리해준다. ThreadLocal 클래스의 get 메서드를 호출하면 현재 실행중인 스레드에서 최근에 set 메서드를 호출해 저장했던 값을 가져올 수 있다. 스레드 로컬 변수는 변경 가능한 싱글턴이나 전역 변수 등을 기반으로 설계되어있는 구조에서 변수가 임의로 공유되는 상황을 막기위해 사용하는 경우가 많다. 쉽게말해서, ThreadLocal이란 스레드 단위로 로컬 변수를 제공하는 클래스다. ThreadLocal 동작방식 ThreadLocalMap 스레드가 코드를 실행하면서 만나게되는 모든 ThreadLocal 변수를 threadLocals 객체에 저장한다. Thread..
volatile 변수 volatile로 선언된 변수의 값을 바꿨을때 다른 스레드에서 항상 최신 값을 읽어갈 수 있도록 해준다. ▶ 변수의 값을 읽을때 CPU cache에 저장된 값이 아닌 Main 메모리에서 읽는다. 기존에는 CPU Cache에만 반영되고, 실제 Main Memory에는 반영되지 않는다. Volatile은 Main Memory에 즉시 저장한다. 특정 변수를 선언할때 volatile 키워드를 지정하면, 컴파일러와 런타임 모두 '이 변수는 공유해 사용하고, 따라서 실행 순서를 재배치 해서는 안된다.' 라고 이해한다. volatile 변수는 프로세서의 레지스터에 캐시되지도 않고, 프로세서 외부의 캐시에도 들어가지 않기 때문에 항상 다른 스레드가 보관해둔 최신의 값을 읽어갈 수 있다. ▶ 그러므..
예제 파일 생성 JobController.java @RestController @RequiredArgsConstructor public class JobController { private final JobRegistry jobRegistry; private final JobOperator jobOperator; private final JobExplorer jobExplorer; } Customer.java package com.project.springbatch._77_operation; import lombok.AllArgsConstructor; import lombok.Data; import java.util.Date; @Data @AllArgsConstructor public class Cust..
@SpringBatchTest 자동으로 ApplicationContext에 테스트에 필요한 여러 유틸 Bean을 등록해주는 어노테이션 클래스 설명 JobLauncherTestUtils launcJob(), launchStep()과 같은 스프링 배치 테스트에 필요한 유틸성 메서드를 지원한다. JobRepositoryTestUtils JobRepository를 사용해서 JobExecution을 생성 및 삭제 기능 메서드를 지원한다. StepScopeTestExecutionListener @StepScope 컨텍스트를 생성해준다. 해당 컨텍스트를 통해 JobParameter 등을 단위 테스트에서 DI 받을 수 있다. JobScopeTestExecutionListener @JobScope 컨텍스트를 생성해준다...
SynchronizedItemStreamReader Thread-safe 하지 않은 ItemReader를 Thread-safe하게 처리하도록 하는 기능을 제공한다. Thread-safe Reader 각 스레드가 대기하고 있다가 순차적으로 Item을 읽어온다. read() public class SynchronizedItemStreamReader implements ItemStreamReader, InitializingBean { private ItemStreamReader delegate; public void setDelegate(ItemStreamReader delegate) { this.delegate = delegate; } /** * This delegates to the read method ..
Partitioning MasterStep이 SlaveStep을 실행시키는 구조이다. SlaveStep은 각 스레드에 의해 독립적으로 실행이 된다. SlaveStep은 독립적인 StepExecution 파라미터 환경을 구성한다. SlaveStep은 ItemReader / ItemProcessor / ItemWriter 등을 가지고 동작하며 작업을 독립적으로 병렬 처리한다. MasterStep은 PartitionStep이며, SlaveStep은 TaskletStep, FlowStep 등이 올 수 있다. 예제코드 PartitioningCustomer.java package com.project.springbatch._45_partitioning; import lombok.AllArgsConstructor; ..