본문 바로가기
반응형

Study44

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.
Java, 인스턴스 메소드(instance methods)와 정적 메소드(static methods)의 차이 개요 메소드를 사용할 때 우리는 보통 두 가지 방식을 채용하여 사용한다. 인스턴스를 생성한 뒤, 그 인스턴스를 참조하여 메소드를 사용하던가 (e.g. instance.someMethod()) 혹은 클래스명으로 메소드를 참조하여 사용하던가(e.g. ClassName.someMethod()) 하여 사용한다. 이 두 방식의 메소드를 각각 인스턴스 메소드(Instance Method), 정적 메소드(Static Method)라고 하며 이 글에서는 이 두 메소드 타입에 대해 알아보고 비교해볼 것이다. Instance Method 인스턴스 메소드(Instance Method)는 소위 우리가 일반적으로 정의하고 사용하는 메소드이다. 호출하기 위해서는 반드시 해당 메소드가 정의되어 있는 클래스의 객체를 먼저 생성해주어.. 2022. 4. 1.
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.
Javascript 정리 vue의 사용법을 익히기 전에 javscript에 대해 세세하게 정리하기 보다는 java와 개념이 상이한 부분들을 간단히 정리합니다. 이번 포스팅은 개인적으로 숙지해야할 필요가 있다고 생각한 내용들을 긁어서 모아놓은 것이라 정리가 잘 되어 있지않습니다. 하여 다른 분들이 참고하기에 적절하게 작성되지 않은점 미리 알려드립니다. 변수 선언 var 변수명; 혹은 var 변수명 = 값; 변수 이름은 영문과 숫자 그리고 일부 특수문자(_,$)만 포함할 수 있다. 첫 글자로는 $, _, 영문자만 올 수 있음. 저장할 수 있는 데이터형으론 문자형(String), 숫자형(Number), 논리형(Boolean), 비워진 데이터(Null & Undefined)가 있다. 문자형 데이터 문자나 숫자를 큰따옴표(" ") 또는 .. 2021. 5. 8.
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.
Spring Cache Abstraction 정리 캐시 추상화(Cache Abstraction) 스프링 캐싱 추상화는 스프링 어플리케이션에 캐싱을 투명하게 적용할 수 있게 도와주는 기술이다. 최소한의 코드 작성으로 일관된 다양한 캐싱 솔루션을 제공한다. 캐시(Cache)의 특징 캐시 적용의 목적은 성능 향상에 있다. 반복적인 동일한 작업에 적용할 수 있다. 매번 다른 결과를 돌려줘야 하는 작업에 적용하면 오히려 캐시 로직 때문에 성능이 저하된다. 캐시 저장소에 저장해둔 내용이 변경되는 상황에 잘 대처해야한다. 데이터의 일관성을 유지하여야함. 항상 올바른 값을 반환하도록 대처해야함. → 예) 캐시 데이터의 원본 데이터가 변경된다면 변경된 데이터를 반환하도록 대체 여러 위치에 적용이 가능하다. DB 조회와 관련된 캐시라면 데이터 액세스 기술에 적용 JPA나.. 2021. 2. 9.
반응형