Pipeline으로 Job을 실행하고 실행결과에 따라 분기처리를 하고 싶은 경우가 생겼다. 예를 들면 a라는 job이 실행이 되었고 이 job이 성공을 하면 b라는 job을 수행하고 실패를 하면 c라는 job을 수행하도록 하고 싶다. 이렇게 구성을 하는건 여러가지 방법이 존재하지만 내가 좋아하는 if else 구문을 사용해서 구성해보겠다. 대략 이런 그림이다. pipeline project를 하나 만들어서 이를 구성해보자. Pipeline project 생성 새로운 Item 을 눌러서 Pipeline을 지원하는 프로젝트를 생성한다. Pipeline job을 하나 생성하면 위와 같이 groovy 문법을 사용하여 Pipeline Script를 작성할 수 있다. Pipeline Script 작성 node{ s..
엄청나게 편리한 Jenkins이지만 불편한점도 있다. 예를 들자면 Jenkins를 이용해 batch를 처리할때 분명 batch job은 내가 원하는대로 수행되지 않고 Error가 발생했는데 Jenkins job은 이를 Success 처리를 하는 경우이다. 오류가 발생을 하면 slack이든 email이든 noti를 보내야 하는데 오류가 발생하지 않았다고 판단하여 아무런 후속조치를 하지 않는다. 이럴 경우에 Log Parser 라는 Jenkins plugin을 사용해서 해결할 수 있다. 설치부터 어떻게 사용하는지 알아보자. Jenkins Log Parser 설치 Jenkins 관리 > 플러그인 관리 > 설치 가능 > Log Parser 선택 > 재시작 없이 설치하기 Log Parser Rule 파일 생성 (..
springboot는 이게 정말 왜 되지? 할 정도로 내장되어 있는 편리한 기능들이 많이 있다. 이번에 소개할 내용도 그렇다. 내부 로직을 까보지 않아서 정확한 동작원리는 파악하지 못했지만 그래도 급하게 DB 연동해서 테스트 할일이 있을때 편리하게 사용할 수 있는 샘플 프로젝트다. springboot 와 embedded hsql db의 조합이다. 빠르게 살펴보자. 프로젝트 생성 New Spring Starter Project 를 통해 프로젝트를 생성한다. dependency는 Spring Data JPA만 넣어준다. pom.xml org.hsqldb hsqldb runtime pom.xml 에는 위와 같이 hsqldb dependency를 추가해준다. 프로젝트 생성이 완료되면 위와 같은 모습일것이고 re..
CSV파일은 지금은 많이 안쓰이지만 그래도 종종 사용이 된다. 여러가지 OSS가 이를 지원해주고 있지만 그중 간단하게 CSV파일을 파싱할 수 있는 방법을 소개한다. 일단 univocity-parsers dependency 추가가 필요하다. pom.xml com.univocity univocity-parsers 2.8.4 TestCSV.java import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.List; import com.univocity.parsers.csv.CsvParser; import com.univocity.parsers.csv.CsvParserSettings; ..
IT 기술이 급변하면서 많은 회사들이 이를 따라가기 위해 열심히 노력을 하고 있다. (아닌곳도 있고..) 필자는 아키텍트 직군이다. 아키텍트도 일반적으로 여러 기준(TA, AA, SA, DA 등등)으로 나뉘어져 있는데 Kubernates, Docker, Spring Cloud 이런 기술들이 나오면서 경계가 없어져버린 느낌이다. 물론 다른 사람의 영역까지 다 할수 있는건 뛰어난 아키텍트가 되기 위한 좋은 기회이지만 그만큼 뒤쳐지지 않게 노력을 많이 해야할듯 싶다. 최대한 내 일이 아니라고 다른 사람에게 미루지 않고 웬만하면 내가 다 할수 있는 뛰어난 사람이 되고 싶어서 오늘도 달려본다. 잡설이 길었는데 오늘은 Kubernates 첫걸음을 떼 보려고 한다. 이를 위해 가장 먼저 Kubernates 설치를 해..
docker-compose는 조금 더 docker를 편하게 사용할수 있도록 해주는 도구이다. Docker 플러그인 같은 개념이라고 생각하면 이해가 편하다. 근데 뭘 조금 더 편하게 해줄까? docker에서 수행되는 일련의 작업(eg. build, run, network, volume..)을 docker-compose.yml 파일을 통해서 한방에 하게 해준다. docker-compose.yml 파일은 docker로 할 일에 대한 작업기술서 같은 것이라고 보면 된다. 예를들면 a라는 image를 빌드하고 빌드한 image를 실행하고 b라는 image도 network, volume 등을 설정하여 실행을 시키고 싶을때 기존에 각각 docker 명령어로 수행했어야 했던 일을 docker-compose를 통해 한방..
Docker image를 빌드하고 다음에 또 사용하고 싶은 경우가 있다. 그럴때 어떻게 하는지에 대해서 알아보자. 사전준비 일단 빌드를 하는 과정은 건너뛰고 간단하게 보여주기 위해 아무거나 Docker Hub로 pull을 받는다. 필자는 nginx를 선택을 하였다. Docker Hub로부터 pull을 받는 방법은 Docker Hub에 접속하여 nginx를 검색한다. 그럼 위와 같이 official image가 나올것이고 눌러서 들어간다. 그럼 우측에 다음과 같이 이 image를 받을 수 있는 명령어를 볼 수 있다. 이렇게 nginx를 일단 받아 놓는다. 물론 새로운걸 빌드를 해도 상관은 없다. 그리고 Docker Hub에 접속해서 계정을 만든다. 따로 회원가입 페이지가 있는게 아니라 그냥 여기에 정보를 ..
지난 포스팅으로 RabbitMQ를 설치하는 방법에 대해서 알아보았다. 이 설치한 RabbitMQ와 management를 띄워놓고 Springboot를 연동하여 비동기통신을 하는 간단한 샘플을 만들어보자. 설치에 앞서 간단한 개념을 알아보자. Publisher(=Provider) 라는 메세지 발생의 주체가 있고 메세지를 발생 시킨다. 메세지를 rabbitTemplate (restTemplate 같은 개념이라고 이해하면 됨. RabbitMQ와 통신을 쉽게 해준다.) 이라는 RabbitMQ의 API를 이용해 RabbitMQ 영역으로 보내면 이를 받아주는건 Exchange이다. 메세지를 보낼때 어느 Exchange로 보낼지에 대한 정보와 이 Exchange는 어느 Queue로 routing이 되야 하는지에 대한..