콘텐츠로 건너뛰기

java

ApiService에 대한 Mock Test 예제

Api를 호출하는 서비스에 대한 테스트는 잘 하지 않는 경우가 많다. 혹은 @Ignore를 붙여놓고 필요시에만 풀어서 쓰는 경우도 있다. Mock Server를 제공해서 테스트 할 수 있는 걸 알고 있는데, 자주 쓰지 않으니 쓸 때마다 헷갈려서 기록해둔다.

 

Spring Batch에서 Application 설정

새로 스프링 배치 프로그램을 만들었는데, 테스트 환경에서는 특별히 이슈가 없다가 운영 환경에서 오류가 발생했다.

결국은 8080 포트가 충돌나서 오류가 발생한 것이었다. 배치를 여러 번 실행시키는 경우 톰캣이 제대로 shutdown시키지 못해서 발생하는 문제였다. 그런데 스프링 배치인데, 굳이 톰캣을 8080 포트로… 더 보기 »Spring Batch에서 Application 설정

EntityUtil.java 구현체

Java에서 Jpa를 쓰다보면, 항상 select를 선으로 진행하게 되는 경우가 많다. 예를 들어, name과 age를 입력했는데, name이 unique하다면, DB에서 name으로 select를 해보고, 있으면 setAge()를 통해서 update를 진행해야 하고, 없으면 해당 Entity를 새로 생성해서 insert를 해야한다. 그래서 아래와 같은 로직을 사용하는 경우가… 더 보기 »EntityUtil.java 구현체

intellij 단축키 – 최근 수정 내용 탐색 / 비교

별 건 아닌데, 기존에는 몰랐던 intellij 단축키 중에 편리할 것 같은 걸 찾아서 기록해둔다. 평상시에는 cmd+]랑 cmd+[를 사용해서 코드를 탐색했었는데, 수정된 것만 탐색해주는 기능이 있었다.   cmd+shift+back은 가장 최근에 수정하게 된 지점으로 커서를 옮겨준다. 거기에 cmd+option+shift+화살표를 누르면, 수정된 내용까지 diff… 더 보기 »intellij 단축키 – 최근 수정 내용 탐색 / 비교

Spring Data Rest URL 생성 분석

최근 업무에서 /api/entities이란 URL이 존재하는데, 아무리 Source를 뒤져봐도 해당 URL을 찾을 수 없었다.

몇 번 삽질을 하다가 결국 spring-data-rest를 사용했음을 알게 되었고, 해당 Library를 초기 분석한 내용을 기록해둔다. 공식문서1에 따르면 dependency는 아래처럼 설정해주면 된다.

그리고 기본 BaseUrl은 아래처럼… 더 보기 »Spring Data Rest URL 생성 분석

Future return에 대한 테스트 만들기

주로 오류에 대한 모니터링 메시지 등은 logical flow에 크게 영향을 주지 않기 때문에 @Async를 사용하여 분리하는 경우가 많다.

그런데 이런 경우 Future type의 return을 가지면 어떻게 테스트 코드를 만들어야 할 지 곤란한 경우가 있어서 기록해둔다. 1 이럴 때 사용하는… 더 보기 »Future return에 대한 테스트 만들기

JPA Page 쿼리는 Immutable List를 반환한다

이번에 맡은 업무에서 Spring Batch를 중점적으로 사용하고 있는데, 기존 로직을 리팩토링하면서 겪게 된 이슈를 기록해본다. 먼저 기존 로직은 아래와 같다. (코드 스니핏이고, 일부 업무와 관계된 네이밍은 모두 dummy로 치환하였다) 결국 배치로직에서 bulk로 읽어온 것을 하나씩 read/process/write 구조로 처리하고, 해당 내용이… 더 보기 »JPA Page 쿼리는 Immutable List를 반환한다

JPA에서 count()는 Long Type을 return 함

통계에서 사용하는 쿼리를 만들다보니, (약간은) 부득이 하게 JPA Query Method를 사용하지 않고 @Query annotation을 이용해서 아래처럼 구현하였다.

호출하는 쪽의 로직은 아래와 같다.

자세한 로직은 회사 업무상 대외비이기 때문에 약간 이상한 네이밍인 점은 신경쓰지 않기로 하자. 어쨌거나 위의 로직을… 더 보기 »JPA에서 count()는 Long Type을 return 함

JUnit5 @Nested, @DisplayName 활용

시작 JUnit5에서 개인적으로 가장 많이 활용하고 있는 기능은 @Nested 이다. 예전 포스트라서 약간 view가 깨지는 부분도 있지만 이런 테스트케이스는 어떨까?(또는 옛날사이트)에서도 많이 고민했던 부분을 JUnit5에서 공식적으로 해결해주었다.   소스 코드 간단한 분기문이 있는 코드를 만들어본다. 실제 서비스에서는 훨씬 복잡한 코드가… 더 보기 »JUnit5 @Nested, @DisplayName 활용

Swagger에서 httpMethod multiple-value를 지원하지 않음

아무런 문제가 없어보이는 코드에서 오류가 발생했다.

분명 HttpMethod는 multi value를 지원하는 값이다.

나중에야 사용하고 있는 swagger에서 multi value를 지원하지 않는 것을 알게 되어 기록을 남겨둔다.

you can currently only have one HTTP verb per op. https://github.com/swagger-api/swagger-ui/issues/183