전체 글

공부 기록을 남기며 게시글 리팩토링을 진행하는 블로그입니다.
개발/Java

자바 메모리 누수

c언어는 free() 함수를 사용해 메모리를 해제한다. 자바는 GC가 더 이상 사용하지 않는 힙 영역의 인스턴스 메모리를 알아서 해제해준다. 그렇다면 GC가 메모리를 해제해주므로 자바에서 메모리 누수는 아예 발생하지 않을까?? 결론부터 말하면 자바에서도 메모리 누수는 발생할 수 있다. 객체가 실제로 사용되지 않으면서 의도치 않게 참조를 가지고 있다면, 이는 메모리 누수의 원인이 된다. 자바에서 메모리 누수는 프로그래머의 실수로 발생하는 것이다. 자바 메모리 누수와 관련해서 자주 발생하는 패턴을 살펴보기 전에 먼저 GC 대상에 대한 기초를 잡자. GC 대상 GC는 힙 내의 객체 중에서 가비지를 찾아내고, 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다. 그럼 어떤 객체가 가비지일까?? Java GC는 객체..

개발/Spring Batch

Chunk Process

Chunk Chunk란 여러 개의 아이템을 묶은 하나의 덩어리, 블록을 의미 한번에 하나씩 아이템을 입력 받아 Chunk 단위의 덩어리로 만든 후 Chunk 단위로 트랜잭션을 처리함, 즉 Chunk 단위의 Commit과 Rollback이 이루어짐 일반적으로 대용량 데이터를 한번에 처리하는 것이 아닌 청크 단위로 쪼개어서 더 이상 처리할 데이터가 없을 때까지 반복해서 입출력하는데 사용된다. Chunk는 ItemReader로 읽은 하나의 아이템을 Chunk에서 정한 개수만큼 반복해서 저장하는 타입 Chunk는 ItemReader로부터 전달받은 Chunk를 참조해서 ItemProcessor에서 적절하게 가공, 필터링한 다음 ItemWriter에 전달하는 타입 아키텍쳐 ChunkOrientedTasklet Ch..

개발/Spring Batch

FlowJob

FlowJob Step을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder에 의해 생성된다. Flow와 Job의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step에서 이루어진다. 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다. 사용해야하는 경우 Step이 실패하더라도 Job은 실패로 끝나지 않도록 해야 하는 경우 Step이 성공했을 때 다음에 실행해야 할 Step을 구분해서 실행해야 하는 경우 특정 Step은 전혀 실행되지 않게 구성해야 하는 경우 조건적 흐름이 필요하면 FloJob, 순차적 흐름은 SimpleJob 활용 배치 상태 유형 BatchStatus JobExecution과 StepExecu..

개발/Test

테스트 성능 개선

오늘은 프로젝트 테스트 성능을 개선한 이야기를 써보려고 합니다. 로컬에서 진행했으며, 컴퓨터 스펙은 M1 AIR(8코어) RAM 16GB SSD 512 입니다. 프로젝트 설명 간단하게 프로젝트 구조에 대해 설명하겠다. 멀티 모듈 프로젝트는 스프링 부트를 사용하고 있으며, 멀티 모듈로 구성돼 있다. api 모듈은 프레젠테이션 영역으로 인수 테스트와 컨트롤러 단위 테스트(Spring Rest Docs 생성)를 진행하고 있다. core 모듈은 비즈니스 로직을 수행하며 핵심 도메인 모델 클래스로 구성되어 있다. 통합 테스트와 단위 테스트를 진행하고 있다. 이 두 모듈의 테스트 성능을 개선해보려고 한다. 통합 테스트 운영 코드와 동일한 테스트 코드를 가지기 위해 명시적 롤백 전략을 사용하고 있다. 쉽게 말해 테스..

Debin
리팩토링하는 블로그