본문 바로가기

Lecture32

객체 필드 중복을 해결하는 다양한 방법들과 객체지향 패러다임을 이용한 순수 코드 방식의 해결법(feat. DDD의 Aggregate와의 연관성) 문제 정의 비슷한 역할을 하는 객체가 여러 있을 수 있다. 이때 동일한 필드를 가져 중복 코드가 다수 발생하는 문제가 생긴다. 예를 들어 일정 관리 프로그램을 만드는 과정에서 다음과 같이 Event(이벤트), Task(할일), Notification(알림) 객체들이 있다고 해보자. @Getter @NoArgsConstructor public class Event { private Long id; private LocalDateTime startAt; private LocalDateTime endAt; private String title; private String description; private User writer; private List engagements; private LocalDate.. 2023. 7. 22.
RestDocs로 API 문서를 만들어보자 (MockMvc 테스트, 커스터마이징 옵션 설정하기) RestDocs란 ? - 테스트 코드 기반으로 Restful Api 문서 생성을 돕는 도구 - Asciidoctor를 이용해서 Html 등등 다양한 포맷으로 문서를 자동으로 출력할 수 있다. - 가장 큰 장점은 테스트 코드 기반으로 문서를 작성한다는 것이다. -> 테스트 코드 강제화 -> 검증된 문서 보장 Swagger Vs RestDocs Swagger는 Api에 대한 명세 기능을 제공하면서도 호출에 좀 더 초점을 맞추고 있다. 또한 Swagger는 애노테이션 기반으로 구성해야 한다. 예를 들면 다음과 같은 방식이다. 실제 코드에 영향을 미치지는 않지만 지속적으로 명세를 추가해야 하기 때문에 복잡성이 증대된다. 집중해야 하는 비즈니스 로직에 덧붙이는 코드가 많기 때문에 가독성을 해친다. 반면 RestD.. 2023. 7. 13.
스프링 배치 병렬처리, mock과 static mock, AssertFile을 이용한 배치 로직 테스트 스프링 배치에는 4가지 방법의 병렬처리 방식이 있다. 275개의 데이터가 있는 input.txt 파일을 읽어 output으로 변환하는 작업을 병렬로 처리해보자. 데이터는 다음과 같다. 1 데이터-1 10 2 데이터-2 20 3 데이터-3 30 4 데이터-4 40 5 데이터-5 50 6 데이터-6 60 7 데이터-7 70 8 데이터-8 80 9 데이터-9 90 10 데이터-10 100 11 데이터-11 110 12 데이터-12 120 13 데이터-13 130 14 데이터-14 140 15 데이터-15 150 // ... 먼저 전처리를 위해 dto와 mapper를 작성한다. @Data public class AmountDto { private int index; private String name; priv.. 2023. 7. 12.
스프링 배치 Validator, listener, FlatFileItemReader 및 Writer를 사용하여 간단한 text 변환 작업을 구현해보자 JobParameterValidator @Configuration @AllArgsConstructor @Slf4j public class AdvancedJobConfig { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job advancedJob(Step advancedStep){ return jobBuilderFactory.get("advancedJob") .incrementer(new RunIdIncrementer()) .validator(new LocalDateParameterValidator("targetDate")) .start(ad.. 2023. 7. 12.
Spring Batch 프로젝트 환경 구성, 데이터 읽고 처리하고 쓰기, Batch 테스트 코드 프로젝트 세팅 gradle dependency plugins { id 'java' id 'org.springframework.boot' version '2.7.13' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:s.. 2023. 7. 12.