개요 Spring Cloud Config 서버를 이용하여 설정 정보가 변경되었을 때 서버를 다시 시작하지 않고 반영하는 방법을 정리해보겠습니다. 저는 예시로 Spring Boot로 Product 서버를 만들었고 Github를 외부 저장소로 했습니다. 구현 의존성 추가 // actuator implementation 'org.springframework.boot:spring-boot-starter-actuator' Actuator는 Spring Boot 애플리케이션의 운영 중인 상태 및 성능 지표를 모니터링하고 관리하는 기능을 제공하는 라이브러리 입니다. Actuator는 내부 정보를 엔드포인트를 통해 접근할 수 있게 합니다. (예시, API 통신) Spring Boot Actuator 사이트에 들어가면 ..
Spring, Spring Boot
개요 이번에는 Spring Boot 프로젝트의 설정 정보를 Spring Cloud Config 서버를 통해 외부 저장소(Github)에서 가져와보려 합니다. 저번 글에서는 Spring Cloud Config 서버를 만들었으니 이번에는 예시로 서버(Product 서버)를 하나 만든 다음 Spring Cloud Config를 통해 연결해보겠습니다. 예시 서버 구현 의존성 추가 의존성 추가 중 bootstrap이 있습니다. 이 의존성을 추가하면 bootstrap.yml 사용한다는 의미입니다. bootstrap.yml은 application.yml 보다 먼저 실행되어지는 파일입니다. bootstrap.yml이 먼저 실행되면 로컬값보다 Spring Cloud Config에 의한 중앙저장소(외부 저장소, Githu..
Spring Cloud Config Spring Cloud Config란 MSA와 같은 여러 개의 서비스로 분산된 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보를 외부 시스템에서 관리하는 것 입니다. 특징 하나의 중앙화된 저장소에서 구성 요소 관리 각 서비스를 다시 빌드하지 않고 적용 가능 개발, 테스트, 배포 등 용도에 맞는 설정 정보를 관리 우선 순위 Spring Cloud Config가 관리하는 설정 파일들은 우선 순위가 있습니다. application.yml - application-name.yml - application-name-.yml application.yml : 기본이 되는 파일 application-name.yml : 특정 서비스의 기본이 되는 파일 application-nam..
Apache JMeter 웹 애플리케이션 성능 테스트 도구로 JAVA를 기반으로 만들어졌습니다. 원래는 웹 애플리케이션에 대한 성능 테스트를 위해 만들었지만, 다양한 테스트 유형과 프로토콜을 지원하게 되었습니다. 서버나 네트워크 혹은 개체에 과부하를 시뮬레이션하여 강도를 테스트 하거나 다양한 부하 유형에서 전체 성능을 분석하는데 사용합니다. 특징 다양한 프로토콜 지원: JMeter는 HTTP, HTTPS, FTP, JDBC, LDAP, SOAP, JMS, MQTT 등과 같은 다양한 프로토콜을 지원합니다. 그래픽 사용자 인터페이스: 사용자 친화적인 GUI를 통해 테스트 케이스를 생성하고 실행할 수 있습니다. 다양한 플러그인 지원: JMeter는 다양한 플러그인을 지원하여 확장성이 높습니다. 추가적인 기능이..
개요 이번에는 Write Back 혹은 Write Behind 라고도 불리는 지연 쓰기 전략에 대해 적어보겠습니다. Write Back은 Write Through 처럼 데이터의 변경(수정, 삭제 등)이 일어날 때 캐시를 최신화, 일관성을 유지하는 전략입니다. 다만 다른 점은 Write Through는 캐시 데이터를 변경하면서 동시에 DB에 변경 사항을 반영하는데 Write Back 전략은 변경 사항을 모았다가 한 번에 DB에 반영합니다. 이 방법은 높은 트래픽 상황에서 응답 시간을 최적화 하는데 유용하지만 데이터 손실 위험이 있습니다. 장점과 단점 장점 빠른 응답 시간: 쓰기 요청에 대한 응답은 캐시 업데이트 후 즉시 반환되므로, 사용자에게는 빠른 응답 시간이 제공됩니다. 배치 처리의 효율성: 여러 쓰기..
개요 저번 시간에 Cache-Aside 와 Read Through를 통해 조회할 때 Redis에 캐싱된 정보를 한 번 찾고 Redis에 없으면 DB에서 가져오는 것을 배웠습니다. Cache에서 가장 중요한 것은 데이터가 변경(등록, 수정, 삭제) 될 때 그 내용을 반영하여 항상 최신화를 유지하는 것 입니다. Write Through 전략은 이 최신화를 유지하기 위한 전략으로 데이터를 Cache와 DB에 동시에 저장하는 방식입니다. 이는 캐시와 DB 간에 데이터 불일치가 발생해서는 안되는 상황에서 사용됩니다. 장점 / 단점 Write Through의 주요 장점은 Cache와 DB 사이에 데이터 불일치가 크게 줄어드는 것 입니다. 단점으로는 데이터를 두 군대에 기록하므로 쓰기 작업 성능이 느려질 수 있는 것..
개요 Read Through 전략은 메소드에 @Cacheable을 걸어서 자동으로 Redis에 캐싱을 하는 전략 입니다. 캐시 미들웨어가 직접 데이터 소스와 연동하여 캐시 누락시 자동으로 데이터를 로드 합니다. 즉, 자동화된 캐싱 전략이라 생각하면 될 거 같습니다. 이번에는 Read Through Cache를 기록하려 합니다. 흐름 API 요청 수신 캐시 확인 데이터가 존재할 경우 : 캐시된 값을 반환 데이터가 존재하지 않을 경우 : 캐시 미들웨어가 DB에서 데이터를 가져와 캐시에 저장한 후 값을 반환 전에 정리한 RedisTemplate, RedisHash를 이용해서 수동으로 Redis에 캐싱을 했습니다. 이러한 전략을 Cache-Aside 혹은 Lazy-Loading 이라 합니다. Read Throu..
개요 Redis 학습 과정에서 RedisHash 말고도 RedisTemplate 방법이 있다는 것을 알았습니다. 프로젝트를 진행하면서 JPA로 MySQL과 매핑된 Product 클래스를 Redis에 저장해보고 싶었습니다. @RedisHash 랑 @Entity를 한 클래스에 동시에 사용하는 것은 가능은 하지만 두 개의 저장소에 동시에 매핑됨으로 복잡하고 에노테이션 충돌이 발생할 수도 있고 불안한 점이 많았습니다. 이 때 RedisTemplate을 학습하고 적용했습니다. RedisTemplate RedisTemplate는 Spring Data Redis에서 제공하는 핵심 클래스로 Redis 연산을 수행하기 위한 기본적인 템플릿을 제공합니다. RedisTemplate을 원하는 대로 커스텀하여 Spring Bo..
개요 Redis는 인메모리 저장소 Key : Value 형태로 저장되며 캐시 서버로 자주 사용되며 성능 향상, 분산 처리 등 여러 방면에서 도움을 줍니다. Spring Boot와 Redis를 연결하여 객체를 Redis를 저장하고 조회하는 작업을 정리해보려 합니다. 작업 순서 1. build.gradle 파일에 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2. application.yml 파일에 Redis 연결 정보 추가 spring: redis: host: localhost port: 6379 3. Redis와 연결할 객체 생성 package com.dotd.product.redis.entity; impor..
개요 이번에는 Spring Batch에서 작업의 흐름을 설정할 때 사용하는 Flow, Split을 학습하고 프로젝트에 적용해 보겠습니다. Flow Flow는 Spring Batch에서 작업 흐름을 정하는데 사용됩니다. 작업의 단계인 Step을 그룹화하여 복잡한 작업 흐름을 생성할 수 있습니다. Flow는 Step을 순차적으로 실행되게 하며 필요한 경우 조건부로 실행 흐름을 제어 할 수 있습니다. 예를 들어, 작업이 실패한 경우 다른 단계로 이동하게 하거나 특정 조건이 충족되면 다음 단계를 실행하게 하는 등 여러 조거분 실행 흐름을 있습니다. Flow 예시 @Bean public Flow userUpdateFlow() { return new FlowBuilder("userUpdateFlow") .start..
Test Code 란? 테스트 코드란 개발자들이 작성한 코드나 비즈니스 로직 자체를 테스트 하기 위한 코드 입니다. 테스트 코드를 사용하는 이유는 다양합니다. 개발 과정에서 문제를 미리 발견할 수 있다. 리팩토링 리스크가 줄어든다. 애플리케이션을 가동해서 직접 테스트 하는 것보다 테스트를 빠르게 진행할 수 있다. 하나의 명세 문서로 기능을 수행한다. 리팩토링 리스크가 줄어든다. 리팩토링 과정에서 새로운 코드가 추가되면 그 코드와 연관된 코드에게 영향을 줍니다. 테스트 코드가 없다면 수시로 확인해야 하지만 테스트 코드가 있다면 혹시 모를 부작용에 대비할 수 있습니다. Test Code 활용 테스트 코드를 활용하기 위한 순서는 다음과 같습니다. 의존성 추가 파일 생성 테스트 코드 작성 1. 의존성 추가 테스..
Spring Batch 병렬 처리 Spring Batch는 대용량 데이터를 처리하는 프레임워크 입니다. 병렬 처리는 한 번에 여러 작업을 동시에 실행하여 작업을 분산시키는 방법이며 성능 향상을 위한 중요한 기능 중 하나 입니다. 이번에는 TaskExecutor를 사용하여 step 내부를 Chunk 단위로 병렬 처리한 경험을 기록하려 합니다. 스레드 풀 설정 Spring Batch 병렬 처리를 위해 스레드 풀 설정을 진행합니다. @Bean public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(4); // 코어 스레드 개수 ..