본문 바로가기
반응형

Spring6

axios에서 요청 URL에 [ 와 ] 가 포함되면 자바 서블릿 기반 톰캣 웹 서버에서 에러가 나는 이유와 해결책 문제 톰캣 7.x 버전부터 RFC 3986, RFC7230 규정을 준수하여 특수문자를 URL에 포함하여 보내는 것을 block 하고 있음. 혹여나 [와 ]가 URL에 담겨 오면 톰캣 웹서버 단에서 Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 에러 메시지를 발생시키며 400 Bad Request를 내려줌. Chrome과 axios에서는 기본적으로 URL에 percent-encoding(이하 ‘%인코딩’)을 하긴 하지만 특수하게 [와 ]만은 %인코딩을 하지 않고 서버에 전달함. 이 때문에 서버에 [와 ]가 URL에 담겨 전달되는 현상과 RFC 7230, RFC 398.. 2023. 3. 31.
Spring Cloud Gateway가 netty 기반 reactive web application으로 구동되는 이유 개요 Spring Cloud Gateway 애플리케이션을 구동하게 되면 기존의 임베디드 톰켓 기반의 Spring Boot Web 애플리케이션과는 다르게 Netty 기반의 비동기 통신을 지원하는 형태의 웹 애플리케이션으로 실행됩니다. 이 문서에서는 왜 이러한 현상이 발생하는지 알아봅니다. WebApplicationType 먼저 SpringBoot에서는 웹 애플리케이션 구동시 org.springframework.boot.WebApplicationType을 정하게 됩니다. WebApplicationType에는 세가지 타입이 존재합니다. WebApplicationType.SERVLET → 애플리케이션을 서블릿 기반의 웹 애플리케이션으로 실행하며 임베디드 서블릿 웹서버(기본적으로 tomcat 기반)로 실행한다. .. 2022. 4. 21.
JPA 엔티티 복합키(Composite Primary Keys) 매핑 개요 JPA를 사용하여 1:m, n:1 관계 테이블을 엔티티 매핑할 때 복합 키(Composite Primary Keys)를 가진 테이블을 엔티티 매핑 시, 제가 겪은 문제점과 해결방안을 정리해보겠습니다. 문제 문제는 아래의 [USR_TERMS_AGRMT] 테이블을 엔티티 매핑하던 중 발생했습니다. 아래와 같이 1:m, n:1 관계 테이블은 참조하는 테이블들의 PK를 PFK로 사용하여 구성되는 경우가 종종 있습니다. 저는 처음에 아래와 같이 [USR_TERMS_AGRMT] 객체 연관관계에 @Id 어노테이션을 붙여 엔티티 매핑을 시도하였습니다. @Entity @Table(name = "USR_TERMS_AGRMT") @NoArgsConstructor(access = AccessLevel.PROTECTED).. 2021. 9. 13.
Spring - 컨트롤러 메소드 파라미터에 대한 공통 처리 로직을 한 번에! HandlerMethodArgumentResolver 기본 정리 개요 @GetMapping("order") public ApiResult findAll( ... @RequestParam("offset") int offset, @RequestParam("limit") int limit) { ... } 가령 Spring MVC로 구현된 API에서 offset과 limit를 활용한 페이징을 지원한다고 한다면 페이징 처리가 필요한 메소드마다 위와 같이 offset과 limit 파라미터를 받는 코드를 작성해야 한다. 위와 같이 @RequestParam을 사용해 중복적으로 파라미터를 받아야 되는 것도 문제이나, offset 혹은 limit에 값의 범위를 지정하여 범위를 벗어나면 기본값을 넣는다거나 하는등 파라미터에 대한 추가적인 처리가 필요하다고 가정해보자. 그렇다면 페이징 파.. 2021. 3. 27.
반복적인 DTO 변환 작업을 한 번에 정의! MapStruct 기본 정리 MapStruct 1.4.2.Final Reference Guide를 기준으로 작성되었습니다. Introduction MapStruct는 객체의 타입 변환 시에 유용하게 사용할 수 있는 라이브러리이다. 어노테이션 기반으로 작성되며 Bean으로 등록할 수 있어 여러 프레임워크의 DI를 활용하여 사용할 수도 있다. 타입 세이프하게 객체의 타입 변환 시에 데이터 매핑을 도와주는 어노테이션 프로세서 서버 어플리케이션을 개발할 때 작업하는 DTO 변환 작업은 대부분이 반복적인 작업이 대부분 도메인 객체를 풍부하게 사용하면서, 반환 데이터가 달라지게 될 경우 이를 적절하고 큰 힘을 들이지 않고 매핑할 수 있도록 도와주는 것이 바로 MapStruct 리플렉션이 아닌 직접 메소드를 호출하는 방식으로 동작하여 속도가 빠.. 2021. 3. 7.
Spring Web MVC - Multipart 요청 다루기 지금 진행중인 토이 프로젝트에서 게시글 등록 시 게시글 내용 + 이미지 파일 업로드를 받는 로직을 구현하는데. 이에 대해서 간단히 정리하도록 하겠다. 일반적으로 Multipart 요청에 경우 Spring Web MVC에선 다음과 같은 방식을 제안한다. @Controller public class FileUploadController { @PostMapping("/form") public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // store the bytes som.. 2021. 2. 23.
반응형