해당 이슈는 Postman 같은 똑똑한 클라이언트를 사용하지 않고 Windows or Mac 등 직접 파일 업로드 요청을 보낼 때 발생할 수 있는 문제다 내 경우엔 Windows 클라이언트가 C++로 짠 코드로 서버에 HTTP 요청을 보내 파일 업로드를 요청했다 파일 업로드 시 파일 이름이 한글인 경우 업로드된 파일 이름이 깨지는 상황이 발생했다 Windows 클라이언트 개발자에게 HTTP 요청을 전달받아 상황을 재현했다 업로드할 파일이 한글 파일명을 가지고 있었기에 아래와 같은 형태로 요청을 만들었다고 한다 ### POST http://localhost:8080/test/file-upload Accept: application/json Content-Type: multipart/form-data; bo..
어느 날 고객사에서 Apache Commons Fileupload 이슈가 인입되었다 apache commons file upload library 1.5 버전 미만에서 RequestParts 개수 제한을 걸어두지 않아 Dos 공격이 가능하다 Apache Tomcat: Important: Apache Tomcat denial of service (CVE-2023-24998) Rapid7's VulnDB is curated repository of vetted computer software exploits and exploitable vulnerabilities. www.rapid7.com 이후로 팀원분이 내부 동작을 파악하고 간단하게 리뷰를 해주셨는데 들을 때는 그렇구나 하고 수동적으로 들어서 그런지 남..
이전 글에서 @RequestBody 바인딩 처리를 알아보았고 이번에는 @ModelAttribute 처리에 대해 알아보자 스프링 버전에 따라 라인 수가 달라질 수 있으니 사진 설명에 클래스#메서드 형태로 남겨놨다 어떤 메서드를 호출하는지에 주의해 흐름을 따라가보자, 테스트할 객체와 컨트롤러는 아래 더보기를 참고하면 된다 더보기 @XmlAccessorType(XmlAccessType.PROPERTY) @XmlRootElement(name = "data") @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @ToString public class TestRequest { @XmlElement(name = "xml_nam..
레거시 시스템을 살펴보면 도메인에도 @Data, @Setter가 달려있는 모습을 볼 수 있다 불변의 중요성이 커지면서 & 무분별한 setter로 인해 변경점 파악이 어려워 @Setter는 안티 패턴과 같이 여겨지고 있다 @Setter와 같은 역할을 하더라도 더 의미 있는 changeXX() 등의 네이밍이 권장되고 있다 그렇다면 레거시 시스템에서는 @Setter를 왜 썼을까?, 개인적인 생각에 다음과 같은 이유지 않았을까 싶다 1. setter와 이름만 다르지 역할은 같은 수 많은 메서드를 만들기 귀찮음 2. @RequestBody, @ModelAttribute 바인딩을 가장 쉽게 할 수 있는 방법이므로 언젠가 코드리뷰에서 DTO에서 매핑이 안 되던 문제가 나왔던 적이 있다 입사한 지 얼마 안 된 신입 시..
REST API 형태로 프로그램을 작성 중이라면 문서화에 Restdocs 혹은 Swagger2를 이용할 수 있다 개인적인 생각으로는 Swagger-ui가 훨씬 더 사용하기 쉽고 UI, UX가 좋지만 코드에 침투적이라는 이유 하나만으로도 싫다 다만 Restdocs를 사용해 본 경험이 있어 진행 중인 프로젝트에 학습 목적으로 Swagger2를 도입했다 오늘 만난 에러는 Springboot 2.6.x 이상의 버전을 사용한다면 마주칠 수 있는 문제다 난 부트 2.6.3, swagger는 3.0.0을 사용 중이다 plugins { id 'org.springframework.boot' version '2.6.3' } dependencies { implementation 'io.springfox:springfox-b..