스터디/스프링

Spring Batch 멀티 스레드 프로세싱을 활용하며 겪은 문제 (1)

들어가며 보통의 팀들이 사용하듯 통계성, 일회성 작업을 배치로 많이 작성하여 해결하고 있다. 그런데 필자가 기본적인 배치의 구조를 잘못 이해하면서 문제가 발생했다. 스프링 배치의 멀티 스레드 프로세싱을 활용하며 겪은 문제 중 잡 스코프(job scope)를 가지는 빈(bean)을 사용할 경우 겪은 문제를 기록한다. 문제 회사 코드를 가져올 수 없으니 예제 코드를 작성하고 요구사항에서 문제가 발생한 부분에 집중하기 위해 불 필요한 부분은 생략하였다. 코드는 코틀린으로 작성했다. 요구 사항 다른 시스템에서 전달받은 이벤트 중 특정 이벤트의 값이 잘못되어 올바르지 않은 값이 저장되었다. 다른 시스템을 담당하는 팀에서 파일로 전달받은 값으로 특정 데이터들을 수정해야 한다. 작성한 코드 배치 코드 처리 속도를 올..

2023.01.30 게시됨

스터디/스프링

Spring Boot에서 properties 값 주입받기

개요 Spring Boot를 이용해서 어플리케이션을 만들다 보면 외부에서 특정 값들을 주입받아야 하는 경우가 있습니다. 예를 들면 AWS의 특정 컴포넌트를 사용하기 위한 secret key가 될 수도 있고 외부 API를 사용하기 위한 API key가 될 수도 있습니다. 이러한 값들을 소스 코드에 하드 코딩한다면 악의적인 의도를 가진 사람이 값을 탈취하여 사용하면서 큰일로 이어질 수 있습니다. 따라서 이렇게 중요한 값들을 application.properties 혹은 application.yml 과 같은 외부 설정값을 관리하는 파일에 적어두고 사용하기도 하고 .jar 파일을 실행하기 위한 커맨드에서 직접 값을 넘겨주기도 합니다. 이번 글은 Spring Boot에서 외부 파일(ex.application.pr..

2020.10.15 게시됨

스터디/스프링

Spring Boot에서 Spring Bean 초기화 과정에 대해 알아보자.

Spring Boot를 사용하면 자연스럽게 Spring Bean을 직접 생성하고 사용할 일이 많아진다. 따라서 우리는 Spring Bean을 생성하는 방법은 당연히 알고 있어야 하고 더 나아가 어떠한 방식으로 등록되는지 알고 있어야 한다. 이 글에서 개발자가 생성하거나 Spring Boot가 제공하는 Spring Bean을 어떻게 사용할 수 있게 되는지 간략하게 알아보도록 하자. Spring Bean을 만드는 방법 개발자가 직접 Spring Bean을 만드는 방법은 두 가지가 있다. @Component 어노테이션을 이용하는 방법과 @Bean 어노테이션을 이용하는 방법이다. @Component 어노테이션의 경우 아래와 같이 클래스에 명시해 주면 된다. @Component public class MyCust..

2020.10.05 게시됨

스터디/스프링

Spring Boot 로컬 환경에서 정적 리소스 리로드 하기

로컬 환경에서 정적 리소스 리로드 하기 개요 우테코 레벨 2를 진행하면서 웹 페이지, 특히 js를 많이 작성하게 됐습니다. 그러다 보니 정적 파일(특히 js)을 수정하면 Spring boot에서 실행중이던 app을 재시작해서 수정된 정적 정보를 다시 불러와야 했습니다. Spring devtools 의존성을 추가해서 리로드 하는 방식이 있지만 빌드 속도가 느려지고 개발환경 외에 사용되지 않는 의존성을 추가하고 싶지 않았습니다. 게다가 필자는 설정해도 됐다 안됐다 하네요;; 얼마전 WebMvcConfigurer에서 resourceHandler를 다뤘는데 이를 이용하면 간단하게 해결이 된다는 것을 알게되어 공유하고자 합니다. 바라보는 정적 리소스의 위치 수정하기 아래는 이전에 작성한 classpath 아래의 ..

2020.05.22 게시됨

스터디/스프링

Spring Boot HTML 파일 templates에서도 읽도록 설정하기

static 아닌 폴더에서 정적 정보 읽어오기 스프링 부트에 web 의존성을 추가하고 localhost:8080으로 접근하면 기본적으로 resources 폴더에 있는 static 에 위치한 index.html 파일을 읽게됩니다. 프로젝트를 생성하고 다음과 같이 index.html을 생성하여 static 에 위치시키고 애플리케이션을 실행후 localhost:8080으로 접근하면 다음과 같이 index 페이지가 출력되는것을 확인할 수 있습니다. static 에서 접근하는 것은 문제가 없습니다. 그러나 html 파일들은 static이 아닌 resources 밑에 templates 폴더에서 관리를 하고 싶어진다면 문제가 발생합니다. 아래와 같이 home.html을 resources 밑 templates에 위치시..

2020.05.18 게시됨