개발 등/SPRING 22

@PathVariable, @RequestParam 으로 Entity 객체 자동 매핑

SpringMVC으로 화면에서 파라미터를 전달받을 때 일반적으로 @RequestParam 혹은 @PathVariable 을 이용해서 다음과 같이 처리한다. @RequestMapping("/{id}") String showUserForm(@PathVariable("id") String id, Model model) { User user = userRepository.findById(id); model.addAttribute("user", user); return "userForm"; } Spring에서는 DomainClassConverter 를 이용해서 코드를 더 단순화하게 해준다. @RequestParam이나 @PathVariable로 받은 인자와 뒤에 선언한 Entity 타입을 추론해서 해당 Repos..

개발 등/SPRING 2023.06.01

Spring HATEOAS with Spring Boot >= 2.2

HATEOAS(Hypermedia As The Engine Of Application State)란 REST API를 사용하는 클라이언트가 서버와 동적으로 상호작용이 가능하도록 하는 것이다. 간단히 말하면첫째 Hypermedia를 통해서 애플리케이션의 상태 전이가 가능해야 한다.둘째 Hypermedia를 통해서 자기 자신에 대한 정보가 있어야 한다. 이를 사용하기 위해 Spring HATEOAS 를 의존성에 추가해야 한다. org.springframework.boot spring-boot-starter-hateoas 사용법은 Spring Boot 2.2 이상과 그 미만의 버전에서 달리한다. 여기에서는 2.2 이상을 기준으로 설명한다. @PostMapping() public ResponseEntity cr..

개발 등/SPRING 2023.04.29

JUnitParams (도메인 테스트에 매개변수 이용)

JUnit을 사용해서 테스트를 진행하면 매개변수를 사용할 수가 없다. 그런데 도메인 단위의 테스트를 진행하다 보면 같은 코드에 매개변수만 달리하는 중복된 코드가 발생하는 경우가 종종 있다. 이럴 경우 JUnitParams 를 사용하면 매개변수를 이용할 수 있어서 테스트 코드가 훨씬 간결해진다. 사용법은 JUnit4와 JUnit5에 따라 다르다. 1. JUnit4 다음과 같이 의존성을 추가한다. Maven pl.pragmatists JUnitParams 1.1.1 test Gradle testCompile 'pl.pragmatists:JUnitParams:1.1.1' 다음과 같이 테스트 코드를 작성하면 된다. @RunWith(JUnitParamsRunner.class) public class PersonT..

개발 등/SPRING 2023.04.28

@WebMvcTest VS @AutoConfigureMockMvc

