전체 글

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

테스트 성능 개선

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

개발/Spring Core

Executor와 TaskExecutor 이모저모

Java Executor Executor public interface Executor { void execute(Runnable command); } 제출된 Runnable 작업을 실행하는 객체이다. 태스크 제출과 각 태스크가 어떻게 실행될 것인지의 메커니즘을 분리하는 방법을 제공하며, 이는 스레드 사용, 스케줄링 등의 세부 사항을 포함한다. Executor는 일반적으로 명시적으로 스레드를 생성하는 대신 사용된다. 보통 스레드 풀을 사용하는 구현체가 많다. Executor 인터페이스는 실행이 반드시 비동기라는 것을 요구하지 않는다. Executor는 제출된 태스크를 즉시 호출자 스레드에서 실행할 수도 있다. Execuotr에서는 보통 태스크는 호출자의 스레드가 아닌 다른 스레드에서 실행된다. 많은 Ex..

개발/Spring Batch

스프링 배치 핵심 도메인 기초

Job 배치 계층 구조에서 가장 상위에 있는 개념으로 하나의 배치 작업 자체를 의미한다. 'A 데이터베이스의 데이터를 B 데이터베이스로 옮기는 배치'는 Job 자체를 의미한다. JobConfiguration을 통해 생성되는 객체 단위, 배치 작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 놓은 객체 배치 Job을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체를 제공한다. ex SimpleJob, FlowJob 여러 Step을 포함하고 있는 컨테이너로서 반드시 한 개 이상의 Step으로 구성해야 한다. JobInstance Job이 실행될 때 생성되는 Job의 논리적 실행 단위 객체로서 고유하게 식별 가능한 작업 실행을 나타낸다. Job의 설정과 구성은 동일하지만 Job이 ..

Docker

docker-compose의 Redis-cluster와 통신이 안된다..!?

최근 작년에 진행한 졸업 프로젝트를 리팩토링하고 있다. 프로젝트 EC2에서 스프링 부트 애플리케이션과 도커 컴포즈를 사용한 레디스 클러스터가 동작하고 있다. DB로는 AWS RDS MySQL을 사용하고 있다. 또한 Github Action, S3, Code Deploy를 사용해 CI/CD 파이프 라인을 구축했다. 오늘은 CI/CD 파이프 라인을 구축하면서 있었던 오류에 대해 말해보고자 한다. 문제 CI/CD 파이프라인에는 스프링 부트 애플리케이션을 빌드하는 과정에서 작성한 모든 테스트(통합 테스트, 단위 테스트)를 수행하는 과정이 있다. 여기에서 문제가 발생했다. 빌드 통합 테스트 과정 중 EC2에서 동작하는 레디스 클러스터와 통신이 안됐다. 그 당시 로컬과 운영 환경에서 작성한 docker-compos..

Debin
리팩토링하는 블로그