좋은 테스트의 요건 - RIGHT BICEP
·
TDD
RIGHT BICEPRIGHT- 결과가 올바른지 검증할 수 있어야 함.  package unit02;public class Calculator { private int result; public int add(int a, int b) { result = a + b; return result; } public int subtract(int a, int b) { return a - b; } public int multiply(int a, int b) { return a * b; } public int divide(int a, int b) { if (b == 0) throw new IllegalArgumentException("Division by zero"); return a / b; } publ..
좋은 테스트의 요건 - FIRST
·
TDD
FIRSTF (Fast) - 빠른 속도:테스트는 빠르게 실행되어야 함시스템이 커지면 단위 테스트도 실행하는데 오래 걸리기 때문속도를 빠르게 하기 위해서 보통 3가지의 방법이 사용된다.선택적 컨텍스트 로딩: @WebMvcTest, @DataJpaTest와 같은 애너테이션을 사용해 필요한 부분만 로드하여 전체 애플리케이션 컨텍스트 로딩(스프링 애플리케이션이 실행될 때 모든 필요한 빈(bean)과 의존성을 설정하고 초기화하는 과정)을 피함.의존성 모킹: @MockBean으로 외부 서비스와 의존성을 모킹하여 불필요한 리소스 로딩을 줄임.병렬 테스트 실행: 테스트를 병렬로 실행해 멀티코어 프로세서를 효과적으로 활용함으로써 테스트 시간을 단축.JUnit5 설정 파일 작성: junit-platform.properti..
단위 테스트의 기초
·
TDD
단위 테스트- 어떤 단위의 코드를 테스트하려고 테스트 코드를 작성하는 것=> 이러한 단위 테스트를 작성하는 이유는, 1. 어떤 기능을 막 작성했고, 그것이 예상한대로 동작하는지 확인하기 위해2. 작성한 변경사항을 문서화해서 자신과 다른 사람들이 나중에 이해하도록 하기 위해3. 기존 동작을 깨뜨리지 않았는지 확인하기 위해4. 시스템의 현재 동작을 확인하기 위해5. 서드 파티 코드가 더 이상 기대한대로 동작하지 않는지 확인하기 위해 단위 테스트와 통합 테스트의 차이-단위 테스트는 소프트웨어의 가장 작은 단위, 즉 개별적인 함수나 메서드를 테스트하는 것이고, 통합 테스트는 소프트웨어의 여러 구성 요소(모듈, 서비스, 시스템 등)를 결합하여 이들이 함께 올바르게 동작하는지 검증하는 테스트. https://f-l..
스프링 배치 반복 및 오류 제어
·
Spring
Repeat- 특정 조건이 충족될 때까지 Job또는 Step을 반복함- RepeatOperation을 사용해서 Step의 반복과 Chunk 반복을 함- 기본 구현체로 RepeatTemplate을 제공함 반복을 종료할 것인지 여부 결정 세 가지 항목RepeatStatus- 스프링 배치의 처리가 끝났는지 판별하기 위한 열거형 enum=> CONTINUABLE : 작업이 남아있음=> Finished : 더이상의 반복이 없음 CompletionPolicy - RepleatTemplatedml iterated 메소드 안에서의 반복을 중단할지 결정- 정상 종료를 알리는데에 사용함.- 실행 횟수 또는 완료시기, 오류 발생시 수행할 작업에 대한 반복여부 결정- 정상 종료를 알리는데 사용함.ExceptionHandler..
Spring Batch - ItemProcessor, ItemWriter
·
Spring
FlatFileItemWriter- 2차원으로 표현된 유형된 파일을 처리하는 ItemWriter LineAggregator - Item을 받아서 String으로 변환하여 리턴- FiledExtractor를 사용해서 처리함- 구현체=> PassThroughLineAggregator / DelimitedLineAggregator / FormatterLineAggregator FieldExtractor- 전달받은 Item 객체의 필드를 배열로 만들고, 배열을 합쳐서 문자열을 만들도록 구현하도록 제공하는 인터페이스- 구현체=> BeanWrapperFieldExtractor=> PassThroughFieldExtractor JsonFileItemWriter- 객체를 받아 JSON String으로 변환하는 역할을 ..
Spring Batch - ItemReader
·
Spring
FlatFileItemReader - DB가 아닌 Resource에서 데이터를 읽어올 수 있도록 구현된 구현체 - 2차원 데이터료 표현된 유형의 파일을 처리하는 ItemReader - Resource와 LineMapper 두 가지 요소가 필요함 Resource- FileSystemResource - new FileSystemResource("resource/path/config.xml")=> 파일 시스템에서 자원을 읽어올 때 사용- ClassPathResource - new ClassPathResource("classpath:path/config.xml")=> 클래스패스에서 자원을 읽어올 때 사용 LineMapper- 파일의 라인 한 줄을 Object로 변환해서 FlatFileItemReader로 리턴함..
Spring Batch - Chunk
·
Spring
Chunk- 여러 개의 아이템을 하나로 묶은 하나의 덩어리, 블록- 한번에 하나씩 아이템을 입력받아, chunk단위의 덩어리로 만든 후, 트랜잭션을 처리함. 즉 chunk단위의 commit과 rollback이 이루어짐 - 대용량 데이터를 한번에 처리하는게 아니라, 청크 단위로 쪼개어서 작업함 => 이렇게 청크 단위로 쪼개서 작업하는 이유는,1. 메모리 효율성 : 한꺼번에 너무 많은 데이터를 메모리에 올리면 메모리 부족 문제가 발생할 수 있음. 청크 단위로 적절한 양의 데이터를 읽어 메모리 사용량을 줄일 수 있음. 2. 트랜잭션 관리 : 부분적으로 처리하다가, 오류가 나면 롤백 처리 하는 등 일관성 유지 가능3. 쓰기 효율성 : ItemWriter에서는 청크를 모아서 한 번에 쓰기 작업을 처리하는데, 데이..
Spring Batch - Flow
·
Spring
Flow- Step이 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있는 Job, FlowJobBuilder에 의해 생성됨- 내부적으로 SimpleFlow 객체를 포함하고 있으며, Job 실행시 호출함.   public Job batchJob() { return jobBuilderFactory.get("batchJob") .start(Flow) .next(Step or Flow or JobExcecuitonDecider) .on(String pattern) .to(Step) .stop() / fail() / end() / stopAndRestart() .end() .build();} - start(Flow) => 이처럼 ..
스프링 배치 - Job / Step
·
Spring
배치 초기화 설정JobLauncherApplicationRunner- 스프링 배치 작업을 시작하는 ApplicationRunner로서, BatchAutoConfiguration (Spring Boot 3.3.0 API)  에서 생성됨- ApplicationRunner의 구현체로, 어플리케이션이 정상적으로 구동되자마자 실행됨- 기본적으로 빈으로 등록된 모든 job을 실행시킴import org.springframework.batch.core.Job;import org.springframework.batch.core.JobParametersBuilder;import org.springframework.batch.core.launch.JobLauncher;import org.springframework.boot..
takoyummy
TakoHub