목록분류 전체보기 (154)
ultra_dev
프로젝트 내 스프링 배치에서 특정 상태를 바꿔주는 코드가 있다. 특정 날짜가 지난 게시글들을 만료 처리하는 배치코드이다. 백엔드 서버가 JPA로 구성돼 있으므로 스프링 배치도 동일한 기술 스택을 유지하기 위해 JPA를 선택했다. 일관된 기술 스택을 사용하여 코드 개발, 유지보수에 도움이 되고, 컴파일 시점에 에러를 잡을 수 있는 등 다양한 장점이 있기 때문이다. 아이템라이터에서 아이템 업데이트를 더티체킹 방식으로 하다보니, 청크사이즈만큼 아이템이 있다고 해도 각 엔티티마다 개별적으로 업데이트 쿼리가 나가서 데이터베이스 부하가 커지는 문제가 생겼다. 이에 따라 문제를 해결하기 위해 각 아이템을 모아서 한번에 업데이트 하는 방식으로 코드를 변경했다. 즉 만료 처리할 게시글들을 모아서 IN 절로 한번에 벌크 ..
DB를 바탕으로 한 스프링 배치 기본 개념 : 배치는 실시간 처리가 어려운 대용량 데이터를 다루고 DB의 I/O 성능 문제 및 메모리 자원 효율성 문제를 고려 해야한다 → 스프링 배치에서는 대용량 데이터 처리 위한 2가지 방법을 제시한다! Cursor Based 처리 JDBC ResultSet의 기본 메커니즘 사용 AbstractPagingItemReader 클래스 현재 행에 커서 유지하며 다음 데이터 호출 시, 다음 행으로 커서 이동하며 데이터 반환이 이루어지는 streaming 방식의 I/O ResultSet이 Open 될때마다 next() 메소드 호출 돼서 데이터베이스의 데이터가 반환되고 객체와 매핑이 이루어짐 DB Connection이 연결되면 배치 처리가 완료될 때까지 데이터를 읽어오기 때문에 ..

스프링 배치 - 1 * 배치 패턴 Reader : DB 등에서 다량의 데이터 조회 Processor : 받은 데이터 가공 Writer : 데이터를 다시 저장 * 배치 과정 1. 배치 프로세스 주기적으로 실행 2. 동시 다발적인 Job 배치처리 3. 순차적인 Step 처리 4. 실패 시, 스케줄링에 의한 재시작 (또는 수동...) 5. 반복 참고 사항) 만약 스프링부트 3버전 이상(스프링 배치 5버전 이상)을 사용하고 복수개의 Job 정의시에 아마 밑에 오류가 뜰 것! [Job name must be specified in case of multiple jobs~] Spring Boot 3 버전에서부터 Spring Batch 사용 시 기존에는 스프링 부트가 구동될 때 모든 Job 빈들을 읽어 실행하는 구조..

젠킨스: 오픈 소스 CI/CD 툴이다. 들어가기 앞서 잡담)이번에 젠킨스를 사용한 이유는 일단 '무료'이기 때문이다.예전 사이드 프로젝트 진행 때는 github actions를 써서 aws ec2에 CI/CD 작업을 진행했는데 이번엔 젠킨스를 쓰게 됐다. 사내 코드는 private Repository로 git 관리가 되고 있고, private repository에서 CI/CD를 구축하는 건 "조건부 무료.."즉 제 기능을 다 쓰려면 유료라고 볼 수 있다. 물론 public repository로 만들면 그런 제한이 없는 걸로 알고 있다. 마침 회사 서버 pc도 여유가 있으니 무료인 젠킨스를 사용해서 CI/CD를 구축하는 건 허락을 받고 진행했다.구축 이유는 개발 단계에서 프론트엔드와의 협업 때문이다. 프론..