프로젝트를 진행할 때 우리는 여러 라이브러리를 여기저기서 끌여다가 사용하게 됩니다. 열심히 만든 개발 결과물이 개발 단계에서 사용된 외부 라이브러리로 인해 낭패 보지 않도록 프로젝트 내에서 사용한 각 라이브러리에 대한 라이선스 정보를 파악할 필요성이 있습니다. 각 라이브러리를 하나씩 찾아서 수기로 작성하기엔 시간도 아깝고 눈도 아픕니다. 이를 자동화하여 추출할 수 있는 방법을 소개해드리겠습니다. Spring Boot와 Gradle 기반의 프로젝트의 예시 build.gradle 에 다음과 같이 라이브러리 추가 (Gradle ≥ 5.*) plugins { .... // 여러 플러그인들... id "com.github.jk1.dependency-license-report" version "1.13" } 이후 ..
최근 기존에 NodeJS와 Typescript, NestJS으로 이루어진 API 서버를 Java와 Spring Boot 환경으로 마이그레이션 작업을 진행하고 있다. 그중 Spring Security를 적용하면서 REST API 형태로 JSON으로 Login 요청을 날리면 Spring Security에서는 데이터를 받지 못하고 해당 요청을 Block 하는 이슈가 있어서 이를 확인하고 해결한 과정을 기록해본다. Spring Security는 여러개의 Filter들이 묶여서 동작하는 Filter Chain으로 이루어져 있다. 그렇다면 Login을 담당하는 Filter는 어떤 것일까? SecurityConfiguration 클래스를 작성하다 보면 다음과 같은 메소드를 볼 수 있을 것이다. package com...
Spring 에는 주기적인 일을 처리할 수 있도록 스케줄 관련 기능이 포함되어있다. 먼저 스케줄 작업을 처리하기 위해 src/config 패키지 하위에 ScheduleConfiguration 클래스를 작성하자. 그다음에 다음과 같이 작성 하자. @EnableScheduling 어노테이션을 선언함으로써, Spring은 스케줄 관련 기능을 지원하며 스케줄링 관련 어노테이션을 활성화한다. 프로젝트의 메인 클래스인 DemoApplication 클래스에서 @EnableScheduling 어노테이션을 선언하여, 스케줄링 기능을 활성화할 수 있지만, 나는 설정 파일들은 모두 따로 config 패키지 하위에 클래스로 생성하여 관리한다. 이 방법이 좀 더 직관적인 것 같다. 그다음 반복되는 스케줄 작업을 선언하기 위해 ..
최근 Spring Boot, Spring Boot Data Jpa, Hibernate를 사용하면서 Spring Boot Data JPA 프로젝트에서 Querydsl을 적용하는 방법에 대하여 알려드리겠습니다. 먼저 Querydsl 관련 플러그인을 다음과 같이 추가해줍니다. 그다음, querydsl 라이브러리를 dependencies에 다음과 같이 추가해줍니다. 이후, gradle에서 querydsl을 통해 Qclass를 생성하기 위하여 QClass가 생성될 디렉토리의 위치와 관련 설정들을 작성하는 Task를 다음과 같이 추가해줍니다. Java 플러그인에는 Source Set이라는 개념이 들어가 있으며, 이는 함께 컴파일과 실행되는 소스 파일들의 그룹들을 뜻합니다. 다음과 같이 자바 코드와 QClass가 같..
Spring Boot의 기본 로그 객체는 Logback으로 SLF4j의 구현체이다. Spring Boot 프로젝트를 실행하면 아래와 같이 LogBack의 기본 로그 포맷이 콘솔에 찍히게 된다. 업무에 사용되는 모니터링 시스템이나, 로깅 시스템에 따라 로그 포맷을 바꿔야 하는 경우가 있는데 이러한 경우 다음과 같은 방법으로 로그 포맷을 변경할 수 있다. 1. application파일에서 로깅 포맷을 변경 (저는 yml 형태로 application 파일을 설정합니다.) [ resources/application.yml ] logging: pattern: console: "%cyan([GatewayServer]) - %magenta([%d{yyyy:mm:dd HH:MM:ss}]) - %highlight([%-..