반응형
Mockito에서 only과 time(1)은 어떤 차이일까?
Spring 2023. 5. 7. 18:53

스프링에서 Mock을 활용한 테스트를 할 때, Mockito를 가장 많이 사용할 것이다. 그리고 검증 로직을 만들 때 호출 횟수 기준으로 테스트 코드를 짜는 경우가 있다. // when userService.create(userSignUpRequest) // then verify(userRepository, times(1)).save(any()) verify(emailSender, only()).send(any(), any()) 처음에는 2가지 모두 1회만 사용한다는 점에서 동일한 용도가 아닐까 했다. 즉 아래와 같다. // userRepository라는 Mock bean은 save를 1회만 호출한다 verify(userRepository, times(1)).save(any()) // emailSende..

[Kafka] Consum한 뒤 에러가 나는 경우, 재시도를 막는 방법
Dev Memo 2022. 10. 5. 18:59

⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) 상황 설명 이벤트를 수신(Consume)한 뒤 원하는 로직을 처리하던 중에 에러가 발생할 수 있다. 이후에 다시 메시지를 처리할 수 있도록 재시도를 한다. 필자의 경우 10회동안 반복해서 시도를 했는데 한번 안되는 이상 10번을 해도 같은 상황이었다. 메세지 처리를 반복을 하지 않거나 한번만 반복하도록 하고 싶다. 개발 환경은 스프링 + 코틀린이다. ListenerContainerCustomizer 단일..

테스트할 때 필요한 객체를 일일이 만들기 귀찮을 때
Spring 2022. 9. 29. 13:14

. 시작하기 앞서 여기에서 진행되는 환경은 스프링부트 + 코틀린이며 아래와 같은 의존성이 추가가 되어 있다. kotlinVersion=1.7.10 springBootVersion=2.5.13 // build.gradle testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.kafka:spring-kafka-test") testImplementation("io.mockk:mockk:1.13.1") 테스트를 만들었는데 when-then 형태로 아래와 같은..

이제는 기본서도 최신 정보가 업데이트 되어야 할 때 (이것이 안드로이드다. 개정 3판)
Study 2022. 7. 24. 21:16

한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다...만진심이 담겨있습니다. 허위 사실 유포는 😎일절 없음. 안드로이드 개발 서적을 고르는 기준 수많은 개발 서적이 있고, 그 중 베스트셀러도 있기 마련. 그 중에서도 하나를 고를려면 어떤 기준으로 골라야할까. 개발 분야는 짧은 기간에 많은 것들이 바뀐다. 트렌드부터 Deprecated되는 기술까지 여러 형태로 업데이트된다. 그래서 공부를 할 때 최신 정보가 맞는지 중요하다. 물론 기본서라면 기본서의 역할에 맡게 쉽고 충분한 설명이 포함되어야 한다. 그리고 그 기본서가 안드로이드 개발 서적이라면 '최신' 정보가 포함되어 있는지도 중요하다. 왜 그럴까? 위에서 보이는 것처럼 안드로이드는 수많은 API 버전이 존재한다. API 버전이 올라가면서 안드로이..

API 장터, Rapid API 사용해보기
Tool 2022. 6. 23. 11:47

Rapid API라는 것을 들어봤을지 모르겠다. 여러 종류의 API를 제공해주는 플랫폼으로 사이드 프로젝트에 사용하기 좋은 것들이 참 많다. 유무료의 API를 사용할 수 있는데 이 중 무료 API를 하나 선택해서 어떻게 사용할 수 있는지 간략하게 설명해 보겠다.

Spring에서 데이터소스 2개를 동시에 사용해 보았다
Database 2022. 5. 9. 18:14

참고사항 : 본 실습환경은 스프링(Spring boot) + 코틀린(Kotlin) + MySQL + JPA이다. "배달의 만족"이라는 회사가 있다고 가정해보자. (만족이다. 민족아니다.) 이 회사는 음식 배달을 서비스하는 회사이기에 여러 식당과 계약을 맺은 상태이다. 그래서 식당 DB가 있을 것이고 배달하는 분들의 데이터가 들어간 라이더 DB가 있을 것이다. 서로 다른 2개의 스키마를 하나의 서비스에서 사용하는 일이 생길 수 밖에 없다. 그럴 때 어떻게 해야할까? 먼저 모델과 환경변수를 세팅하자 당연히 모델은 2개로 분리가 될 것이다. 아래 2개의 Entity 모델이 바라볼 DB를 앞으로 세팅하게 될 것이다. Restaurant.kt Rider.kt 그리고 환경변수(yml 파일)는 아래와 같다. 이때 각..

코틀린 표준 라이브러리에 동일한 클래스가 2개?
Dev Memo 2022. 3. 22. 19:19

⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) 문제 발견 Sequence 인터페이스를 학습하고 있었다. 공부하던 예시에서 구현한 라이브러리를 보려고 추적을 했는데 아래와 같이 2개의 파일을 발견했다. 아래 이미지에서 가장 왼쪽은 Sequence 인터페이스, 그리고 중간이 Sequence.kt, 오른쪽이 _Sequence.kt 파일이다. 왜 동일한 package에 언더바를 제외하면 동일한 이름의 파일이 2개나 있을까? The Kotlin Standar..

Kotlin에서 RestTemplateClient를 만들어보자
Spring 2021. 12. 23. 19:37

시작하기 앞서 난 코틀린도 RestTemplate도 제대로 이해하지 못한다. 물론 사용은 하고 있었으나 제대로 알고 사용하는 것과는 거리가 있었다. 그래서 기본적인 내용부터 포스팅에 담을 것이다. 누군가에게는 매우 기본적인 내용이 될 수 있으니 필요에 따라 내용을 필터링하여 읽으시길 권한다. ✅ 필요한 사전 지식 - 코틀린 기초 지식 - Spring framework 다음의 3단계로 개발을 진행한다. 1. RestTemplateClient : RestTemplate을 가지고 있는 추상 클래스 2. RestTemplateConfig : RestTemplate을 주입하는 설정파일 3. 실제 API를 호출하는 Service 혹은 Client 개발 RestTemplateClient API를 호출하는 곳에서 쉽게..

미해결사건. @Valid가 작동하지 않는다??
Spring 2021. 12. 15. 11:37

서두 본 글은 코틀린 + 스프링부트 환경에서 @Valid가 동작하지 않는 케이스를 다루었고 해당 이슈를 완전히 해결하지 못했음. 해결을 하기는 했는데 해결이 된 이유를 알 수 없음. 완벽한 해결책을 찾고자 했다면 "뒤로가기" 버튼을 누르기 바람 설명에 앞서 개발환경을 간단히 소개하고자 한다. 혹시나 나와 비슷한 상황을 겪고 이를 해결한 분이 계시다면 댓글로 안내를 부탁드...립니다. (제발) 아래는 gradle 스크립트 중 일부이다. plugins { id("org.springframework.boot") version "2.5.0" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version "1.5.10" ko..

Kotlin + JPA에서 FetchType.LAZY가 제대로 작동 안된다면?
Dev Memo 2021. 12. 2. 18:50

⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) 연관관계로 엮여있는 엔티티를 조회했을 때, 분명히 FetchType.LAZY를 적용했음에도 연관관계의 모든 엔티티가 조회되는 상황을 볼 수 있다. 그럼 혹시 아래 경우인지 확인해보자. 코프링 (코틀린 + 스프링) JPA를 사용한다 연관관계에 지연로딩을 적용한다. (FetchType.LAZY) // 예) @Entity class Product @ManyToOne(fetch = FetchType.LAZY) ..

728x90
반응형