단위 테스트 JPAQueryFactory에 대해 mocking하기 ● 단위테스트할 함수 @Service @RequiredArgsConstructor @Transactional public class QueryFactoryTestService { private final JPAQueryFactory queryFactory; public boolean queryFactoryTest(int companyId) { return getFetchFirstCompany(companyId) != null; } private Company getFetchFirstCompany(int companyId) { return queryFactory .select(company) .from(company) .innerJoin(a..
java에서 이미지 메타 정보를 추출할 경우 rgb와 cmyk의 포멧이 다를 경우 지원하지 않는 타입(Unsupported Image Type) 에러가 발생한다. rgb와 cmyk의 read는의 경우 다르게 구현하여야 한다. ● 이미지 포멧 RGB 이미지 메타 추출 try { String imageUrl = "http://RGBimageURL"; imageUrl = UriUtils.encodePath(imageUrl, Charset.forName("utf-8")); InputStream input = new URL(imageUrl).openStream(); BufferedImage image = ImageIO.read(input); int width = image.getWidth(); int height..
- Exception 발생시 특정 횟수만큼 재시도를 진행하고자 한다. - 저같은 경우 주로 다른 애플리케이션을 API로 통신시 네트워크등의 이슈로 문제가 발생시 재시도를 진행하고자 할때 사용한다. - 방법은 두가지가 존재한다. spring에서 지원하는 spring-retry 와 net.jodah.failsafe 의 RetryPolicy이다. ● git 주소 technology-team / failsafe-retry — Bitbucket ● @Retryable 어노테이션 1. dependencies 설정 - spring-retry 사용 시 aspectjweaver 가 필요하다. implementation 'org.springframework.boot:spring-boot-starter' implementa..
보통 bean validation은 controller나 service 단위에서 호출하여 사용한다. API를 호출을 통해 bean validation을 체크하지만 다른 서비스에서 controller를 호출할 경우나 수동으로 직접 체크해줘야 할 일이 있을 수도 있다. 그럴 경우 유효성 검사를 트리거 할 수 있는 방법이다. public static void validate(T object, Class... groups) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set violations = validator.validate(object, g..
● Mockito로 테스트코드를 작성하는 이유 @SpringBootTest 로 테스트코드를 작성하다보며 시간이 지날수록 프로젝트의 덩치가 커지면서 테스트코드를 실행하는데 굉장히 많은 시간이 걸리며 빌드시에도 많은 시간이 소요된다. 따라서 단위 테스트단위로 코드 작성시에는 mockito를 이용하여 테스트코드를 짜는것이 유용하다고 판단된다. @RunWith(MockitoJUnitRunner.class) @ExtendWith(MockitoExtension.class) 모두 Mockito의 Mock 객체를 사용하기 위한 Annotation이다 @RunWith는 junit4 @ExtendWith 는 junit5 사용시 정의하면 된다. ● Mockito를 이용한 예제 import java.util.Optional;..
● @SpringBootTest 및 test Slices(Auto-configuration Annotations) @SpringBootTest는 Spring Main Application(@SpringBootApplication)을 실행할때와 동일한 모든 Bean을 스캔하여 mock bean을 생성합니다. 통합테스트 슬라이스테스트(단위테스트) 어노테이션 @SpringBootTest @DataCassandraTest @DataJdbcTest @DataJpaTest @DataLdapTest @DataMongoTest @DataNeo4jTest @DataR2dbcTest @DataRedisTest @JdbcTest @JooqTest @JsonTest @RestClientTest @WebFluxTest @Web..
● 변경 정보 확인 개발을 진행하다 보면 두개의 값을 비교해야 하여 서로 다른 데이터를 확인해야 하는 경우가 있다. 예를 들면 변경 이력을 저장하고 히스토리로 활용하고자 할 경우이다. zjsonpatch.JsonDiff 와 guava.MapDifference를 확인 하고 어떻게 데이터를 비교하여 보여주는지 알아보자 ● git 주소 bitbucket.org/technology-team/object-differing/src/master/ ● 공통설정 데이터가 다른 오브젝트를 만들기 위해 dto를 생성합니다. - Member.class import java.util.List; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Gett..

● graphql이란? Graphql은 페이스북에서 만든 쿼리 언어입니다. 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적입니다. 클라이언트 시스템에서 작성하고 호출합니다. ● rest API 와 비교 REST API는 URL, METHOD등을 조합하기 때문에 다양한 Endpoint가 존재 합니다. 반면, graphql은 단 하나의 Endpoint가 존재 합니다. 또한, graphql API에서는 불러오는 데이터의 종류를 쿼리 조합을 통해서 결정 합니다. 예를 들면, REST API에서는 각 Endpoint마다 데이터베이스 SQL 쿼리가 달라지는 반면, graphql API는 graphql 스키마의 타입마다 데이터베이스 SQL 쿼리가 달라집니다. ● 예제 GIT 주소 bitbucket..
mysql 을 8.x으로 사용자를 접속하면 아래와 같은 에러가 발생을 한다. client does not support authentication protocol requested by server consider upgrading mysql client mysql 8.0부터 암호화의 기본 인증 플러그인을 caching_sha2_password 을 사용하여 기존보다 안전한 암호화를 제공한다. 옛날의 mysql client는 아직 해당 암호 플러그인을 인식하지 못하는 문제가 발생하므로 이전의 암호 플러그인으로 변경하여 암호를 저장해 줍니다. https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-s..
● MNIST 데이터mnist 데이터 갯수 역할 mnist.train 55,000 학습데이터 mnist.test 10,000 테스트데이터 mnist.validation 5,000 검증데이터 mnist는 이미지를 분석을 위한 데이터의 모임이다mnist의 데이터는 총 7만개로 이중 55,000개는 학습에 사용하고 10,000개는 테스트에 5,000개는 검증에 사용하기 위해 나누어 놓은것입니다.mnist는 지도학습 알고리즘의 데이터로서 활용하며 각 데이터들은 image와 label이 세트로 존재합니다.학습에 사용되는 image와 그 결과를 담은것이 label입니다. ● Relu를 이용한 분류모델(전체소스)import tensorflow as tfimport numpy as np from tensorflow.e..