Spring
-
Spring Boot mockMvc 한글 깨짐 처리Spring/Spring Boot 2020. 7. 31. 15:58
SpringBoot + SpringSecurity ( JWT ) 기반으로 REST 기반의 API 서버를 만드는 도중 API 문서 자동화를 위해 RestDocs를 쓰기로 결정했다. 그 외 후보로 Swagger등도 있겠지만 테스트 작성과 더불어 문서를 만들 수 있다는 점에서 RestDocs로 결정하였다. 문제는 mockMvc Test를 기반으로 문서 조각을 만들 때 Response 응답으로의 한글 처리가 깨져있다는 점이었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 @Bean public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter characterEncodingFilter = new CharacterEn..
-
SpringSecurityContextHolder와 AuthenticationSpring/Spring 2020. 7. 23. 16:36
SecurityContextHolder -> SecurityContext -> Authentication Authentication안에 Principal 정보가 들어가 있다. principal은 인증한 사용자의 정보를 나타낸다. 인증한 사용자의 정보란? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Service public class AccountService implements UserDetailsService { @Autowired AccountRepository accountRepository; @Autowired PasswordEncoder passwordEncoder; @Override public UserDetails loadUserByUsern..
-
RestTemplate, WebClientSpring/Spring Boot 2020. 7. 13. 01:56
스프링 부트는 Rest Template을 쉽게 사용할 수 있도록 빈을 등록해준다. 이때 빈은 RestTemplateBuilder를 빈으로 등록해 준다. Builder를 주입받아서 필요시마다 Build를 하고 RestClient를 생성해서 사용할 수 있다. WebClient는 WebClient.Builder를 빈으로 등록해준다. RestTemplate과 WebClient의 차이? RestTemplate Blocking I/O 기반의 Synchronous API 순서가 있는 처리 WebClient Non-Blocking I/O 기반의 Asynchronous API 순서 없는 처리 다음과 같이 "/hello" URI는 5초를 쉬고 "/world" URI는 3초를 쉬는 핸들러를 만들어보자. 그리고 이 API 서..
-
JSR-303 Errors들을 Json으로 Serialization 해보자Spring/Spring Boot 2020. 6. 25. 02:22
JSR-303 bean validation이 끝나게 되면 Errors에 error들이 담기게 된다. 기본적인 도메인들은 자바 빈 스펙을 따르기 때문에 BeanSerializer에 의해서 Serialization/Deserialization 이 가능하다. ( 스프링의 경우 ObjectMapper 이용 ) 하지만 Errors들은 불가능하다. 다음의 예를 봐보자. 해당 Person에 name과 age가 담기지 않았다면 errors가 담기게 될 것이다. 해당 errors들을 클라이언트들을 위해 Json 형태로 담고 싶다면 @JsonComponent와 JsonSerializer에 serialize 메서드를 오버 라이딩해서 구현 가능하다. 그렇다면 우선 person에 name과 age를 입력하지 않고 보내서 err..
-
스프링 부트 MySQL8 연동 IntellijSpring/Spring Boot 2020. 6. 23. 03:01
1. MySQL 커넥터 의존성을 추가한다. MySQL에 접속할 수 있는 커넥터 의존성을 추가해야 한다. datasource에 구현체이다. 1 2 3 4 5 mysql mysql-connector-java runtime Colored by Color Scripter cs Maven 기반 1 2 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' compile 'mysql:mysql-connector-java' Colored by Color Scripter cs Gradle 기반 2. application.properties 설정 파일에 다음과 같이 DataSource를 설정해준다. 1 2 3 4 5 spring.datasource...
-
RedirectAttributesSpring/Spring MVC 2020. 6. 22. 01:54
일반적으로 redirect 할 때 어떤 데이터를 모델에 넣는다면 모델에 들어있는 데이터 중 primitive 타입은 자동으로 URI path에 쿼리 파라미터로 추가가 되게 된다. 예를 들어 hello에 Id가 1이고 Name이 Baek이라면 return 값은 "redirect:/hello/list? id=1&name=Baek" 이 되게 되지만 이러한 설정은 스프링 부트에서는 기본적으로 꺼져있다. 다음과 같이 설정을 해주게 되면 이제 모델에 들어있던 primitive 타입들이 자동으로 쿼리 파라미터로 붙게 된다. 이렇게 되면 redirect 되는 주소 쪽에서 @RequestParam, @ModelAttribute 를 통해 해당 값들을 받을 수가 있다. 이때 모델에 들어있는 모든 데이터가 아닌 일부만 명시적..
-
@SessionAttributesSpring/Spring MVC 2020. 6. 16. 10:30
어떤 정보를 세션에 넣고 싶다면 HttpSession을 받아서 사용할 수 있다. @SessionAttributes를 쓴다면 세션에다 넣지 않아도 HttpSession을 쓰지 않아도 자동으로 넣어준다. 이때 이 어노테이션에 설정한 이름에 해당하는 모델 정보를 세션에 넣어주게 된다. @ModelAttribute는 세션에 있는 데이터도 바인딩할 수 있다. 그렇다면 왜 모델 에트리뷰트를 세션에다 넣게 될까? 1. 여러 페이지에 걸친 장바구니 데이터 2. 데이터 생성 시 여러 화면에 걸쳐서 만들어야 하는 경우 SessionStatus를 통해 메서드 아규먼트로 받아서 사용하게 된다. 특정 form 처리가 끝나면 세션이 만료되도록 할 수 있다. @ModelAttribute, @SessionAttribute, Sess..
-
application.properties 등의 외부 설정Spring/Spring Boot 2020. 6. 13. 23:50
1. application.properties 이런 외부 설정 파일은 App에서 사용하는 여러 설정값들을 정의할 수 있는 기능이다. 이 파일은 스프링 부트가 App을 구동할 때 자동으로 로딩하게 된다. 이렇게 정의되있는 파일 안에 key value 형태로 어떤 값을 정의하게 되면 App에서 참조해서 사용할 수 있게 된다. 그중 아주 간단한 방법을 한번 봐보자 이런 사용할 수 있는 외부 설정에는 properties, 야믈(YAML) 파일, 환경 변수 등이 있고 이 properties 들은 또 우선순위가 나뉜다. 1. 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties 2. 테스트에 있는 @TestPropertySource 3. @SpringBootTest 애노테이션의 pro..