Spring

Spring/Spring Batch

Spring Batch 3. Spring Batch Listener

Spring BatchSpring Batch Listener1) Listener 개요배치 실행의 주요 지점에 후킹하여 로깅, 모니터링, 예외 처리, 상태 저장을 주입하는 수단적용 지점 요약JobExecutionListener: Job 시작 전/후StepExecutionListener: Step 시작 전/후ChunkListener: 청크 시작/종료, 청크 오류ItemRead/Process/WriteListener: 아이템 단위 전/후, 오류핵심 포인트ItemReadListener.afterRead()는 read()가 null을 반환하면 호출되지 않음ItemProcessListener.afterProcess()는 process()가 null을 반환해도 호출됨ItemWriteListener.afterWrite..

Spring/Spring Batch

Spring Batch 2. JobParameter

Spring BatchJob Parameters - 배치의 운명을 결정짓는 통제 변수Job Parameters란?정의: 배치 작업에 전달되는 입력 값역할: 배치가 어떤 조건에서, 어떤 데이터를 다룰지를 결정목적: 동적이고 유연한 배치 작업 실행Job Parameters가 필요한 이유1. 입력값 동적 변경웹 요청 기반 배치: 요청마다 새로운 Job 실행프로퍼티 한계: 앱 시작 시 한 번 주입되는 정적 값Job Parameters 장점: 실행 중 동적 값 변경 가능2. 메타데이터 관리Spring Batch 메타데이터: JobRepository에 모든 값 기록Job 인스턴스 식별: 재시작 처리 가능실행 이력 추적: Job과 Step의 실행 정보 관리프로퍼티 한계: 메타데이터로 기록되지 않음Job Paramet..

Spring/Spring Batch

Spring Batch 1. 테스크릿 지향과 청크지향 처리

Spring BatchSpring Batch가 제공하는 영역1. 핵심 실행 컴포넌트Job과 StepJob: 배치 작업의 최상위 개념으로, 하나 이상의 Step으로 구성Step: 실제 배치 작업을 수행하는 단위로, Job의 구성 요소JobLauncherJob을 실행하고 실행에 필요한 파라미터를 전달하는 역할배치 작업 실행의 시작점동기/비동기 실행 방식 지원JobRepository배치 처리의 모든 메타데이터를 저장하고 관리하는 핵심 저장소Job과 Step의 실행 정보(시작/종료 시간, 상태, 결과 등)를 기록배치 작업의 모니터링이나 문제 발생 시 재실행에 활용ExecutionContextJob과 Step 실행 중의 상태 정보를 key-value 형태로 담는 객체Job과 Step 간의 데이터 공유나 Job 재..

Spring/Spring Cloud

Spring Cloud3. Netty