스프링 부트에서 컨트롤러단의 테스트 클래스를 작성하기 위해서 보통 @SpringBootTest + @AutoConfigureMockMvc 어노테이션으로 작업을 하는 경우가 많다. @SpringBootTest를 이용해서 테스트를 작성하게 되면 스프링 빈을 모두 로드하기 때문에 통합테스트가 아닌 경우에 적합하지 않다. 특히 컨트롤러단의 테스트를 위해서는 Web Layer에 필요한 요소만 로드할 수 있는 테스트 방식이 더 적합하다. 이럴 경우 @WebMvcTest(로드할 컨트롤 클래스) 어노테이션을 사용한다. @WebMvcTest(EventController.class) public class EventControllerTests { @Autowired MockMvc mockMvc; @Test void cre..

개발 등/SPRING 2023.04.26

Spring Boot Swagger 3.0 적용 1

Swagger 란 REST APIs를 문서화해주며, APIs를 호출해서 테스트할 수 있게 해주는 OpenAPI 표준이다. Swagger Tool Swagger Codegen: Swagger 에 정의된 형태로 Client/Server 코드를 생성하는 CLI 툴 Swagger UI: Swagger API 명세서를 웹에서 확인 및 테스트할 수 있는 툴 Swagger Editor: API 설계서/명세서를 작성하기 위한 툴 여기에서는 Swagger UI를 중심으로 작성할 예정이다. Spring boot 에서는 Swagger를 사용하기 위해 Springfox와 Springdoc-openapi 라이브러리를 사용한다. Springfox는 2020년 7월 이후로 거의 3년 동안 더이상 업데이트가 진행되지 않고 있고, S..

개발 등/SPRING 2023.04.07

javax.servlet.ServletException: Could not resolve view with name 'redirect:/swagger-ui/index.html' in servlet with name 'dispatcherServlet'

Spring boot Swagger 3.0을 적용했을 때 javax.servlet.ServletException: Could not resolve view with name 'redirect:/swagger-ui/index.html' in servlet with name 'dispatcherServlet' 리다이렉트 에러가 발생하는 경우 Swagger 설정 파일에 다음 코드를 추가하면 된다. @Bean public InternalResourceViewResolver defaultViewResolver() { return new InternalResourceViewResolver(); }

개발 등/SPRING 2023.04.03

SPRING 3.X 스케쥴러 사용하기

스프링 3 버전 이전의 Spring Quartz를 사용할 때 등록된 Service를 이용하지 못하는 문제가 있었다.3버전부터 어노테이션을 이용한 Scheduler 를 통해 간단히 스케쥴러를 사용할 수 있고 더불어 스프링이 로딩될 때 생성되는 Bean 클래스도 이용할 수 있다. [선언부] 빨간 색으로 된 부분 추가함 1. 외부 xml에 선언해서 사용하는 방법 [사용할 자바 클래스] @Componentpublic class ScheduleTest {@AutowiredGallService gallService;public void testScheduleTest() {java.util.Calendar calendar = java.util.Calendar.getInstance();java.text.SimpleDa..

개발 등/SPRING 2013.08.02

SPRING 3.0 transaction 관련 설정 파일 에러

각 항목 아래에 있는 jar 파일을 추가하면 됨 Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx] --> org.springframework.transaction-3.1.0.RELEASE.jar Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop] --> lib/org.springframework.aop-3.1.0.RELEASE.jar nested exception is java.lang.NoClassDefFoundErr..

개발 등/SPRING 2013.04.15

org.springframework.validation.BindingResult.hasErrors() 에러 내용 알아내기

스프링 프레임워크에서 Form을 검증하기 위해 org.springframework.validation.Validator을 구현한 Validation 객체를 만들어 사용한다. 근데 가끔 Validation에 지정한 개체가 아닌 곳에서 에러가 나는 경우가 발생하는데, 이 경우엔 Form의 에 메시지가 뜨지 않기 때문에 에러 내용을 찾기가 힘들어진다.이때는 hasErros() 체크 부분에서 에러의 내용을 조회해야 한다.new ContractValidator().validate(contract, result);if (result.hasErrors()) {Map map = result.getModel();Set keys = map.keySet();Iterator it = keys.iterator();while(i..

개발 등/SPRING 2012.08.08

org.springframework.scheduling.quartz.CronTriggerBean의 cronExpression 설정

Cron의 실행주기를 설정하는 방법* * * * * * * 왼쪽부터 초 분 시간 일(Day of Month) 월 요일(Day of Week, 1-7 : SUN-SAT) 년도(생략가능) 의 순이다. 표현식* : 모든 값 ? : 특정 값 없음 - : 범위 지정 , : 여러 값 지정 구분에 사용 / : 초기값과 증가치 설정에 사용 L : 지정할 수 있는 범위의 마지막 값 W : 월~금요일 또는 가장 가까운 월/금요일 # : 몇 번째 무슨 요일 2#1 => 첫 번째 월요일 예제)"0 0 12 * * ?" 매일 정오 12시에 실행 "0 15 10 ? * *" 매일 오전 10시 15분에 실행 "0 15 10 * * ?" 매일 오전 10시 15분에 실행 "0 15 10 * * ? *" 매일 오전 10시 15분에 실행..

개발 등/SPRING 2012.04.03