본문 바로가기

전체 글

(183)
TIL) @JsonFormat/@JsonSerialize, Rest response 방식의 404, configureDefaultServletHandling 1. LocalDate 직렬화 - 기본 serizlizer 가 objectMapper 에 등록되어 있고, 또 다른 포멧으로 직렬화 해야 하는 요구사항이 있다면 어떻게 해야하나? Spring boot 의 Jackson 라이브러리로는 LocalDate, LocalDateTime 타입이 이상적으로 직렬화되지 않는다. 따라서 아래와 같이 @JsonFormat 을 붙여서 직렬화, 역직렬화 시 패턴을 지정할 수 있다. @JsonFormat(pattern = "yyyy-MM-dd") val createAt: LocalDate 모든 LocalDate, LocalDateTime 에 @JsonFormat 을 붙이기는 불편하다. Serializer 를 직접 생성하여 ObjectMapper 에 등록하는 방법이 있다. @Con..
TIL) ParameterNamesModule 이슈, 에너테이션 클래스에서 사용 가능한 타입, 전체 프로젝트 의존성 트리 1. ParameterNamesModule 이슈 아래는 WebMvcAutoConfiguration 클래스다. 따로 웹의 설정을 하지 않았다면, messeage 컨버터로 다음과 같이 준비가 되며, Http 메세지를 convert 하는 것은 MappingJackson2HttpMessageConverter 로 자동 등록된다. 그리고, JacksonAutoConfiguration 에 parameterNamesModule 이 등록된다. @Configuration(proxyBeanMethods = false) @ConditionalOnClass(ParameterNamesModule.class) static class ParameterNamesModuleConfiguration { @Bean @ConditionalO..
kotlin 마스킹 해당 글은 Meet-Coder 에서 블로그 포스팅 스터디를 하면서 쓴 글입니다. MarkDown 으로 쓴 글이기에, 해당 tstroy 보다는 아래 github repository 에서 보는 것이 깔끔합니다. https://github.com/cmg1411/posting-review/blob/master/kimmingeor/2021-11-13-masking.md GitHub - cmg1411/posting-review: 📝 블로그 포스팅 스터디 리뷰 저장소 📝 블로그 포스팅 스터디 리뷰 저장소. Contribute to cmg1411/posting-review development by creating an account on GitHub. github.com 이전에 스터디에서 Interceptor 에서 ..
TIL) KClass, Sealed class, 고차 함수: 함수 타입, invoke 1. KClass java 에는 Class 라는 타입(클래스) 가 있듯이, Kotlin 에는 KClass 라는 타입이 있다. 1. KClass 타입 val stringType = String::class 2. Class 타입 val stringType = String::class.java KClass 타입도 Class 타입과 마찬가지로, 여러가지 함수를 제공한다. 프로퍼티 사용 반환타입 설명 constructors Collection 선언된 생성자의 Collection isAbstract Boolean 추상 클래스 여부 isCompanion Boolean Compaion object 클래스 여부 isData Boolean Data 클래스 여부 isFinal Boolean 클래스가 final 인지 여부 i..
TIL) JWT 와 보안, CORS, 카카오에서 CORS 1. JWT 보안 jwt는 stateless. 서버에서 한번 보낸 토큰은 정상 토큰이라고 인식. 만약 access token의 만료 기간을 길게 잡아 이것만 사용하게 한다면 access token 이 탈취 되었을 때 서버에서 아무런 방어적인 행동을 할 수 없습니다. 서버는 해당 token이 탈취 되었다는 사실 조차 모를 수 있습니다. 따라서 refresh token 같이 줌. 만약 refresh token이 탈취되어 해커가 새로운 access token을 요구해 발급받을 수 있습니다만, 이 발급이 진행되는 과정에서 다른 나라의 IP 주소로 요청이 들어왔다던가 또는 계정 도용으로 신고된 아이디이던가 등을 검증할 수 있는 작업을 서버에서 할 수 있는 것입니다. 그러면 서버는 해커가 refresh token으..
TIL) 필드vs프로퍼티, backing field, backing property Properties expose fields. Fields should (almost always) be kept private to a class and accessed via get and set properties. Properties provide a level of abstraction allowing you to change the fields while not affecting the external way they are accessed by the things that use your class. Property들이 field를 밖으로 노출한다. Field는 클래스에서 내에 private 이어야 한다. get/set property들을 통해서만 접근이 가능해야 한다. Property는 F..
spring interceptor 해당 글은 Meet-Coder 에서 블로그 포스팅 스터디를 하면서 쓴 글입니다. MarkDown 으로 쓴 글이기에, 해당 tstroy 보다는 아래 github repository 에서 보는 것이 깔끔합니다. https://github.com/cmg1411/posting-review/blob/master/kimmingeor/2021-10-30-interceptor.md GitHub - cmg1411/posting-review: 📝 블로그 포스팅 스터디 리뷰 저장소 📝 블로그 포스팅 스터디 리뷰 저장소. Contribute to cmg1411/posting-review development by creating an account on GitHub. github.com 출처 : https://bgpark.t..
TIL) Requset Wrapping, ContentCachingRequestWrapper , RequestBodyAdviceAdapter (Header/Body 의 차이와 성능이슈) 1. RequestWrapping 인터셉터에서 request/response 로 어떠한 처리를 할 때, HttpServletRequest/HttpServletResponse 를 사용한다. HttpServletRequest 를 대표로 최상위 인터페이스를 따라가 보자. 이름은 ServletRequest 이다. 이 인터페이스는 아래와 같은 메서드를 가진다. /** * Retrieves the body of the request as binary data using a * {@link ServletInputStream}. Either this method or {@link #getReader} may * be called to read the body, not both. * * @return a {@link S..