개-발/Java + Spring + Kotlin

problem배치의 결과에 따라(특정조건) 배치를 반복 종료 할 때가 있다.  특정 조건에 따라 재시도(Retry) / 건너뛰기(Skip) 할 수 있다.solutionRepeat복잡한 청크 완료 조건:  기본적인 청크 크기 외에 다른 조건에 따라 반복을 제어할 수 있다.커스텀 반복 로직이 필요한 경우: 특정 작업을 여러 번 반복해야 할 때, 반복 횟수나 종료 조건을 직접 정의할 수 있다. 에러 처리 및 재시도 로직: 작업 중 오류가 발생했을 때(특정 조건에 충족하지 못했을 때), 일정 횟수만큼 재시도하거나 특정 조건이 충족될 때까지 반복하도록 설정할 수 있다. 스프링 배치는 RepeatTemplate 기본으로 제공하여 기능을 구현 시킬 수 있다.RepeatTemplate 인터셉터처럼 step 전 후에 적..
regex 패키지 클래스자바에서 java.util.regex 패키지를 사용하여 더 효율적인 정규표현식을 사용 할 수 있다. 패키지 안의 클래스는 주로 Pattern 클래스와 Matcher 클래스가 사용된다.이들 정규식 클래스의 장점으로는 정규식을 Pattern 객체로 미리 컴파일 해둘수 있어서 처리 속도가 좀 더 빠르고, 매칭된 데이터를 좀더 상세히 다룰 수 있다.Pattern 클래스문자열을 정규표현식 패턴 객체로 변환해주는 역할을 한다.이때 문자열을 정규식 문법에 알맞게 구성해주어야 한다. 그렇지않으면 예외(Exception)이 발생하게 된다.Pattern 클래스는 일반 클래스처럼 공개된 생성자를 제공하지 않는다. 그래서 정규식 패턴 객체를 생성하려면 compile() 정적 메소드를 호출해야 한다.이렇..
정규표현식이란정규표현식(Regular Expression)이란 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것으로, 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.문자열 사용(생성)에 제약(검증)을 둘때, 특정 패턴을 통해 검증을 할 수 있다예) 전화번호, 주민등록번호, 이메일기호기호설명예제.- 임의의 문자 1개 ^- 문자의 시작^a : a로 시작하는 단어- [^] 괄호 안에 있다면 제외 [^a] : 첫번째 a를 제외 (단일 문자)- ^[] 괄호 밖에 있다면 시작 문자^[a] : 첫번째 문자가 a인 단어^a : apple[^a] : apple -> p p l e $- 특정 문자로 끝나는 단어 a$$a : banana[]- 괄호 안에 특정 문자 확..
목표분산 시스템으로 구성 되어있는 각 서비스에 이벤트를 발행하고각 서비스의 데이터의 일관성을 보장한다. 구성도- 주문 서비스 주문을 생성하고 결제가 완료되면 주문 생성 이벤트를 발행한다.- 재고 서비스 주문 완료된 상품들의 재고를 차감 한다- 배송 서비스 주문 완료된 상품들을 배송 시킨다고려사항주문이 생성되면 반드시 재고를 지우고 배송을 처리 해야 한다.그런데카프카에 이벤트 발행이 불가능 하다면 ?결제 API에서 실패 한다면 ?주문 생성이 실패 한다면 ?위 사항들로 인해 주문은 생성되지 않을 수 있다.또, 모든 사항에 주문을 실패하게 해서 처음부터 주문을 다시 하게 만든다면 그것은 서비스에 대한 신뢰하락으로 이어질 것이다.Transcation OutBox Pattern 개념분산시스템의 데이터 정합성을 ..
이벤트 발행을 보장하는 방법Event Driven Architecture 에서의 이벤트 발행을 보장하는 방법은 여러가지 있다.MSA로 설계된 분산시스템 에서는 데이터의 일관성을 유지 하는것은 매우 중요하다.아웃박스 패턴은 서비스 간의 데이터를 최소 한번 이상 전달하여두 서비스 간의 데이터의 정합성을 목표로 한다.멱등성최소 한번 이상 전달 하더라도 데이터가 동일 해야 한다. 위 말을 들으면 멱등성 이라는 것이 떠오를 것이다.그러므로 데이터가 중복 처리 되더라도 같은 결과를 얻을 수 있게멱등성을 고려하는 것이 중요하다.  목표 - 데이터의 일관성 메시지 손실 방지: 아웃박스 패턴은 로컬 트랜잭션을 통해 작업의 원자성을 보장하고                이벤트를 데이터 베이스에 저장하여, 전송 과정에서 발생..
JDK Dynamic Proxy 와 CGLib Dynamic Proxy와 CGLib은 모두 런타임 위빙 방식이며 프록시 패턴으로 동작한다. 따라서 메서드 실행 시에만 위빙이 가능하다. 그래서 Dynamic Proxy와 CGLib를 사용하는 스프링 AOP도 메서드 실행 조인포인트만 지원한다.위빙 이란 ?위빙(Weaving)은 AOP(Aspect-Oriented Programming)에서 사용되는 중요한 개념으로, 어드바이스(Advice)와 타겟 객체 사이에 관점 지향 기능을 적용하는 프로세스를 의미합니다. 클래스 로딩 시점이나 프록시 객체 생성 시점에, AOP 프레임워크가 바이트코드를 수정하여 어드바이스를 적용하는 방식입니다. 이 방식은 JDK Dynamic Proxy나 CGLIB Dynamic ..
트랜잭션하나의 작업단위로 묶어 실행 시킨다. 트랜잭션은모든 작업을 완료 (commit) / 모든 작업을 무효화 (rollBack)단 두가지만 가능해야 한다.원칙트랜잭션에는 4가지 원칙이 있다.원자성 (Atomicity)트랜잭션은 원자적인 단위로 간주된다.트랜잭션에 속한 모든 연산은 전체가 성공하거나 전체가 실패하는 것만 보장한다.트랜잭션이 동작 중 어떤 연산이 실패하면 모든 상태가 이전으로 돌아간다(rollback). 일관성 (Consistency)트랜잭션의 실행 전후에 데이터베이스는 일관된 상태여야 한다. 은행 A 계좌에서 돈을 인출 한다 B 계좌로 돈이 입금 된다  쇼핑몰 고객이 A상품을 구매한다A상품은 재고가 차감 된다   고립성 (Isolation)여러 트랜잭션이 동..
problem CICD 를 하다가 application.properties 관리를 서버에서 was로 빌드때 항상 복사해 주는 번거로움이 있었다. 번거로움이라고 하기엔 조금 그렇고.... 더 보안에 신경 쓰려면 이렇게 관리하는게 맞지만 조금 더 간편한 방법을 찾다가 jasypt 라이브러리를 찾았다. solution Jasypt Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works. 개발자가 암호화 작동 ..
imSoo
'개-발/Java + Spring + Kotlin' 카테고리의 글 목록