이메일 프로토콜 이해하기: SMTP, POP, IMAP의 기능과 설정 📌 서론 우리 프로젝트에서 Java Mail Sender를 이용해서 사용자에게 임시 비밀번호가 담긴 메일을 전송하는 기능을 개발할 일이 있었다. 이때 Gmail을 사용해서 작업하려고 하다 보니 기본 세팅이 필요했다. 이때 나온 개념이 SMTP, POP, IMAP 이라는 개념인데 자주 접하긴 했지만 정확하게 뭔지는 잘 모르겠어서 이번 기회에 정리를 해보려고 한다. 그리고 Gmail을 이용해서 메일 전송 기능을 구현하다가 많은 블로그에서 POP이나 IMAP을 활성화시키던데 이것들이 각각 어떤 역할을 하는지도 궁금해져서 정리해보려고 한다. 1. SMTP란? SMTP는 Simple Mail Transfer Protocol의 약자로, 이메일을 ..
전체 글
하다보니 재미있는 AI에 빠져있는 평양냉면7 문의사항: ysoil8811@gmail.comQueryDSL에서 NPE 해결하기 - 서브쿼리와 외부 조인의 활용 📌 서론 QueryDsl을 이용해서 쿼리문을 작성하던 중 NPE가 발생하는 이슈가 생겼다. 이유는 join의 방식에 있었는데 같이 알아보자. 문제 상황 회원 정보와 함께 프로필 이미지 경로를 조회하는 QueryDSL을 작성하는 과정에서, 특정 문제에 직면했다. 코드는 다음과 같다: jpaQueryFactory .select(Projections.fields(MyPage.class, memberEntity.id.as("memberId"), memberEntity.memberFileEntity.storedFilePath.as("profileImageFilePath"), memberEntity.nickname.as("nickname"), me..
스프링 이벤트 리스너 테스트를 위한 @SpyBean과 @MockBean의 활용 📌 서론 이전 글에서는 @SpyBean의 기본적인 개념과 역할에 대해 알아보았다. 이번 글에서는 스프링 이벤트 리스너 클래스를 테스트하는 데 @SpyBean과 @MockBean을 어떻게 활용할 수 있는지 구체적으로 살펴보자. 특히, 이벤트 리스너의 호출 여부와 반응을 확인하는 방법에 초점을 맞추어볼 것이다. 🔻 @MockBean과 @SpyBean에 대해서 잘 모른다면 아래 글을 참고하면 좋다. 🔻 @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드: @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드에서 @MockBean과 @Mock의 이해와 활용 📌 서론..
RequestDto에서 MultipartFile 필드 사용 방법: 객체 바인딩 방법부터 테스트 코드까지 📌 서론 기존에 RequestDto로 사용하던 dto에 MultipartFile 필드를 추가해줘야 할 일이 있었다. RequestDto에 MultipartFile 필드를 추가해 주면서 기존에 사용하던 방식과 다르게 사용해야 하는 부분들이 여러 개 있어서 그 점에 대해서 설명해보려고 한다. 특히, @RequestBody 대신 @ModelAttribute 어노테이션을 사용해야 하는 이유와 RequestDto에 Setter 메서드가 필요한 이유, 그리고 테스트 코드의 수정에 초점을 맞춰 설명하겠다. 1. 컨트롤러 어노테이션: @RequestBody에서 @ModelAttribute로 전환 기존에 컨트롤러에서 ..
Mockito when().thenReturn()에서 eq()와 직접 변수 사용의 차이점 이해하기 📌 서론 테스트 코드로 단위 테스트를 작성하다보면 Mockito의 when().thenReturn() 메서드를 자주 사용하게 될 거다. 근데 이때 파라미터로 직접 변수를 사용한 적도 있고 eq() 메서드를 사용해서 파라미터를 세팅해 준 적도 많았다. 이 두 메서드의 차이점이 명확하지 않아서 에러를 발생시키고 이유도 알지 못한 채 에러를 고치고 그냥 넘어간 적도 있었다. 이 글에서는 이 두 접근 방식의 차이점을 명확하게 이해하고, 어떤 상황에서 각각을 사용하는 것이 적합한지를 함께 알아가보자. 테스트 코드를 작성할 실제 로직 코드 우리가 작성한 서비스 코드는 레시피 게시글에 있는 모든 댓글을 가져오는 로직이다..
스프링 부트 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의 실제 로직이 실행되면서, 의존하는 컴포넌트는 제어 가능한 모의 객체로 대체되어 테스트의 격리성을 ..