Yun

https://github.com/cheese10yun Java & Backend Developer

Spring Batch CSV Reader & Writer

Spring Batch CSV Reader & Writer

Spring Batch를 이용해서 데이터베이스에 저장되어 있는 정보를 CSV file로 저장을 하는 방법에 대해서 작성해보겠습니다. CSV Writer 데이터 흐름 payment csv 데이터의 흐름은 간단합니다. payment table -> payment.csv으로 변경됩니다. payment table의 불필요한 칼럼 id, created_ay, updated_at은 빼고 amount, order_id만 CSV에 저장하겠습니다. Batch Code @Configuration class CsvWriterJobConfiguration( private

By Yun
Spring Cloud Gateway

Spring Cloud Gateway

해당 코드는 Github 공개되어 있습니다. 용어 명칭 설명 라우트(Route) 라우트는 목적지 URI, 조건자 목록과 필터의 목록을 식별하기 위한 고유 ID로 구성된다. 라우트는 모든 조건자가 충족됐을 때만 매칭된다 조건자(Predicates) 각 요청을 처리하기 전에 실행되는 로직, 헤더와 입력돤값 등 다양한 HTTP 요청이 정의된 기준에 맞는지를 찾는다. 필터(Filters) HTTP 요청

By Yun
동일한 Bean(Class)에서 @Transactional 동작 방식

동일한 Bean(Class)에서 @Transactional 동작 방식

동일한 Bean 내에서 @Transactional을 사용하는 경우 예상했던 것과 다르게 동작할 수 있습니다. 발생 원인과 해결 방법에 대해서 정리한 포스팅입니다. @Service class CouponService( private val couponRepository: CouponRepository ) { fun something(i: Int) { println("something CurrentTransactionName: ${TransactionSynchronizationManager.getCurrentTransactionName()}") this.save(i) } @Transactional fun save(i: Int) { println("save CurrentTransactionName: ${TransactionSynchronizationManager.

By Yun
JPA + Querydsl group_concat 사용법

JPA + Querydsl group_concat 사용법

해당 코드는 Github에서 확인할 수 있습니다. JPA + Querydsl group_concat 사용법 Querydsl 기반으로 작업하다 보면 sql 함수가 필요한 경우가 있습니다. 대표적으로 sum(), max() 등이 있고 해당 함수는 Querydsl 자체에서 지원해 주고 있습니다. 하지만 group_concat과 같은 함수를 사용하기 위해서는 별도의 설정이 필요합니다. 본 포스팅의 내용은 Mysql 환경에서 JPA + Querydsl 조합에서

By Yun
외부 인프라스트럭처 테스트

외부 인프라스트럭처 테스트

해당 코드는 Github에서 확인할 수 있습니다. 대부분의 애플리케이션은 외부 인프라스트럭처와 통신하면서 진행됩니다. 대표적인 외부 스트럭처는 외부 API들이 있습니다. 이런 외부 인프라스트럭처는 Mocking 해서 원하는 응답 값을 지정하고 검증하고 싶은 부분을 검증을 진행하는 것이 흔한 패턴입니다. 대표적으로 Mockito 프레임워크가 있으며 Mock 테스트는 Spring Guide - 테스트 전략 : Service 테스트, RestTemplate Mock 기반

By Yun
Spring RestTemplate Mock 기반 테스트 하기

Spring RestTemplate Mock 기반 테스트 하기

스프링 프로젝트에서는 외부 API 모듈을 RestTemplate를 이용해서 호출하는 경우가 많습니다, 이런 경우 RestTemplate을 기반으로 Mock 테스트를 보다 쉽게 진행할 수 있습니다. 왜 Mock 기반 테스트를 진행 해야하나 ? 외부 인프라스트럭처를 테스트 코드를 작성할 때는 mock 기반으로 테스트를 진행해야 합니다. 외부 인프라스트럭처에는 대표적으로 외부 API가 있습니다. 그런데 왜 Mock 기반으로 테스트해야 할까요?

By Yun
Junit5 with Kotlin & Spring Boot

Junit5 with Kotlin & Spring Boot

해당 코드는 Github를 확인해주세요. Spring boot 2.2 버전부터는 Junit5 디펜던시를 기본으로 포함하고 있습니다. Junit5 주요 테스트 어노테이션과 Spring boot에서 활용법을 정리해보았습니다. @ValueSource @ValueSource어노테이션을 사용하면 배열을 값을 테스트 메서드로 손쉽게 전달할 수 있습니다. @ParameterizedTest @ValueSource(strings = ["", " "]) internal fun `isBlank `(value: String) { print("value: $value "

By Yun
Spring  기반 - ConstraintValidator을 이용해서 효과적인 검증

Spring 기반 - ConstraintValidator을 이용해서 효과적인 검증

해당 코드는 Github에 공개되어 있습니다. 스프링에서는 JSR 303 기반 어노테이션 기반으로 일관성 있는 Validation을 진행할 수 있습니다. 하지만 @NotNull, @NotEmpty, @Email과 같은 검증은 가능하지만 비즈니스적에 맞는 Validation은 별도로 진행해야 합니다. 예를 들어 주문에 대한 결제 정보를 받는 경우 카드 결제 시에는 카드 정보, 무통장 결제에는 계좌 정보를 입력받아야 합니다. 해당

By Yun