시간이 10분 이상 걸리는 Batch Job이 있고 이를 Jenkins를 통해서 실행을 하려고 한다. 분명히 Batch가 수행되며 data는 모두 성공적으로 들어갔고 정상적으로 종료된듯 보인다. 하지만 Jenkins Job의 상태는 Unstable이다. SSH: Disconnecting configuration [batch_001] ... ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 213,127 ms] Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE 로그를 꼼꼼히 보니 위와 같은..
지난 포스팅에서 Spring Cloud Config 를 통해 설정 외부화를 하는 과정을 알아보았다. 설정 외부화의 수단은 Github이었고 public repository에 있는 설정 파일에 대해 알아보았다. 이번에는 Github의 private repository에 접근하여 설정값을 가져오는 방법에 대해 알아보겠다. Github에 private repository를 하나 생성했다. 그리고 branch는 master를 하나 생성했다. 또한 설정을 가지고 올 oingdaddy.properties 파일을 생성을 해 두었다. private repository에 있는 값을 가지고 오는 방법은 크게 두가지가 있다. 첫번째는 ConfigServer application의 application.yml에서 직접 git..
MSA로 구성을 하면 어려워지는 기능 중 로그추적 기능이 있다. 기존의 Monolithic 구조에서는 로그 추적을 쉽게 할수 있었는데 app이 분산됨에 따라 어려워졌다. 하지만 훌륭한 로그 추적 솔루션들이 생기기 시작했고 우리는 그것을 잘 이용만 하면 된다. 이번에 다루려고 하는 훌륭한 솔루션은 바로 Spring Cloud Sleuth와 Zipkin이다. 아주 간단하게 이것들에 대해서 설명을 하자면 Spring Cloud Sleuth는 각 어플리케이션에서 발생하는 로그들에 대해 trace id 를 부과하는 역할을 한다. trace id라 함은 서비스의 고유한 추적 ID라고 이해하면 된다. 이렇게 trace id가 생성이 되면 Zipkin은 trace id를 토대로 UI를 통해 추적을 용이하게 해주는 역할..
아주 기본적인건데 삽질을 많이 했다. 나름 spring과 오랜 시간을 보내며 조금 안다고 생각을 했는데 한참 부족한것 같다. 지난번에 Springboot Batch Tasklet에 대해 글을 쓰며 두가지 방식에 소개를 했었는데 이와 관련해 @Value로 application.yml 파일에서 값을 가져오는 부분의 이슈를 발견했다. 무슨 문제인지 보자. application.yml test: oingdaddy: Oing is the prettiest in the world! 이 test.oingdaddy 라는 값을 작성하는 tasklet에서 가져다 쓰고 싶은 경우이다. 일반적인 Spring에서 그러하듯 @Value("${test.oingdaddy}) 를 통해서 값을 가져올 것이다. Case1. 하나의 클래스..
A, B라는 서버가 있고 A라는 서버의 특정 폴더를 B서버로 옮기고 싶을때 사용하는 방법이다. A라는 서버에서 FTP로 파일을 받아서 그걸 B서버에 전송을 해줄수도 있지만 SCP를 이용하면 훨씬 간편하게 진행할 수 있다. B서버에서 할 일 (받는 서버) $ vi /etc/hosts.allow sshd:123.123.123.123, 222.222.222.222, 보내는서버IP추가 받는 서버에서는 보내는 서버에 대한 ip정보를 추가해줘야한다. A서버에서 할 일 (보내는 서버) $ scp -r sample_folder username@xxx.xxx.xxx.xxx:/app scp 명령어를 통해 sample_folder를 폴더째로 xxx.xxx.xxx.xxx 서버(받는 서버 IP)의 /app 하위에 위치시키겠다는..
Minio를 이것저것 설정하고 되랏! 하며 기동을 시키면 다음과 같이 오류가 나는 경우가 있다. Unable to initialize server switching into safe-mode: Unable to initialize sub-systems: Unable to initialize config system: Invalid credentials.. 계정에 문제가 있나? 해서 계정정보를 수정도 해보았다. 계정정보를 수정하고 재기동을 해봐도 안되는건 마찬가지이다. 해결책이 문제는 필자는 .minio.sys 폴더를 지워서 해결하였다. .minio.sys 폴더는 minio를 기동할때 지정한다. 그 위치의 data 폴더에 들어가서 .minio.sys 폴더를 지워준다. 지워준 후 변경된 계정으로 다시 Min..
Spring Batch의 기본적인 기능들을 지난 포스팅들을 통해 알아보았다. 이번에 알아볼 Skip/Retry도 Spring Batch에서는 기본적으로 제공을 하는 기능이다. 간단한 예제를 통해서 알아보자. us-500.csv (웹에서 쉽게 구할수 있음) Chunk Example을 볼때 잠깐 나왔었던 500 row의 csv 파일이다. 테스트를 위해 사용이 될 것이고 Chunk 방식의 Batch를 사용해 이 파일을 읽어서 가공하고 DB에 쓸 것이다. 테스트는 파일을 가공하는 단계(Processor)에서 강제로 오류를 내고 그것을 잘 skip하는지 또는 잘 retry 하는지 살펴볼것이다. 여기서는 일단 Art라는 사람과 Donette라는 사람이 있다는것 정도 알아두자. Spring Batch Skip Exa..
지난 포스팅으로 Chunk 방식과 Tasklet 방식의 Spring Batch에 대해 알아보았다. 이제는 이 방식을 조금 응용하여 이를 병렬처리하는 방법에 대해 알아보겠다. Chunk와 Tasklet과 마찬가지로 이것도 매우 직관적이라 이해가 쉬울 것이다. SampleParallel.java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import o..