스프링 시큐리티 필터가 2번 중복적용된 문제 해결

Intro JWT 토큰 값을 읽어서, 상황에 따라 인증하거나 만료되었다면 리프레시 토큰을 사용해 새로운 토큰을 발급받는 역할을 하는 JwtAuthFilter 를 만들어 등록해두었다. 시큐리티 필터체인에서 아래와 같이, AuthorizationFilter 이전에 등록해서 작동하도록 해 두었는데 http.addFilterBefore(jwtAuthFilter, AuthorizationFilter::class.java) 요청이 올 때마다 자꾸 해당 필터를 두번씩 거치는 문제가 있었다. 원인 간편하게 Bean으로 등록 해두고 사용하려고 클래스에 @Component 어노테이션을 붙여서 사용했는데 그게문제였다. 아래는 스프링 부트 도큐먼트에서 Filter에 관한 내용이다 https://docs.spring.io/sp..

Programming/JPA ⁄ Spring 2024.01.23
[Spring Boot] 정적자원 캐싱하는방법

Intro 가족들이 필요로해서 만들었고, 운영한지 이제 한 2년정도 된 스프링부트로 만든 토이 프로젝트가 있다. 리액트를 필두로 몇년째 이어지는 프론트엔드 춘추전국시대에 특별히 마음에 들거나 잘하는 프론트엔트 프레임워크가 없다보니, 사용하고 싶은 프론트엔드 스펙이 정해지면 그때 떼낼 생각으로 최대한 API콜 위주로 하며 thymeleaf로 개발했고, 아직까지는 큰 불편없이 쓰고 있다. 지금까지는 부트스트랩 jQuery vue.js 등의 라이브러리를 대부분 CDN에서 받아오도록 해놨었는데 이제부터는 소스코드에 포함해 배포하기로 했다. 오프라인이나 내부망에서 사용할 프로젝트는 아니기때문에 특별히 변경해야 할 이유는 없었지만 그래도 어플리케이션의 전체적인 구동을 통제하에 두고싶은 마음에 해보았다. 문제 그런데..

Programming/JPA ⁄ Spring 2024.01.23
Unable to load io.netty.resolver.dns.macos 에러 해결

문제 아래의 에러를 맞이했다. Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library 한참오래전에도 스프링에..

Development/Daily Error 2024.01.14
[일간에러] error: invalid source release: 21

문제 인텔리제이의 Spring Initializr를 이용해서 JDK 21을 사용하는 스프링부트 프로젝트를 생성했다. 생성할 때 JDK도 잘 설정해 주었는데, 프로젝트 생성 후 서버를 띄워보려고 하니 다음의 에러가 발생하며 컴파일이 되지 않았다. 원인 원인을 찾아보자. 일단 Java 21을 지원하는 Gradle 버전을 찾아본다. https://docs.gradle.org/8.4/release-notes.html#support-for-building-projects-with-java-21 Gradle 8.4 버전부터 Java 21을 지원한다. gradle --version 위에 보이는 것 처럼, 컴퓨터에 설치된 gradle 버전은 Gradle 8.0.2 로 확인된다. 버전이 낮기 때문에 얼핏 보면 설치된 G..

Development/Daily Error 2024.01.12
Apache Commons net 한글 파일명 문제 해결

문제 다음과 같이 Apache Commons net을 이용해 FTP 접속을 하고 FTPClient ftpClient = new FTPClient(); FtpConfig ftpConfig = config.getFtp(); ftpClient.connect(ftpConfig.getHost(), ftpConfig.getPort()); ftpClient.login(ftpConfig.getUsername(), ftpConfig.getPassword()); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); setFileType을 해주지 않으면 다운받아온 파일이 깨진다 재귀적으로 파일 목록을 담도록 코드를 작성했다...

Development/Daily Error 2024.01.10