Spring34 국제화처리를 위한 messageSource 빈에 대한 이슈 스프링 부트가 아닌 스프링 프로젝트에서는 applicationContext.xml 와 servlet-context.xml 가 따로 있다. applicationContext.xml 에서는 @Service @Repository @Component 빈 등록과 dataSource 관련 빈 등록 등을 작업. servlet-context.xml 에서는 web 과 관련된 설정들 @Controller 빈등록과 mvc 관련 config, 뷰리졸버 관련 빈 등록 등을 작업. 처음엔 messageSource 빈 등록을 servlet-context.xml 에서 했다. 보여지는 메세지만 로케일에 맞게 다국어 처리하는 거니 web 영역이라고 판단했다. 그런데 applicationContext.xml 에 등록된 빈은 servlet.. 2021. 6. 18. Webclient Timeout 과 connection pool 전략 1) Webclient timeout 아래 코드를 보자. 다양한 timeout 옵션들이 있다. new ReactorClientHttpConnector( reactorResourceFactory, httpClient -> httpClient .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) .doOnConnected(connection -> connection.addHandlerLast(new ReadTimeoutHandler(5) ).addHandlerLast(new WriteTimeoutHandler(5)) ).responseTimeout(Duration.ofSeconds(5)) // 0.9.11 부터 추가 ); ChannelOption.CONNECT_TIME.. 2021. 6. 11. WebClient 사용할때 주의 (2편) exchangeToMono 를 쓸 때 cf) WebClient 사용할때 주의 (1편) 에서 exchange 를 쓸 때 주의할 점을 하나 소개했는데, 이제 exchange는 deprecated 되었고 대신 exchangeToMono 나 exchangeToFlux 를 써야한다. 1) doOnSuccess 와 onErrorResume .exchangeToMono(clientResponse -> clientResponse.toEntity(String.class)) .doOnSuccess(clientResponse -> { if (clientResponse.getStatusCode() != HttpStatus.OK) { throw new RuntimeException("error"); } } ) .onErrorR.. 2021. 6. 10. request body 한번만 읽어올수 있는 제약 이전 글에서 Spring Cloud Gateway 에서 request body 정보를 요청당 한번밖에 못읽는다고 설명했는데 꼭 Spring Cloud Gateway 만의 문제는 아니다. 아래와 같이 @RequestBody 애노테이션을 통해 request body 정보를 HelloDto 객체에 맵핑 시켜주게 되면 추가적으로 request.getInputStream 요청을 하게 됐을 때 실패하게 된다. 즉 request body 를 한번밖에 못읽는 제약이 있다. @RequestMapping(value = "/hello") public Mono hello( HttpServletRequest request, @RequestBody HelloDto helloDto) throws Exception { byte[] .. 2021. 6. 9. Spring Web MVC 구조 논의 1편 Spring Web MVC 를 이용해 개발다보면 대부분 controller - service - dao 구조로 잡혀있다는것을 쉽게 볼 수 있다. controller(web) 는 http 요청을 받아 service 로 전달하고, 또 service 에서 리턴된 결과를 http 응답으로 전달한다. service(domain) 는 비지니스 로직을 수행해 dao 로 전달하고, 또 dao 에서 리턴된 결과를 갖고 비지니스 로직을 수행한다. dao(persistence) 는 service 에서 만들어진 데이터를 db 같은 persistence 영역으로 보내는 역할을 수행한다. 명확하게 딱딱 나눠져 있어 보이지만, 실제 개발하다 보면 그 경계가 모호해질 때도 있고 실수로 다른 계층으로 해야할일을 넘길 수 있다. Get.. 2021. 6. 6. Spring Cloud Gateway CORS 주의사항 CORS 요청을 받기 위해 서버가 해줘야 하는 작업들이 있다. 그런데 Spring Cloud Gateway 는 프록시 서버이기 때문에 조금 더 신경써야 하는 부분이 있어 정리했다. ※ CORS 기본 개념까지 같이 설명하기엔 글이 너무 길어져서 안다는 전제로 작성했다. 먼저 Spring Cloud Gateway 는 CORS 요청을 디폴트로 막는다. CORS 허용하는 방법 1) CorsWebFilter 첫번째 방법은 CorsWebFilter 를 이용하는 것인데, 헷갈리지 말아야 될 게 있다. CorsWebFilter 는 Spring Cloud Gateway 에서 제공하는 필터가 아니다. org.springframework.web.cors.reactive 에서 제공하는 필터다. 그래서 Spring Cloud .. 2021. 1. 24. 이전 1 2 3 4 5 6 다음