TIL (28) 썸네일형 리스트형 TIL) ParameterNamesModule 이슈, 에너테이션 클래스에서 사용 가능한 타입, 전체 프로젝트 의존성 트리 1. ParameterNamesModule 이슈 아래는 WebMvcAutoConfiguration 클래스다. 따로 웹의 설정을 하지 않았다면, messeage 컨버터로 다음과 같이 준비가 되며, Http 메세지를 convert 하는 것은 MappingJackson2HttpMessageConverter 로 자동 등록된다. 그리고, JacksonAutoConfiguration 에 parameterNamesModule 이 등록된다. @Configuration(proxyBeanMethods = false) @ConditionalOnClass(ParameterNamesModule.class) static class ParameterNamesModuleConfiguration { @Bean @ConditionalO.. 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.. 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.. TIL) Kotlin : runCatching, DTO/Entity 작성 팁 1. Kotlin : runCatching runCatching 은 try-catch 를 대체할 수 있는 코틀린의 문법이다. 결론부터 말하면, try-catch 문은 실패시의 핸들링을 처리할 수 있었다면, runCatching 은 성공시, 실패시 둘 다 처리할 수 있다. @InlineOnly @SinceKotlin("1.3") public inline fun T.runCatching(block: T.() -> R): Result { return try { Result.success(block()) } catch (e: Throwable) { Result.failure(e) } } 보다시피, 리턴 타입은 Result 라는 객체이며, 전달받은 내용을 실행해서, 성공한다면 Result.success() 를 통.. TIL) JPA 페이징, Json 응답시 Null 필드 제외, Envers 1. 페이징 DATA JPA 를 사용할때, Pagable 객체를 같이 넘기면 페이징처리된 결과를 받을 수 있다. // PageRequest 는 Pagable 인터페이스의 하위 구현 클래스 val pageRequest: PageRequest = PageRequest.of(page, limit, Sort.by("createdAt").descending()) data JPA 에 이 객체를 받는 인터페이스를 선언하고 넘긴다. Page findAllByUserIdIn(List userIds, Pageable pageable); 반환형을 보면, User 객체가 아닌 Page 객체를 받게 되는데 이게 참 유용하다. int getNumber() 현재 페이지의 정보 int getSize() 한 페이지의 크기 int ge.. TIL) 깃 충돌, 예외 처리 전략, @CreatedDate vs @CreationTimeStamp 1. 깃 병합 충돌 오늘 깃에대한 수업을 진행하면서, 로컬에서 딴 task 브랜치를 로컬의 main 브랜치로 merge 할때 충돌이 나게끔 해서 보여드리려 했는데 그냥 task 의 내용이 main 을 덮어써버렸다. 찾아보니, 병합충돌은 리모트 브랜치와 로컬 브랜치사이에 병합하려 할때 일어난다고 한다. 처음 알았다.. 추가로 깃에 대해 수업준비 하면서 알게된 재밌는 부분은, 리눅스를 만든 사람이 깃을 만들었다는 것 (이전에 들은적이 있었는데 까먹었었음), 아폴로 11호의 코드가 깃허브에 모두가 볼 수 있게 올라가있다는것들이었다 ㅋㅋ 2. 예외 처리 전략 이 부분에 대해서는 같이 스터디를 진행중인 Cheese.yun 님 블로그 도움을 많이 받았다. https://cheese10yun.github.io/spr.. 이전 1 2 3 4 다음