코드 최적화를 위한 매직 상수 사용법: 이점과 대안적 관리 방법 📌 서론 프로젝트를 개발하면서 매직 상수를 사용하는 일이 많이 있었다. 많은 경우에 final 키워드의 사용은 이해가 가지만, static 키워드까지 함께 사용하는 이유에 대해서는 궁금증이 생겼다. 이에 따라, 매직 상수를 활용하는 실제 사례와 final 그리고 static의 사용 목적을 탐구하고 정리해 보기로 했다. 이 글은 그러한 고민과 탐색의 결과를 담은 것으로, 매직 상수의 사용 이유와 그것이 개발에 미치는 영향을 분석해 봤다. 1. 매직 상수(Magic Constant)란? 매직 상수는 소스 코드 내에서 고정된 값을 가진 상수로, 이 값은 프로그램의 실행 동안 변경되지 않는다. 이러한 상수들은 주로 숫자나 문자열 형태로 나타나며, ..
전체 글
하다보니 재미있는 AI에 빠져있는 평양냉면7 문의사항: ysoil8811@gmail.com스프링 부트 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 도입 이유 우리 프로젝트에서 회..
JPA N+1 문제 해결하기 (fetch join, entityGraph, batch size) 서론 사이드 프로젝트를 같이 하는 동료와 이것저것 얘기하다가 N+1 문제에 대해서 이야기가 나왔다. 굉장히 단순하고 간단하게 알고있던 개념이었는데 계속 얘기하다보니 조금 헷갈리고 기존에 잘못 이해하고 있던 개념들도 있다는걸 알게되어서 이번 기회에 N+1 문제에 대해서 정확한 해결 방법을 정리해보려고 했다. 이후 나올 예시 코드를 테스트할 수 있는 컨트롤러, 서비스, 레파지토리는 아래 링크 레파지토리 안에 [nplusone] 패키지에서 확인할 수 있다. GitHub - yijoon009/blog-coding Contribute to yijoon009/blog-coding development by creatin..
테스트 코드의 가독성 향상: BDD 방법론 @DisplayName의 효과적 활용 서론 현대 소프트웨어 개발에서 테스트 코드는 단순히 기능의 정확성을 검증하는 것을 넘어, 코드의 명확한 문서화와 커뮤니케이션 도구로서 중요한 역할을 담당한다. 테스트 코드의 가독성을 향상시키는 데에는 여러 전략이 있지만, 이번 글에서는 우리 프로젝트에서 적용중인 BDD(Behavior-Driven Development)와 @DisplayName 어노테이션의 활용을 중점으로 설명하겠다. BDD란 무엇인가? BDD(Behavior-Driven Development)는 소프트웨어 개발 과정에서 행동(behavior)을 중심으로 하는 접근 방법이다. 이 방식은 Dan North에 의해 개발되었으며, TDD(Test-Driven De..
단위테스트에서 사용되는 Static 메소드를 Mock으로 주입할때 발생하는 문제 해결 방법 에러 발생 코드 일단 내가 단위 테스트를 진행하고 싶은 서비스는 아래와 같다. 사용자에게 받은 refresh token을 검증하고 유효한 토큰이면 TokenUtils의 static 메서드를 사용해 accessToken을 재발행해주는 로직이다. import lombok.RequiredArgsConstructor; import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time...
테스트 전략에서 단위 테스트와 통합 테스트의 차이점과 의존성 관리 TDD를 도입해서 개발을 하고 있지만 여전히 단위 테스트와 통합 테스트의 차이를 명확하게 알지 못해 테스트 코드를 작성하는데 오랜 시간이 걸렸다. 한번 두 개의 차이점을 제대로 이해하고 넘어가 볼 필요가 있어서 내가 이해한 대로 최대한 정리해 봤다. 단위 테스트 (Unit Test) 단위 테스트의 목적 단위 테스트는 개별 함수나 클래스가 독립적으로 올바르게 작동하는지 검증하는 데 중점을 둔다. 이 과정을 통해 각 컴포넌트가 예상대로 기능하는지 확인할 수 있다. 단위 테스트를 수행하는데 필수적인 요소 모의 객체(Mock) 사용 단위 테스트에서는 의존하는 외부 시스템이나 클래스를 모의 객체로 대체하여, 테스트 대상 코드의 기능을 독립적으로 검..
레이어 별 단위 테스트, 통합 테스트 전략 선택 스프링 부트 프로젝트에서 헥사고날 아키텍처를 적용했을때 TDD를 어떻게 적용해야하는지 우리가 고려했던 부분을 한번 정리해봤다. 아래 내용은 우리가 실제 프로젝트에 적용한 내용을 정리한 것이다. 이 방법이 절대적으로 옳은 방법이거나 정답은 아니라는 걸 명심해 줬으면 좋겠다. 또한 틀린 내용이 있을 수 있으니 언제든지 알려주면 좋겠다,, 전통적인 3-레이어 아키텍처에서의 TDD 전통적인 3-레이어 아키텍처(표현 계층, 비즈니스 로직 계층, 데이터 액세스 계층)에서 TDD를 적용할 때, 보통 다음과 같은 순서로 진행한다: 단위 테스트(Unit Testing): 가장 낮은 수준의 메서드(예: 데이터 액세스 메서드)에 대한 테스트를 먼저 작성하고, 이를 통과하도록 ..