본문 바로가기

분류 전체보기

(64)
Spring Boot Batch 적용하기 - 2 1. Step Skip Step 처리 도중에서 설정한 Exception이 발생하게 되면 해당 데이터를 건너뛰는 기능입니다.데이터의 작은 오류에 대해서 Step 의 실패 처리 대신 Skip 을 함으로써 배치 수행의 빈번한 실패를 줄일 수 있습니다.Skip 제한을 초과하는 경우가 되면 Exception이 발생됩니다. ItemReaderitem 을 읽던 도중 예외가 발생하게 되면 해당 item 을 skip 하고 다음 item 을 읽습는다. ItemProcessoritem 을 처리하던 도중 예외가 발생하면 해당 Chunk 의 첫 단계로 돌아가서 itemReader로부터 다시 데이터를 전달받습니다.itemProcessor 는 다시 item 을 받아 실행하는데 이전 실행에서 발생한 예외 정보가 내부적으로 남아있어 ..
Spring Boot Batch 적용하기 - 1 1. 스프링 배치 (Spring Batch) 스프링 배치(Spring Batch)는 대용량 데이터를 처리하기 위한 프레임워크로 스프링 기반에서 동작합니다.대량의 데이터를 효율적으로 처리하기위 해다양한 기능을 제공해줍니다.  로깅 및 추적작업 처리 통계작업 재시작건너뛰기/리소스 관리트랜잭션 관리위 와같이 대용량 데이터 처리를 안정적으로 처리를 제공해줍니다.스프링 배치(Spring Batch) 위와 같은 아키텍쳐 구성을 가지고 있습니다. ※ Batch 와 Scheduler 차이배치(Batch)는 논리적 또는 물리적으로 구성된 데이터를 그룹화하여 일괄 처리하는 방법을 의미합니다. 스케줄러(Scheduler)는 주어진 작업을 정의된 시간에 수행할 수 있게 도와주는 도구를 의미합니다. 배치는 대량의 데이터를 일괄..
Spring Boot + Quartz 적용하기 - 3 앞서 Spring Boot + Quartz 스케줄링을 구현해보았습니다.해당 포스팅은 클러스팅 환경에서 동작할 수 있게 구현해보았습니다.  1. Quartz 데이터베이스 생성Quartz 클러스터 환경을 구축하기 위해서는 메타 정보를 관리하는 데이터베이스를 생성해 주어야한다. 인텔리제이를 사용하는 사용자는 아래처럼 sql을 찾아서 테이블을 생성해주면 됩니다. 아래처럼 스키마를 구성해주면 됩니다. 이후 application.yml에 아래와 같이 설정해주었습니다. 2. quartz properties 설정이제는 quartz properties 설정을 해주면 됩니다. datasource를 설정해주고 클러스팅 처리 설정을 ture로 진행해주세요.우리는 클러스터링 환경을 구성하기 위하여 JDBC JobStore를 선..
Spring Boot + Quartz 적용하기 - 2 앞서 Quartz에 대해서 개념을 알아보았다해당 포스팅은 Spring Boot  + Quartz를 활용하여 스케줄링을 구현해보겠습니다.    1. SchdulerJob과 Trigger를 연결하여 Job을 실행시키는 역할을 수행하는 인터페이스입니다.Spring + Quartz 사용으로 ApplicationContext에 의해 관리되는 SchedulerFactoryBean을 생성해주었다.SchedulerFactoryBean에 JobFactory를 등록하여 Job도 컨텍스트로 관리될수 있게 설정된다. package com.kr.quartz.config;import com.kr.quartz.listener.MyJobListener;import com.kr.quartz.listener.TriggerListener..
Spring Boot + Quartz 적용하기 - 1 Spring Boot + Quartz를 이용하여 스케줄링 적용 과정을 포스팅하였습니다. 1. 스케줄링(Scheduling) 이란? 스케줄러란 일정한 주기 마다 반복적으로 작업을 실행하는 도구를 일컫는 말이다. 개발을 진행하는 과정에서 주기적으로 실행해야하는 작업이 필요한 경우가 생긴다. 이러한 경우 스케줄링 설정을 이용하여 작업을 처리할 수 있다. 자바에서는 다양한 스케줄러를 지원하게되는데 Quartz, Spring Scheduler, ScheduledExecutorService 등이 존재합니다.  ※ 배치 스케줄링(Batch Scheduling) 이란?배치 스케줄링이란 대량의 데이러터 처리를 자동화 작업으로 구현것을 의미합니다. 이번장에서는 배치 스케줄링을 적용하지 않으며 추후에 스프링 배치 포스팅을 ..
CPU 과부화 장애 트러블슈팅 개인적으로 구성해둔 미니 PC 서버에서 이상감지가 되었다. Zabbix를 통하여 간단하게 서버 리소스 상태만 감지하고 있었는데 어느날 부터 갑자기 CPU 점유가 100%가 넘어가기 시작하며, 나중에는 서버가 죽어버렸다. 일단 서버를 재부팅하였고 다시 리소스가 정상화 되었으며 트러블 슈팅을 하기로 생각했다. 위 그림을 보면 CPU 점유가 100%가 넘었고 장애가 발생되었다. 실제로 운영하는 서비스가 저렇게 되면 대형사고와 마찬가지다. 일단 개인적으로 구축한 서비스들이 전부다 지연이 되었고 동작 불가상태까지 넘어갔다.  첫 째로 현재 CPU 상태를 보기 위하여 서버 상태를 체크하였고 위 스크린샷을 보면 알 수 있듯이 특정 PID (39521)이 말도안되는 높은 CPU 점유를 가지고 있었다.해당 PID cmd..
gitHub & Jenkins CI/CD 적용 (4/4) 이전 포스팅에서 진행했던 마지막 CI/CD 배포를 진행할 예정입니다.  필자 경 Pipeline script를 작성하여 배포를 진행하였습니다. 작성 배포 스크립트 포맷pipeline { agent any tools { gradle 'gradle-8.7' } environment { DCOKER_IMAGE_NAME = ""; } stages { stage('git pull') { environment { REPOSITORY_URL = "" } steps { git branch: 'main', url: "${REPOSITORY_URL}"..
gitHub & Jenkins CI/CD 적용 (3/4) 이번 포스팅은 간단한 프로젝트를 gitHub & 젠킨슨 파이프라인을 만들어 빌드 진행 예정입니다. 이전 포스팅을 진행할 때는 로컬 환경에서 Jenkins를 구성하였는데 그렇게 되면 github webhook을 이용하는데 제한이 생겨서 클라우드 환경으로 옮겨서 진행을 했다.  Github WebHookgithub webhook 설정 페이지 들어가서 url을 설정해 줬다. 아래와 같이 기본 URL을 설정해 주었고 각 환경에 맞는 host, port를 적용해 주면 된다.http://{host}:{port}/github-webhook/ 추가적으로 클라우드 환경에서 방화벽 허용을 진행하기 위하여 github webhook ip를 허용 진행했다.140.82.112.0/20  Docker 환경 Jenkins 설치※ ..
gitHub & Jenkins CI/CD 적용 (2/4) 이번 포스팅은 간단한 프로젝트를 gitHub & 젠킨슨까지 빌드를 진행해 볼 예정입니다. Github 계정 설정※ Private 저장소가 아니라 Public 저장소를 사용하면 해당 단계는 Skip해도 무방하다. 1. Github 계정 로그인 후 Settings 페이지로 이동하니다. 2. Settings페이지에서 Developer settings를 클릭해줍니다. 3. Personal access tokens를 클릭한 이후 토큰 생성 버튼을 클릭해 줍니다. 4. 아래와 같이 토큰 명과 scope를 설정하고 토큰 생성 버튼을 클릭해 줍니다. 5. 아래와 같이 발급된 access token을 저장해 줍니다. Jenkins & Github 연동1. 젠킨스 메인 페이지에 접근하여 Jenkins 관리 > 시스템을 클..
Spring Boot 2와 3은 무엇이 다를까? Spring Boot 3을 사용하기에 앞서 2와 3의 차이점을 알아두기 위해 글을 작성합니다. Spring Boot 32022년 12월 정식 버전 릴리즈를 통하여 우리는 Spring Boot 3을 이용하게 되었습니다.이에 대표적으로 무엇이 달라지었으며 알아두면 좋을 점들은 정리해 두겠습니다.  Java 17 이상에서 지원이 됩니다.Java EE를 Jakarta EE로 대체됨으로써 javax.* 에서 jakarta.*로 변경이 되었습니다.GraalVM 기반의 Spring Native가 3년간의 실험을 마치고 공식 지원을 시작합니다.HTTP/RSocket Interface Client를 제공합니다.Micrometer Observation API가 자동으로 구성되며, Observability 가 공식 지원을 ..