SpringFramework 36

MapStruct 설정 (ModelMapper 대안)

ModelMapper가 많이 사용하고 사용하기 편하나 성능 이슈가 있고, 아래 URL을 통해 확인할 수 있다. Performance of Java Mapping Frameworks | Baeldung MapStruct comes out on top, followed by JMapper as a close second. The other libraries follow far behind: Orika, ModelMapper, and Dozer. www.baeldung.com 따라서, 성능 이슈에 대응하기 위해 ModelMapper 대신 MapStruct를 대신 사용한다. MapStruct 설정 build.gradle 파일에 아래 의존성 추가 implementation 'org.mapstruct:mapstru..

JUnit DataJpaTest 단위 테스트 (with vault)

Vault를 적용중인 프로젝트에서 DataJpaTest를 통한 단위 테스트 방법을 제시한다. @ExtendWith(SpringExtension.class) @DataJpaTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) // 임베디드 DB미사용 (개발 MySql사용) @Import(VaultConfig.class) // DataSource Bean을 주입받음 class PoolContentRepositoryTest { @Autowired PoolContentRepository poolContentRepository; @Test void test(){ // DoSomething } }

AbstractJsonpResponseBodyAdvice Deprecated 대응

AbstractJsonpResponseBodyAdvice 를 상속받은 클래스를 제거하고, 아래 클래스를 추가한다. 신규 Cors origin 설정은 AbstractJsonpResponseBodyAdvice 클래스에서 선언한 대로 수정 작성한다. @Configuration public class WebConfig implements WebMvcConfigurer { // Spring Boot 버전업 대응으로 처리해두었음. JsonpAdvice 클래스 제거 후 사용 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 사용 가능한 모든 URL에 대해 .allowedOrigins("*"); // 모..

Spring Vault 연동(datasource 연결 포함)

Spring Vault 연동 예제 SpringBoot 버전 : 2.3.9.RELEASE Spring 버전 : 5.2.13.RELEASE Vault 버전 : 2.2.3.RELEASE config 설정은 따로 빼서 처리해도 되나, 소스가 복잡해지는것을 막기 위해 하나의 클래스에서 모두 처리 @Configuration public class VaultConfig extends AbstractVaultConfiguration { @Value("${vault_url}") private URI url; @Value("${vault_role_id}") private String roleId; @Value("${vault_secret_id}") private String secretId; @Value("${dataso..

jQuery DataTable Paging Model Mapping

공통 Model을 통해 개발속도 향상을 기대할 수 있도록함. 예제에서는 queryDsl을 사용한다. Front DataTable 구현부 프론트 검색 동작 // Datatable 검색 function fnSearch(){ $('#dataTable').DataTable().ajax.reload(); } 프론트 페이징 사이즈 변경 후 검색 // 페이징 사이즈 변경 function fnChangePagingSize(el){ $('#dataTable').DataTable().page.len($(el).val()); fnSearch(); } 백엔드 페이징 요청 자동매핑 Model @Getter @NoArgsConstructor @AllArgsConstructor public class DataTablePagingM..

Enum 객체 활용 방안

@JsonFormat(shape = JsonFormat.Shape.OBJECT) Front json 값 전달시 enum 객체 자체를 전달하여 front에서 code, name을 직접 선택하여 사용할수 있도록 한다. of(String code) code 값에 해당하는 enum 객체 반환 getAll() enum에 정의된 값을 List으로 반환 받는다. @JsonFormat(shape = JsonFormat.Shape.OBJECT) @Getter @AllArgsConstructor public enum CommonCodeType implements Code { TEL("tel", "전화번호"), PHONE("phone", "핸드폰번호") ; private String code; private String n..

Mock Response 객체로 변환

Mock 객체를 이용해 Controller를 호출하고, 그 결과를 객체로 변환하여 테스트한다. @SpringBootTest @AutoConfigureMockMvc class TestControllerTest { final static String head_url = "/test"; @Autowired CleanAPIController cleanAPIController; @Autowired MockMvc mockMvc; @Test void bbsList() throws Exception { // 기본 응답 테스트 mockMvc.perform(get(head_url + "/bbs/list")) .andExpect(status().isOk()) .andDo(print()); // 변환 테스트 MockHttpS..