1. Netty? 누구세요Spring Cloud 2020.0.x 이후부터는 Eureka 서버가 기본적으로 톰캣(Tomcat)이 아닌 네티(Netty) 기반으로 동작한다고 한다. Netty라는 이름은 몇 번 들어봤지만, 정확히 어떤 기술인지, 왜 Eureka에서 사용하게 되었는지 궁금해졌다. 이를 바탕으로 Netty에 대해 학습한 내용을 정리해 본다.Netty란?Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크이다.주로 서버-클라이언트 통신에서 높은 성능을 제공하기 위해 사용된다.Netty의 주요 특징비동기 및 논블로킹 방식요청마다 스레드를 생성하지 않고 이벤트 루프(Event Loop)를 사용해 효율적으로 처리한다.대규모 요청을 동시에 처리하는 데 적합하다.경량 서버서블릿 컨테이너(Tomc..

Spring/Spring Cloud

Spring Cloud2. Spring Cloud Gateway Filter 정리

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이라는 매개변수를 사용하는 코드를 자주 접하게 되었다. 이 두 객체가 무엇을 의미하며, 어떻게 주입되는지, 그리고 각각의 역할이 ..

Spring/Spring Transaction

Spring Transaction 2. 스프링 트랜잭션 전파와 활용

스프링 트랜잭션 전파(Propagation)는 트랜잭션이 중첩되거나 여러 트랜잭션이 동시에 발생할 때, 이 트랜잭션들이 어떻게 상호작용할지를 결정하는 중요한 개념이다. HikariCP 커넥션 풀과 트랜잭션 관리스프링에서 트랜잭션을 다루는 경우, Hikari 커넥션 풀을 대부분 사용한다. 이때 반환되는 커넥션은 프록시 객체로 감싸져 있다. 프록시 객체의 주소는 매번 다르지만, 실제 물리적인 커넥션은 동일하다. 예를 들어, 두 개의 논리 트랜잭션이 동일한 물리 커넥션을 공유할 수 있다.중첩 트랜잭션중첩 트랜잭션은 하나의 트랜잭션이 진행 중일 때 또 다른 트랜잭션이 시작되는 상황을 의미한다. 이때 내부 트랜잭션이 외부 트랜잭션에 참여하는 것처럼 보이는 것이 기본 동작이다. 스프링에서는 이러한 동작을 통해 논리..

Spring/Spring Transaction

Spring Transaction 1. 스프링 트랜잭션 이해

스프링 프레임워크는 강력한 트랜잭션 관리 기능을 제공한다.트랜잭션 추상화: JDBC와 JPA의 차이스프링의 트랜잭션 추상화는 서로 다른 데이터 접근 기술(JDBC, JPA 등)에서 동일한 방식으로 트랜잭션을 관리할 수 있게 해준다.예를 들어, JDBC에서는 트랜잭션을 직접 제어해야 하지만, JPA에서는 EntityManager를 통해 트랜잭션을 제어한다.이러한 차이는 스프링이 제공하는 PlatformTransactionManager 인터페이스를 통해 해결된다.JDBC 트랜잭션 예시public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConn..

Spring/Spring AOP

Spring AOP 6. 포인트컷, 어드바이스, 어드바이저

항상 용어가 헷갈려서, 용어를 확실하게 정리하는 것이 중요하다. 포인트컷: 어디에 부가기능을 적용할지, 범위를 정하는 곳이다. 주로 클래스와 메서드 이름으로 필터링한다.어드바이스: 바로 전 글에서 작성했던 것 처럼 프록시가 호출하는 부가 기능이다.어드바이저: 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 포인트 컷을 직접 정의할 수도 있지만 스프링이 이미 만들어둔 구현체를 사용하면 편하다. 포인트컷은 정말 많은 포인트컷을 제공한다.1. NameMatchMethodPointcut: 메서드 이름을 기반으로 매칭, 내부에서는 PatterMatchUtils를 사용2. JdkRegexMethodPointcut: JDK 정규 표현식을 기반으로 포인트컷을 매칭3. TruePointcu: 항상 참..

Spring/Spring AOP

Spring AOP 5. ProxyFactory

저번 시간에 Proxy를 만들 때 JDK 동적 프록시를 사용할 때는 InvocationHandler를, CGLIB를 사용할때는 MethodInterceptor를 각각 구현했어야했다.매번 이렇게 다른 것을 해결해 주는 것이 ProxyFactory이다.팩토리 하나로 편리하게 동적 프록시를 생성할 수 있으며 프록시 패곹리는 인터펭이스가 있다면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB를 사용한다. ProxyFactory 흐름 스프링은 위와같은 인터페이스, 구체클래스일 때 부가 기능을 적용할 때 Advice라는 새로운 개념을 도입했다.개발자는 InvocationHandler나 MethodInterceptor는 Advice만 만들면 된다.프록시 팩토리를 사용하면 Advice를 호출하는 Inv..

Spring/Spring AOP

Spring AOP 4. 동적 프록시: JDK 동적프록시와 CGLIB

인터페이스 기반 프록시와 클래스 기반 프록시인터페이스 기반으로 필수로 생성할 때는, 기존 로직을 구현하고, 구현하는 곳에서 추가 기능을 사용하며 이를 스프링 빈에 등록해서 사용한다.클래스 기반 프록시는 부모를 상속받아 기존 로직을 오버라이드해서 사용했다. 결론적으로, 인터페이스가 없어도 클래스 기반의 프록시가 잘 적용된다.하지만 지금은 부가기능을 추가하려면, 추가할 기능 만큼 모든 프록시를 직접 생성해야하는 문제가 있다.이를 해결하기 위해 나온 것이 동적 프록시이다.  1. 리플랙션리플렉션은 클래스나 메서드의 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다.다만, 이 기술을 써서 동적프록시가 동작한다는 것을 이해하는 것이 중요하지 실제로 사용할 땐 정말 주의를 해야한다.만약 메서드 명을 잘..

토이 개발 스토리
'Spring' 카테고리의 글 목록