Spring) 스프링의 "redirect:" 리다이렉트 처리

Intro Spring Framework 를 사용한다면 컨트롤러에서 리턴타입은 String으로 하고 view 이름 대신 "redirect:" 로 시작하는 문자열을 반환 하면 해당 주소로 리다이렉트를 시켜 줍니다. "redirect:" 를 했는데 리다이렉트가 되지 않고 있다는 질문을 받아서 코드를 확인해보는데, 일단 redirect에 오타는 없었습니다. 그러면 혹시 @ResponseBody 어노테이션이 적용된건지 확인을 하는데 그렇지 않기에 코드를 맨 위로 올려보니 아니나 다를까 @RestController 어노테이션이 보였습니다. 이럴땐 간단하게 @Controller로 바꾸고 필요한 부분들에만 @ResponseBody 어노테이션을 작성 하거나 아니면 리턴타입을 ResponseEntity로 하는 방법이 있..

Programming/JPA ⁄ Spring 2022.05.13
JAVA) Private method를 테스트 하는법

Intro 간단하게 만든 private 메서드가 잘 작동하는지 궁금했습니다. 기존에 이미 작동하고 로직의 계속 반복되던 부분을 private 메서드로 따로 추출해서 반복을 제거 하려는 의도 였는데.. 이게 쏘아올린 작은 공이 생각보다 많은 생각을 하게 만들었습니다. 일단, 일반적인 방법으로는 private 메서드를 테스트 해 볼 수 없었는데요, 애초에 호출을 하지 못하니 테스트도 불가능한게 당연합니다. private method를 테스트 해야할까? TDD의 아버지이자, Junit의 창시자인 켄트벡은 2020년 어느날 트위터에 아래의 링크를 남겼습니다. http://shoulditestprivatemethods.com/ 해당 링크에 방문 해 보면, 하얀 바탕의 한 가운데에 NO라고 96px의 큰 글자만을 ..

Programming/Java 2022.05.09
SpringBoot의 JSON 직렬화시 날짜 처리

Intro SpringBoot 버전을 1.5에서 2.5로 마이그레이션 한 이후로 인지하지 못했던 여러가지 변화 들이 하나 둘 씩 더 발견되고 있습니다. 이번에 발견된 변화는 꽤나 당황스러웠는데.. Date 객체를 JSON으로 직렬화 할 때, 그 형태가 달라졌다는 겁니다. API 를 제공하는 입장에서는 일관적인 포맷으로 제공해주는게 굉장히 중요한데 API 스펙 자체가 변경되어 버릴 수 있는 큰 문제 입니다. 비교를 해 보면 Spring Boot 1.5 에 의존하는 프로젝트 Spring Boot 2.5 에 의존하는 프로젝트 스프링 부트 버전이 달라졌을 뿐인데 반환하던 API의 포맷이 변경 되어 버렸습니다. 이 변경을 추적 해 보겠습니다. 다소 내용이 길기 때문에 과정을 건너 띄고 설정 방법만 보려면 Spri..

Programming/JPA ⁄ Spring 2022.04.28
일간에러) 3 Spring WebApplicationInitializers detected on classpath

Intro 톰캣 8.5 버전으로 프로젝트를 실행하는데 어플리케이션이 기대한 대로 동작 하지 않았다. 로컬에서는 아무 문제 없이 잘 작동했는데 도커로 톰캣 컨테이너를 띄워 실행키기면 계속 문제가 발생했다. 심지어 에러 로그도 쉽게 찾을 수가 없었다. tomcat/logs 경로에서 catalina.2022-04- 으로 시작하는 로그에서는 마치 정상적으로 실행 된 것 처럼 보였는데 localhost.2022-04- 로 시작되는 로그 파일을 확인 하자 그제서야 아래와 같은 에러 메시지를 보여줬다. 13-Apr-2022 13:10:54.092 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 3 Spring WebApplica..

Development/Daily Error 2022.04.15
Spring FW) 제로데이 취약점 CVE-2022-22965

SpringShell CVE-2022-22965 JDK9+ 버전을 사용해 Spring MVC 혹은 Spring WebFlux 어플리케이션을 구동하고 있다면 데이터 바인딩을 통한 원격 코드 실행(Remote Code Execution) 취약점에 노출 될 수 있다는 소식이 2022년 3월 31일 일요일에 공개되었습니다. 스프링 프레임워크가 워낙에 광범위하게 사용되고 있으며, 해당 취약점의 심각도가 높다 보니 CVSS 스코어가 9.8점으로 꽤나 높게 나왔습니다. 지금은 보통 SpringShell 혹은 Spring4Shell 라고 불리고 있는 해당 취약점에 대해 알아보겠습니다. 영향을 받는 환경 JDK 9+ Apache Tomcat을 서블릿 컨테이너로 사용 전통적인 WAR 패키징 (스프링 부트의 jar 패키징은..

IT ⁄ Computer/News 2022.04.05