분류 전체보기
-
Redis에서 동시성과 원자적 연산: 트랜잭션과 Lua 스크립트카테고리 없음 2023. 6. 1. 23:10
Redis는 고성능의 인메모리 데이터 저장소로, 많은 애플리케이션에서 실시간 데이터 처리를 위해 사용된다. 하지만 Redis는 싱글 스레드로 동작하기 때문에 동시성 문제와 원자적 연산에 대한 이해가 필요할 것 같다. 특히 Redis 클러스터 환경에서는 이러한 이해가 더욱 중요하다. Redis에서 동시성 문제를 어떻게 해결할 수 있는지, 트랜잭션과 Lua 스크립트를 사용한 원자적 연산에 대해 이야기 해보자. Redis의 싱글 스레드 아키텍처Redis는 싱글 스레드로 동작한다. 이는 Redis가 한 번에 하나의 명령만 처리한다는 것을 의미한다. 이러한 특성 덕분에 Redis는 매우 빠른 성능을 제공할 수 있다. 그러나 여러 클라이언트가 동시에 명령을 보낼 때 명령의 순서와 원자성을 보장하는 것은 별도의 이..
-
Spring Batch 3.0 이상에서 JPA 사용시 PlatformTransactionManager 설정Spring/Spring 2023. 6. 1. 18:05
소개Spring Batch는 대용량 데이터 처리를 위한 강력한 프레임워크이다. 특히 Spring Batch 3.0 이상에서는 JPA를 사용하여 데이터베이스와 상호작용할 때 적절한 트랜잭션 관리가 중요하다. Spring Batch 3.0 이상에서 JPA를 사용할 때 PlatformTransactionManager를 설정하는 방법에 대해 알아보자.Spring Batch와 JPA 트랜잭션 관리Spring Batch에서 JPA를 사용하여 데이터베이스와 상호작용할 때는 JPA 트랜잭션 관리자를 사용하는 것이 적절하다. Spring Batch는 기본적으로 JDBC를 사용하지만, JPA와 함께 사용할 때는 JpaTransactionManager를 설정해야 한다. 이를 통해 JPA 엔티티의 상태를 관리하고, 데이터베이..
-
합의 알고리즘에 대한 이해책/데이터 중심 어플리케이션 설계 2023. 5. 30. 18:51
분산 시스템에서 합의 알고리즘은 여러 노드들이 하나의 일관된 결정을 내리도록 하는 메커니즘이다. 분산 시스템은 다양한 노드들이 협력하여 작업을 수행하므로, 데이터의 일관성과 신뢰성을 유지하기 위해 합의 알고리즘이 필요하다. 합의 알고리즘은 비잔틴 결함이 없다고 가정하는데 비잔틴 결함이 뭘까? 비잔틴 결함은 분산 시스템에서 발생할 수 있는 가장 심각한 유형의 결함 중 하나이다. 이는 시스템 내 일부 노드가 실패할 때, 단순히 작동을 멈추는 것이 아니라 의도적으로 잘못된 정보를 보내거나 예측할 수 없는 방식으로 행동하여 전체 시스템의 동작을 방해하는 것을 의미한다. 그렇다면 합의 알고리즘에서 비잔틴 결함이 없다고 가정해도 될까?비잔틴 결함의 발생 원인비잔틴 결함은 다양한 원인으로 발생할 수 있다. 첫째는 악..
-
k8s service 에서 label 을 바꿀때의 다운타임?DevOps/Kubernetes 2022. 4. 25. 00:38
서비스에서 라벨을 바꿀 때의 다운타임Kubernetes에서 애플리케이션을 배포하고 운영하는 과정에서, 서비스의 라벨을 변경해야 하는 상황이 발생할 수 있다. 이러한 변경 과정에서 서비스의 가용성을 유지하는 것이 중요하다.새로운 Deployment 준비첫 번째 단계는 새로운 Deployment를 준비하는 것이다. 새로운 Deployment는 기존 Deployment와 동일한 역할을 수행하지만, 새로운 라벨을 가진다. 이를 통해 서비스 셀렉터가 변경될 때 새로운 Deployment로 트래픽을 라우팅할 수 있다.apiVersion: apps/v1kind: Deploymentmetadata: name: new-deploymentspec: replicas: 3 selector: matchLabels: ..
-
크론잡(cronJob)의 작업 시간에 대해서카테고리 없음 2022. 3. 30. 23:42
크론잡(Cron Job)은 리눅스 및 유닉스 계열 운영체제에서 특정 시간 간격마다 자동으로 명령어나 스크립트를 실행하기 위해 사용되는 스케줄링 도구이다. 크론탭(Crontab) 파일에 작업을 등록하면 크론 데몬이 이를 해석하고 일정에 맞춰 작업을 수행한다. 크론잡의 작업 시간이 어떻게 설정되고 동작하는지에 대해 알아보자.크론식 (Cron Expression)크론식은 5개의 필드로 구성되며, 각 필드는 다음과 같은 의미를 가진다:분 (Minutes): 0부터 59까지시 (Hours): 0부터 23까지일 (Day of Month): 1부터 31까지월 (Month): 1부터 12까지요일 (Day of Week): 0부터 7까지 (0과 7은 일요일)예를 들어, */5 * * * *라는 크론식은 매 5분마다 작업..
-
스프링 배치 반복 및 오류 제어Spring/Spring Boot 2022. 3. 30. 23:39
Repeat 스프링 배치에서 반복을 종료할 것인지 여부를 결정하는 세가지 항목 1. RepeatStatus 스프링 배치의 처리가 끝났는지 판별 위한 열거형 CONTINUABLE, FINISEHD 2. CompletionPolicy 정상 종료를 알리는데 사용. RepeatTemplate 의 iterate 메서드 안에서 반복을 중단할지 결정 3. ExceptionHandler 비정상 종료를 알림. RepeatCallback 안에서 예외 발생시 해당 핸들러를 참조해서 예외를 다시 던질지 여부 결정 RepeatContext - 일시적으로 사용할 필요가 있는 데이터를 저장 tasklet 을 수행하다가 예외가 발생했다고 가정하자. 이 때 ExceptionHandler를 설정했다면 반복여부를 결정 할 수 있다. 설정..
-
Deployment의 파드가 서비스의 대상이 되려면DevOps/Kubernetes 2022. 3. 30. 23:37
Kubernetes 환경에서 특정 파드를 서비스 대상으로 지정하려면, Service와 Pod 간의 라벨 셀렉터 설정이 정확히 일치해야 한다. 이를 통해 Service는 지정된 라벨을 가진 Pod로 트래픽을 라우팅할 수 있다.Service 정의 예제아래는 Kubernetes Service의 YAML 정의 예제이다. 이 Service는 특정 라벨을 가진 Pod를 대상으로 트래픽을 전달한다.apiVersion: v1kind: Servicemetadata: labels: app: test-app name: test-app namespace: defaultspec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: ..
-
SubscribeOn , PublishOnSpring/Spring 2021. 12. 23. 10:28
1. SubscribeOn 와 PublishOn이 혼용된 코드 1.1. Code 1 2 3 4 5 6 Flux.range(1,5) .publishOn(Schedulers.newSingle("pub1")) .map(i -> i * 10) .subscribeOn(Schedulers.newSingle("sub1")) .log() .subscribe(); cs subscribeOn 이후에 log() 를 봐보자. 어떤 쓰레드에서 log() 가 실행될까? 리엑터 공식 문서를 보면 subscribeOn을 호출한 객체를 구독할 때는 해당 스트림 전체가 해당 스케쥴러로 다 바뀐다고 하였다. 따라서 "sub1" 이라는 쓰레드에서 실행이 될까? 아니면 그 위에 publishOn에 의해 "pub1" 이라는 쓰레드에서 실행 될..