@MybatisTest 클래스 레벨의 @Sql 이 수행되지 않는 경우 문제 상황 MybatisTest 에서 메서드 레벨에서 @Sql 을 수행한 경우 클래스 레벨의 @Sql 이 동작하지 않는 상황 발견 테스트 코드의 신뢰성에 문제가 생기는 경우가 발생하였다. 공식문서 Executing SQL Scripts :: Spring Framework 문서상 @Sql 에 대해 해당 애너테이션은 클래스 레벨과 메서드 레벨에서 동시에 선언하는 경우 기본적으로 메서드 레벨의 @Sql 선언이 클래스 레벨의 선언을 오버라이딩한다. @SqlMergeMode 어노테이션을 통해 해당 동작을 변경할 수 있음. 이전 상황 @Sql(statements = {"SELECT * FROM ORDERS", "UPDATE ORDERS SET D..
Spring Security 5.7.11 기준이다.스프링 시큐리티에는 컨트롤러에 역할(Role) 기반 접근 제한을 설정하는 방법에 여러 가지가 있는데,가장 일반적인 방법으로는 @PreAuthorize 또는 @Secured 어노테이션을 사용하는 것이다.해당 어노테이션은 메서드 수준의 보안이 가능하다.@PreAuthorize특정 역할을 가진 사용 역할을 가진 사용자만 메서드를 호출할 수 있도록 제한할 수 있다.@Controller public class SomeController { @PreAuthorize("hasRole('ROLE_ADMIN')") @RequestMapping("/adminOnly") public String adminOnly() { // 관리자만 접근 가능한 로직 return "admi..
개요@MockMember 어노테이션의 경우 테스트 환경에서 시큐리티에서 인증된 사용자의 모의(Mock) 하기 위해서 사용된다.일반적인 경우에는 @WithMockUser 등의 사용자 모킹을 하면 되겠지만..나는 @WithMockUser 가 사용을 해도 일단 인증을 받아 올 수가 없었다.그래서 검색하던 중에 발견한 것이 별도의 커스텀 어노테이션을 통하여 SecurityContext 안의 보안 객체를 커스텀하게 테스트코드에서만 채우는 방법이 있다는 것을 발견했다.어노테이션 코드@Retention(RetentionPolicy.RUNTIME) @WithSecurityContext(factory = MockMemberSecurityContextFactory.class) public @interface MockMem..
Properties 파일을 Yaml 로 변경하면서 현재 domain 기존 설정 부분이 null 로 넘어오는 문제가 생겼다props 의 경우 키 - 밸류( LinkedHashMap ) 으로 데이터를 호출함.문제는 해당 key value 구조의 yaml 을 기존과 같이 들고오려면.. profile 에서 props 구분을 [spring.profile.active] 로 할 수 있는게 아니라props[키][키][키] ⇒ 이런식으로 호출하도록 해야함; 해결법yaml 의 평면화 작업키 밸류 구조를 기존 properties 의 방식처럼키.키.키 ⇒ 이런식으로 평탄화재귀를 해야한다. ⇒ 솔직히 이런 작업에서 재귀를 돌리고 싶지 않았다.키값으로 직접 호출해결import org.yaml.snakeyaml.Yaml def l..
Swagger UI 와 Spring RestDocs 의 장 단점의 비교Swagger UI 의 장점직관적인 UI스웨거는 API 에 대한 요청과 응답 등을 시각적으로 표현하여 사용자가 쉽게 이해할 수 있습니다실시간 테스트API 엔드포인트에 대한 실시간 테스트를 제공합니다.Swagger UI 의 단점어노테이션 수동 기입 기반 API어노테이션 등을 수기로 기입하여 문서를 생성하기에, 코드와 문서간의 불일치가 발생할 수 있다.유지 보수의 문제성API 변경시마다 스웨거 어노테이션을 수정해야한다.복잡코드가 진짜~ 너무 더럽다어노테이션때문에 불필요하게 컨트롤러단과 DTO 단에서 피로함이 가중된다.Spring Rest Docs 의 장점정확성테스트 코드를 기반으로 문서를 생성하기에 코드와 문서간 일관성 유지가 가능하다가볍..