728x90

Backend/Spring+Boot 64

SpringBoot embedded Redis Cluster

SpringBoot 환경에서 embedded Redis 를 구성하는 방법은 많이 나와있다. 그런데 그 방법 대부분이 Single instance 방식이고 나는 실제로 서비스시에는 Redis Cluster 를 사용할거라 embedded Redis도 Cluster로 구성하고 싶었다. 서칭과 여러 시행착오 끝에 jitpack.io/p/tarossi/embedded-redis 여기를 참고해서 구성을 성공할 수 있었다. 1. 의존성 추가(Gradle 기준) dependencies { implementation 'com.github.tarossi:embedded-redis:1.5.2' } 2. embedded Redis Bean 설정 @Profile({"local", "test"}) @Component public..

Backend/Spring+Boot 2021.05.04

spring cloud config 비활성화

spring-cloud-starter-config 의존성이 포함되어 있다면 구성파일(application.yml 등)에 아래와 같이 config-server 설정이 import 되어 있어야 한다.(springboot 2.4 기준) 그렇지 않으면 구동시 에러가 발생한다. spring: config: import: configserver:http://test-config-server.test.com 하지만 local 에서 개발 시에는 config-server 를 설정해서 사용하는 것이 오히려 번거롭기 때문에 이를 비활성화 할 필요가 있다. 아래와 같이 하면 된다. spring: cloud: config: enabled: false 그리고 spring-cloud-bus 를 사용하기 위해 spring-cloud..

Backend/Spring+Boot 2021.05.04

Request 정보 Logging 하기

개발서버에서는 Request 정보를 모두 로그를 찍어놓는 것이 테스트나 분석에 도움이 된다. 매번 log.info 로 찍거나 aop 를 구현하는 것도 방법이지만 Spring에서 제공하는 필터를 활용하는 것은 좋은 방법이다. CommonsRequestLoggingFilter 가 바로 그것인데 아래와 같이 셋팅하면 된다. 1. 필터등록 @Configuration public class WebMvcConfig { @Bean public CommonsRequestLoggingFilter commonsRequestLoggingFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeClient..

Backend/Spring+Boot 2021.05.04

크로스 도메인 이슈

Javascript 는 동일 출처 정책(Same Origin Policy) 라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안 문제로 간주하고 이를 차단한다. 요즘은 마이크로서비스 구조에서는 javascript 단에서도 타 서비스의 api를 호출해야 하는 경우가 많기 때문에 이에 대한 처리가 반드시 필요하며 이를 CORS(Cross-Origin Resource Sharing) 라 한다. 서버가 Spring 환경이라면 아래와 같이 Filter를 등록하는 것만으로 CORS 처리를 할 수 있다. 간단하게 원리를 설명하면 실제요청전 예비요청(Preflight request)을 통해 허용가능한 도메인, 메소드 등을 응답하고 이를 통해 통신을 하는 방식이다. @Component @Order(Ordered.H..

Backend/Spring+Boot 2021.04.29

@ResquestParam, @RequestBody 와 Get, Post

알다시피 payload 는 url에 queryString을 통해 header 에 포함할 수도 있고, body에 포함할 수도 있다. Spring에서는 Controller 에서 해당 payload를 받아서 처리하게 되는데 전자의 경우 @RequestParam 을 사용하고 후자는 @RequestBody 를 사용한다. 여기에서 중요한 점은 @ResquestParam, @RequestBody 는 각각 Request 에서 payload를 읽어들일 곳을 지정하는 것 뿐이라는 것이다. 즉, @ResquestParam 는 header에서 payload를 읽어오고 @RequestBody 는 body 에서 payload를 읽어오게 된다. 간혹 jsp 시절부터 들어왔던 Get방식, Post방식 이라는 용어 때문에 @Resqu..

Backend/Spring+Boot 2021.04.26

threadContextInheritable

사내 레거시 프로젝트 마이그레이션을 위해 분석하던 중 아래와 같은 설정이 보였다. @Configuration public class WebConfig { @Bean public ServletRegistrationBean servletRegistration(ServletRegistrationBean registration) { registration.setLoadOnStartup(1); registration.addInitParameter("threadContextInheritable", "true"); return registration; } } Dispatchservlet의 threadContextInheritable 값을 true로 바꾸는 것인데 threadContextInheritable는 Requ..

Backend/Spring+Boot 2021.04.23

RequestContextHolder

RequestContextHolder 는 Spring 컨텍스트에서 HttpServletRequest 에 직접 접근할 수 있도록 도와주는 역할을 한다. Spring 2.x 부터 제공되던 기능으로 이를 활용하면 HttpServletRequest 사용하기 위해 이를 메소드 파라미터로 연이어 넘겨받을 필요가 없다. 예를 들어 RequestContextHolder 를 사용하지 않고 Service 단에서 HttpServletRequest 를 참조해야 한다고 하면 아래와 같이 해야 한다. @RestController @RequiredArgsConstructor @Log4j2 public class TestController { private final TestService testService; @GetMapping..

Backend/Spring+Boot 2021.04.23

Spring Security AuthenticationException message

Spring Security 를 이용해서 로그인을 구현할 경우 로그인 실패 처리는 일반적으로 아래와 같이 구현한다. @Log4j2 public class LoginFailHandler implements AuthenticationFailureHandler { @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setContentType("application/json;charset=utf-8..

Backend/Spring+Boot 2021.04.22

SpringBoot MVC 자동구성 제어하기

honeymon.io/tech/2018/03/13/spring-boot-mvc-controller.html [springboot] Spring MVC 자동구성 제어하기 - I'm honeymon(JiHeon Kim). 자동구성된 스프링 MVC 구성 조작하기 자동구성된 스프링 MVC 구성을 큰 변경없이 추가적인 조작하려면 다음과 같은 형태로 구성한다. 1 2 3 @Configuration public class WebMvcConfig implements WebMvcConfigurer, Web honeymon.io 가장 중요한 점은 @EnableWebMvc 어노테이션을 붙여주면 스프링부트의 기본적인 웹 MVC 기능들을 제외시키고 처음부터 생성해야 한다. 처음부터 다시 구현할게 아니라면 붙여주면 안된다. ht..

Backend/Spring+Boot 2021.04.21
728x90