Spring BatchJob Parameters - 배치의 운명을 결정짓는 통제 변수Job Parameters란?정의: 배치 작업에 전달되는 입력 값역할: 배치가 어떤 조건에서, 어떤 데이터를 다룰지를 결정목적: 동적이고 유연한 배치 작업 실행Job Parameters가 필요한 이유1. 입력값 동적 변경웹 요청 기반 배치: 요청마다 새로운 Job 실행프로퍼티 한계: 앱 시작 시 한 번 주입되는 정적 값Job Parameters 장점: 실행 중 동적 값 변경 가능2. 메타데이터 관리Spring Batch 메타데이터: JobRepository에 모든 값 기록Job 인스턴스 식별: 재시작 처리 가능실행 이력 추적: Job과 Step의 실행 정보 관리프로퍼티 한계: 메타데이터로 기록되지 않음Job Paramet..
Spring BatchSpring Batch가 제공하는 영역1. 핵심 실행 컴포넌트Job과 StepJob: 배치 작업의 최상위 개념으로, 하나 이상의 Step으로 구성Step: 실제 배치 작업을 수행하는 단위로, Job의 구성 요소JobLauncherJob을 실행하고 실행에 필요한 파라미터를 전달하는 역할배치 작업 실행의 시작점동기/비동기 실행 방식 지원JobRepository배치 처리의 모든 메타데이터를 저장하고 관리하는 핵심 저장소Job과 Step의 실행 정보(시작/종료 시간, 상태, 결과 등)를 기록배치 작업의 모니터링이나 문제 발생 시 재실행에 활용ExecutionContextJob과 Step 실행 중의 상태 정보를 key-value 형태로 담는 객체Job과 Step 간의 데이터 공유나 Job 재..
5.1 트랜잭션5.1.1 MySQL에서 트랜잭션MyIsam은 트랜잭션을 지원하지 않고, InnoDB는 지원함.데이터가 바뀌면 완전히 실행되거나 실행되지 않거나 자체가 트랜잭션5.1.2 주의사항트랜잭션 범위를 너무 크게 가져가지 말자5.2 MySQL 엔진의 잠금스토리지 엔진이 아닌 MySQL 엔진 자체의 락도 존재테이블의 구조를 잠그는 메타데이터 락사용자의 필요에 맞게 사용할 수 있는 네임드 락5.2.1 글로벌 락글로벌 락FLUSH TABLES WITH READ LOCK 명령으로 모든 테이블에 읽기 잠금을 거는 것DDL (테이블 구조 변경), DML (데이터 수정), 사용자 관리 같은 작업 전부 막힘데이터를 안정적으로 백업하려고 쓰지만, 락을 걸면 MySQL 전체가 멈추기 때문에 서비스 중단 위험이 있음그..
4. 아키텍처4.1 MySQL 엔진 아키텍처MySQL 서버는 머리 역할을 하는 MySQL 엔진과 손발 역할을 담당하는 스토리지 엔진으로 구분됨손과 발을 담당하는 스토리지 엔진은 핸들러 API를 만족하면 누구던 스토리지 엔진을 구현해서 MySQL 서버에 추가해요 사용 가능이번 장에서 MySQL 엔진과 기본으로 제공되는 InnoDB 스토리지 엔진, MyISAM 스토리지 엔진을 구분해서 학습4.1.1 MySQL의 전체 구조4.1.1.1 MySQL 엔진클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룸4.1.1.2 스토리지 엔진MySQL 엔진은 요처된 SQL 문장을 분석하거나 최적화하는 등 두뇌에 해당하는 처리를 수행스..
1. Netty? 누구세요Spring Cloud 2020.0.x 이후부터는 Eureka 서버가 기본적으로 톰캣(Tomcat)이 아닌 네티(Netty) 기반으로 동작한다고 한다. Netty라는 이름은 몇 번 들어봤지만, 정확히 어떤 기술인지, 왜 Eureka에서 사용하게 되었는지 궁금해졌다. 이를 바탕으로 Netty에 대해 학습한 내용을 정리해 본다.Netty란?Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크이다.주로 서버-클라이언트 통신에서 높은 성능을 제공하기 위해 사용된다.Netty의 주요 특징비동기 및 논블로킹 방식요청마다 스레드를 생성하지 않고 이벤트 루프(Event Loop)를 사용해 효율적으로 처리한다.대규모 요청을 동시에 처리하는 데 적합하다.경량 서버서블릿 컨테이너(Tomc..
Gateway Filterhttps://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard강의를 보고 학습했으며 3장 Gateway를 학습하고 느낀점을 정리해봤다.1 . Spring Cloud Gateway 필터에서의 exchange와 chainSpring Cloud Gateway에서 필터를 작성할 때, 람다식으로 exchange와 chain이라는 매개변수를 사용하는 코드를 자주 접하게 되었다. 이 두 객체가 무엇을 의미하며, 어떻게 주입되는지, 그리고 각각의 역할이 ..
말로만 듣던 동시성 문제 따닥을 직접 마주할 줄이야. 아래는 해결과정을 글로 남겨보았다.분산락 Codehttps://github.com/ttoklip/BackEnd/blob/main/src/main/java/com/api/ttoklip/domain/aop/filtering/SignupDistributedLockAspect.java BackEnd/src/main/java/com/api/ttoklip/domain/aop/filtering/SignupDistributedLockAspect.java at main · ttoklip/BackEnd사회초년생의 똑! 부러지는 독립을 위한 커뮤니티 플랫폼, 똑립 Backend 레포 🌳. Contribute to ttoklip/BackEnd development by ..
최근 Spring Transaction 전파에 대해 깊이있게 학습하며 예전 알림 문제를 어떻게하면 해결할 수 있을지 계속 고민이 들었다.과연 에전에 내가 한 방법이 정말 올바른 방법이였을까?2024.04.20 - [대외활동] - 알림기능, 문제의 시작 알림기능, 문제의 시작기존 서비스저희 게시판 서비스는 HoneyTip(꿀팁공유해요 게시판)과 HoneyTipComment(꿀팁공유해요 댓글)이 연관관계 매핑이 되어있습니다. HoneyTipComment는 Comment를 단일테이블 전략으로 상속받고 있습toychip.tistory.com 예제를 아주 간단하게 세팅해서 문제를 명확히 파악해보자. Entity/* Entity */@Getter@Entity@NoArgsConstructor(access = Acce..
전체 구조설치할 환경은 아래와 같다.컴퓨터에 직접 가상화 환경을 생성할 것이다. 지금 이렇게 진행하지만 추후에 AWS, NCP, GCP 등 다양한 퍼블릭 클라우드를 사용할 수 있다. 만약 퍼블릭 클라우드를 사용한다면, Guest OS 부분이 대체될 것이다.인프라 환경 설치Mac은 Viturl Box를 설치할 수 없다. Mac에서 사용할 수 있는 가상화 환경인 UTM을 다운로드하고, 거기서 Rocky Linux를 실행한다. Rocky Linux에 들어가서 Kubernetes Cluster를 설치하고 Pod를 확인한다. 나의 데스크탑에서 대시보드에 접속한다. UTM + Rocky linux 설치Rocky linux iso 설치https://dl.rockylinux.org/vault/rocky/9.2/isos..