Intro JWT 토큰 값을 읽어서, 상황에 따라 인증하거나 만료되었다면 리프레시 토큰을 사용해 새로운 토큰을 발급받는 역할을 하는 JwtAuthFilter 를 만들어 등록해두었다. 시큐리티 필터체인에서 아래와 같이, AuthorizationFilter 이전에 등록해서 작동하도록 해 두었는데 http.addFilterBefore(jwtAuthFilter, AuthorizationFilter::class.java) 요청이 올 때마다 자꾸 해당 필터를 두번씩 거치는 문제가 있었다. 원인 간편하게 Bean으로 등록 해두고 사용하려고 클래스에 @Component 어노테이션을 붙여서 사용했는데 그게문제였다. 아래는 스프링 부트 도큐먼트에서 Filter에 관한 내용이다 https://docs.spring.io/sp..
Programming/JPA ⁄ Spring 64
Intro 가족들이 필요로해서 만들었고, 운영한지 이제 한 2년정도 된 스프링부트로 만든 토이 프로젝트가 있다. 리액트를 필두로 몇년째 이어지는 프론트엔드 춘추전국시대에 특별히 마음에 들거나 잘하는 프론트엔트 프레임워크가 없다보니, 사용하고 싶은 프론트엔드 스펙이 정해지면 그때 떼낼 생각으로 최대한 API콜 위주로 하며 thymeleaf로 개발했고, 아직까지는 큰 불편없이 쓰고 있다. 지금까지는 부트스트랩 jQuery vue.js 등의 라이브러리를 대부분 CDN에서 받아오도록 해놨었는데 이제부터는 소스코드에 포함해 배포하기로 했다. 오프라인이나 내부망에서 사용할 프로젝트는 아니기때문에 특별히 변경해야 할 이유는 없었지만 그래도 어플리케이션의 전체적인 구동을 통제하에 두고싶은 마음에 해보았다. 문제 그런데..
Intro 새로운 프로젝트 요청이 왔는데, Java 11 을 사용해 스프링부트로 프로젝트를 만들어야 하는 요구사항이 명시되었다. 그런데 스프링부트 3버전대의 등장 이후 2.x 버전으로 프로젝트를 생성한 적이 한번도 없었어서 이제야 알았는데 Spring Initializr 에서 스프링 부트 2.x 버전이 모두 제거되었다. 스프링 3.0 부터는 최소 JDK 요구 사항이 17이기 때문에 Spring Initialzr 에서는 이제 더이상 17 아래의 자바 버전들도 취급을 안해준다. 자바 버전은 17, 21만 선택 가능하다. 스프링부트는 2버전 선택이 불가능하다 당연하겠지만 start.spring.io 에 들어가서 생성하려 해도 마찬가지다. https://start.spring.io/ 이정도에서 끝나는게 아니고 ..
Intro Postgresql 에서는 특이하게도 배열 타입을 사용할 수 있다. 개인적으로는 이걸 선호하지는 않는데, 일반적인 다른 데이터베이스와 다른 형태의 쿼리작성이 필요하고 좀 더 복잡해지기 때문이다. 만약에 DB 마이그레이션이라도 해야 한다면 참 골치아프겠다. 특히 이런경우 ORM과의 호환성이 큰 문제가 될 수 있다. 업무에서 JPA를 주로 사용하고 있는데, 예상했던대로 자체적으로는 Postgres의 배열타입을 지원해주지 않았다. 대신 UserType을 구현하여 새로운 타입을 정의할 수 있긴 했는데 그 방법으로 문제를 해결해보려 한다. 준비 작업 시연을 위해 샘플 프로젝트 및 샘플 데이터베이스를 준비하였으나, 이미 진행중인 프로젝트와 DB가 있다면 건너뛰어 코드 및 엔티티 부분만 참고해서 문제를 해..
intro 웹 프로젝트를 진행하다보면 외부 설정값을 어플리케이션 내에서 활용할 일이 많다. 하드코딩을 해두면 후에 변경하기 쉽지 않기 때문에 외부에 설정값으로 빼는게 좋은데, 설정값이 한두개 일 때야 크게 어렵지 않지만 설정값이 점점 늘어나고 심지어 계층형 구조를 가진다면 점점 복잡해진다. 스프링에서는 편리하게 여러가지 설정값을 관리하기 위한 방법을 제공하는데 그 중 @ConfigurationProperties는 특히 프로퍼티의 값을 Bean으로 매핑하는 강력하고 직관적인 기능을 제공한다. 본 글에서는 @ConfigurationProperties의 기본 사용법과 주요 특징 및 주의할 점에 대해 다루어보려고 한다. main 프로젝트 생성 스프링부트 3.x 버전으로 먼저 생성하고 추후 2.x 버전으로 낮추며..