Back-End/Spring

    [Spring] Security 테스트 적용기 02 (+ Oauth2.0, jwt)

    Spring Security 테스트 적용기 02 OAuth 2.0 또는 JWT와 같은 보다 복잡한 인증 메커니즘을 사용하는 경우, @WithMockUser와 @WithUserDetails만으로는 충분하지 않을 수 있다. OAuth 2.0 및 JWT와 같은 토큰 기반 인증 방식은 다른 방식으로 테스트해야 한다. 일반적인 방식으로 Spring Security Test 프레임워크에서 지원하는 @WithSecurityContext 애노테이션을 사용하여, 커스텀한 @WithMockUser 애노테이션을 만들고 OAuth 2.0 인증을 가정하는 테스트를 작성할 수 있다. 테스트 코드 작성에 도움을 주는 애노테이션들을 정리하고, @WithSecurityContext 어노테이션을 사용하여 @WithMockOAuth2Us..

    [Spring] Security 테스트 적용기 01

    Spring Security는 어떻게 테스트를 할 수 있을까? Spring Security와 관련된 기능을 테스트하려면 인증 정보를 미리 주입해야 한다. 테스트를 진행할 때 초록빛을 보기 위한 가장 간단한 방법은 테스트 전에 SecurityContext에 직접 Authentication을 주입하는 경우이다. class UserServiceTest { @BeforeEach void setUp() { UserDetails user = createUserDetails(); SecurityContext context = SecurityContextHolder.getContext(); context.setAuthentication(new UsernamePasswordAuthenticationToken(user, ..

    [Exception] Custom Exception을 언제 써야할까?

    서론 서비스를 만들다보면 예외를 발생시키는 일이 많이 발생한다. 그에 따라 Java에서는 사용자가 상황에 따라 적절한 표준 예외를 처리할 수 있도록 기능을 제공하고 있다. 하지만 표준 예외 메시지 대신에 사용자 정의 예외 메시지를 제공하며, 일반적으로 특정 응용 프로그램 또는 라이브러리에서 발생하는 독자적인 예외 상황을 처리할 때 사용할 수 있는 `Custom Exception`는 의미 있는 예외처리가 가능하다. 표준 예외 처리, Custom exception으로 사용자가 직접 정의한 예외 처리, 두 가지를 비교하며 각각을 비교해보자. 표준 예외를 사용하면 안 될까? 다음 표는 사용자가 상황에 따라 자주 사용되는 표준 예외 예시이다. 예외 클래스 발생 상황 IllegalArgumentException 인..

    [Spring] Rest-Assured 알아보기

    서론 카페 키오스크 개발 당시, MockMvc 테스트 도구를 활용하여 애플리케이션 서버에 배포하지 않고도 스프링 mvc의 동작을 재현하며 테스트를 수행할 수 있었다. MockMvc 리팩토링 과정에서 Rest-Assured라는 테스트 도구를 알게 되었고, 이번 포스팅은 두 가지를 비교하면서 Rest-Assured에 대해 자세히 정리해보려고 한다. Rest-Assured 등장배경 기존의 테스트 프레임워크들은 API 테스트를 작성하는 것에 있어서 RESTful API의 HTTP 요청 및 응답을 쉽게 작성하고 검증하는 것이 어려웠다. REST-Assured는 간편하게 HTTP 요청을 작성하고 응답을 검증하는 기능을 제공하여 API 테스트를 효율적으로 작성할 수 있도록 도와준다. 또한 단위 테스트, 통합 테스트로..

    [JPA] QueryDSL을 RepositoryImpl로 관리해보자.

    서론 JPA와 MyBatis의 자바 ORM을 모두 경험한 결과, MyBatis는 SQL 쿼리에 더 직접적인 접근을 가지고 JPA는 객체지향적인 접근을 가지고 있어서 정적 쿼리를 다루는 것은 JPA가 비교적 간단하고 직관적이지만 동적 쿼리를 다루는 것은, JPA가 상대적으로 어려움(엔티티와 속성의 제약)이 있다. JPA의 장점을 더 살리기 위해 쿼리를 분리화 해서 유지 관리하기 쉬운 방법을 모색했고, RepositoryImpl 클래스 내부에서 QueryDSL을 사용하여 쿼리를 생성하고 실행하는 방식을 찾았다. 이번 포스팅은 그 방식을 spring 코드 예시로 설명하며 정리해보려고 한다. Repository에서 QueryDSL 사용하기 public interface OrderRepository extends..