Mockito when().thenReturn()에서 eq()와 직접 변수 사용의 차이점 이해하기 📌 서론 테스트 코드로 단위 테스트를 작성하다보면 Mockito의 when().thenReturn() 메서드를 자주 사용하게 될 거다. 근데 이때 파라미터로 직접 변수를 사용한 적도 있고 eq() 메서드를 사용해서 파라미터를 세팅해 준 적도 많았다. 이 두 메서드의 차이점이 명확하지 않아서 에러를 발생시키고 이유도 알지 못한 채 에러를 고치고 그냥 넘어간 적도 있었다. 이 글에서는 이 두 접근 방식의 차이점을 명확하게 이해하고, 어떤 상황에서 각각을 사용하는 것이 적합한지를 함께 알아가보자. 테스트 코드를 작성할 실제 로직 코드 우리가 작성한 서비스 코드는 레시피 게시글에 있는 모든 댓글을 가져오는 로직이다..
Spring
스프링 부트 3에 레디스 적용하기 📌 서론 스프링 부트 3을 사용하여 Redis를 통한 데이터 처리에 관한 내용을 설명해 보겠다. 1. Redis 의존성 추가 먼저, build.gradle에 Redis 의존성을 추가한다. 이것은 Spring Boot 프로젝트에 Redis 기능을 통합하는 첫 단계이다. // redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2. Redis 설정 application.yml에서 Redis 서버의 연결 정보를 설정한다. 여기에는 호스트, 포트, 비밀번호, 사용할 데이터베이스 번호 등이 포함된다. spring: redis: host: localhost port: 6379 password:..
JPA와 Spring Data JPA의 차이 📌 서론 컨퍼런스를 다니며 종종 JPA와 Spring Data JPA를 다르게 구별해서 사용하는 것을 보고, 이 둘의 명확한 차이가 무엇인지 알아보기로 했다. JPA (Java Persistence API) 정의와 목적 JPA는 Java EE의 일부로, 자바에서 관계형 데이터베이스를 사용하는 표준화된 방식을 제공한다. 주 목적은 개발자가 데이터베이스와 상호 작용하는 방식을 단순화하고, 객체 관계 매핑(ORM)을 통해 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간격을 좁히는 것이다. 기능 엔티티 매니저를 사용하여 데이터베이스의 CRUD 작업을 수행한다. 다양한 어노테이션을 활용하여 객체와 테이블 간의 매핑을 제공하며, JPQL을 사용하여 쿼리를 실행한다. ..
테스트 격리성의 중요성과 모의 객체(Mock Object)를 활용한 전략 @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드: @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드에서 @MockBean과 @Mock의 이해와 활용 📌 서론 테스트 코드 작성 시 자주 마주치는 @Mock과 @MockBean은 비슷해 보이지만, 각각 다른 목적과 환경에서 사용된다. 이 두 어노테이션의 yijoon009.tistory.com 위 글에서 다음과 같은 내용의 댓글이 달렸다. 좋은 내용 감사해요! 궁금한게 있습니다. 테스트 중에는 AuthService의 실제 로직이 실행되면서, 의존하는 컴포넌트는 제어 가능한 모의 객체로 대체되어 테스트의 격리성을 ..
Spring 테스트에서 실제 호출 @SpyBean으로 확인하기 📌 서론 스프링 이벤트 리스너 클래스를 테스트하다가 잘 안 돼서 팀원과 이것저것 찾아본 결과, @SpyBean이라는 새로운 어노테이션을 알게 되었다. 이번 글에서 @SpyBean에 대해서 설명하고 다음 장에서 이 어노테이션을 사용해서 스프링 이벤트 리스너 클래스를 테스트하는 과정을 설명하겠다. @SpyBean이란? @SpyBean은 Spring Framework에서 제공하는 테스트 관련 어노테이션이다. 이 어노테이션은 Spring의 ApplicationContext 내에 존재하는 빈(bean)의 인스턴스를 감시(spy)하는 데 사용된다. 이는 실제 객체를 사용하지만, Mockito 프레임워크를 통해 해당 빈의 모든 메서드 호출을 감시하고, 필..
스프링 테스트 코드에서 @MockBean과 @Mock의 이해와 활용 📌 서론 테스트 코드 작성 시 자주 마주치는 @Mock과 @MockBean은 비슷해 보이지만, 각각 다른 목적과 환경에서 사용된다. 이 두 어노테이션의 차이점을 명확히 이해하고 올바르게 활용하는 것은 효율적인 테스트 코드 작성에 중요하다. @MockBean이란 무엇인가? @MockBean은 Spring Boot 테스트 환경에서 사용되는 어노테이션으로, 가짜(모의) 빈을 생성하여 스프링 애플리케이션 컨텍스트(ApplicationContext에)에 추가한다. Mockito 테스팅 프레임워크를 사용하여 실제 구현체를 갖지 않는 모의 객체를 생성한다. 주로 통합 테스트에서 사용된다. @MockBean의 역할 의존성 격리 @MockBean은 실제..
스프링 부트 3.1.2 버전에서 AWS SNS 클라이언트 여러 개 사용하기 📌 서론 기존에 이미 프로젝트에서 서울 리전에 SNS, SQS를 사용하기 위한 SnsClient가 빈으로 등록되어 있던 상황이다. 그런데 회원가입을 할 때 사용자가 입력한 휴대폰 번호로 문자를 보내는 기능이 추가되었다. 이 기능을 개발하기 위해 AWS SNS 기능 중 SMS 문자 메시지를 보내는 서비스를 이용하기로 했다. 그러나 AWS 서울 리전에는 SMS를 보내는 기능이 없기 때문에 도쿄 리전에서 SMS를 보내는 기능을 사용했다. 그리고 스프링 부트에 도쿄 리전에서 SMS 전송을 위한 SNS 클라이언트를 생성하려다 보니 동일한 SnsClient 가 두 개 생겨버리는 문제가 발생했다. 🔻 AWS SNS, SnsClient가 무엇인..
Spring Boot 3 버전에서 AWS SNS를 통한 SMS 발송하기 📌 서론 AWS에서 SMS 메시지를 보내는 기능을 구현할 때 흔히 "AWS SMS"라고 언급하는 것은 실제로 AWS SNS(Simple Notification Service)의 SMS 발송 기능을 사용하는 것을 의미한다. AWS에서는 SMS 메시지를 전송하기 위해 별도의 'SMSClient' 같은 클라이언트를 제공하지 않고, 이 기능은 SNS 서비스의 일부로 제공된다. AWS SNS는 다양한 형태의 알림을 지원하는 서비스로, 이메일, SMS, HTTP/S 알림 등을 보낼 수 있다. 특히 회원가입, 암호 재설정, 2단계 인증과 같은 상황에서 사용자에게 SMS를 보내야 할 때 많이 활용된다. AWS SMS 도입 이유 우리 프로젝트에서 회..