본문 바로가기

Spring23

[Spring] @TransactionalEventListener TransactionalEventListener@EventListener는 코드의 결합도를 낮추고 도메인 이벤트를 기반으로 유연한 구조를 만드는 데 유용하지만 트랜잭션을 사용하는 환경에서는 예상치 못한 문제가 발생할 수 있습니다. 다음과 같은 코드가 있다고 예를 들겠습니다. @Transactionalfun createOrder() { orderRepository.save(...) applicationEventPublisher.publishEvent(OrderCreatedEvent(...))}앞서 작성한 이벤트리스너에서 알아봤듯이 @EventListener는 동기적으로 실행됩니다. orderRepository.save()는 아직 커밋되지 않았지만 이벤트 리스너에서 이 해당 값에 접근하거나 관련 작업을.. 2025. 7. 23.
[Spring] EventListener Spring Event스프링 애플리케이션을 실행할 때 ApplicationContext가 초기화되고 서버가 동작하게 되는 과정에서 내부적으로는 굉장히 많은 이벤트가 순차적으로 발생합니다. 스프링 프레임워크는 기본적으로 다음과 같은 이벤트들을 발행함으로써 자체적으로 ApplicationContext의 라이프 사이클을 관리합니다. ContextRefreshedEvent: ApplicationContext가 초기화되거나 리프레시된 후(보통 context.refresh() 또는 애플리케이션 시작 시 발생)ContextStartedEvent: context.start() 가 호출될 때 발생ContextStoppedEvent: context.stop() 이 호출될 때 발생ContextClosedEvent.. 2025. 7. 10.
[Spring] SpringBoot 의 다중 요청 처리 이전 글에서 자바의 스레드와 스레드풀에 대해 다루며 스레드를 이용해 여러 작업을 동시에 처리하는 방법 그리고 스레드풀을 통해 효율적으로 스레드를 관리하는 방법에 대해 알아보았습니다. 이제 스레드와 스레드풀의 개념을 조금 더 확장해서 스프링 부트를 사용하면서 서버에서 여러 사용자의 요청을 동시에 처리하는 상황에 대해서 살펴보도록 하겠습니다.MVC출처위 이미지는 사용자의 요청이 서블릿을 통해 컨트롤러 그리고 서비스와 리포지토리로 전달된 후 다시 응답이 사용자에게 돌아가는 과정을 설명합니다. 사실 우리가 흔히 보는 MVC 구조는 한 사용자의 요청 흐름을 설명하는 데 중점을 둡니다. 하지만 실제 애플리케이션 환경에서는 많은 사용자가 동시에 요청을 보내며, 이러한 요청은 모두 서버에서 병렬로 처리되어야 합니다. .. 2024. 8. 22.
[Spring] Executable JAR JAR 출처 Executable JAR에 대해 알아보기 전에 먼저 JAR가 무엇인지 살펴보겠습니다. JAR는 Java ARchive의 약자로 여러 개의 자바 클래스 파일과 관련 리소스(텍스트, 이미지 등) 및 메타데이터를 하나의 파일로 압축하여 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷입니다. JAR 파일은 실제로 ZIP 파일 포맷으로 이루어져 있어 압축 파일의 형태로 제공되며 이를 통해 효율적인 배포와 관리를 할 수 있습니다 MANIFEST JAR 파일의 기본 메타데이터를 포함하는 파일로 JAR 파일의 루트에 위치하며 JAR 파일에 포함된 리소스 및 클래스에 대한 정보를 제공합니다. JAR 파일 생성시 자동으로 MANIFEST.MF 파일이 생성되며 항상 ME.. 2024. 4. 4.
[Spring] Spring Batch Job 등록부터 실행까지(1) 들어가기 전 이전 글 에서 Spring Batch 실행을 위한 프로젝트 환경 구성 및 예제 Job 을 작성 후 실행해 봤습니다. 그렇다면 Spring Batch 는 Job 을 어떤 식으로 생성하고 실행시키는지에 대해 이번 글을 통해서 알아 보도록 하겠습니다. Step 다음과 같이 Tasklet 으로 구성된 Step 을 Bean 으로 등록합니다. @Bean public Step step(JobRepository jobRepository, PlatformTransactionManager transactionManager) { return new StepBuilder("step1", jobRepository) .tasklet(tasklet(), transactionManager) .build(); } 먼저 S.. 2024. 1. 22.
[Spring] Spring Batch 시작하기 01 Spring Batch 를 학습하기 위한 시리즈 글로 Spring Batch 5.1.0 버전을 기반으로 작성합니다. 프로젝트 환경 Spring Batch 를 실습하기 위해 먼저 프로젝트부터 생성하겠습니다. 다음과 같은 버전으로 프로젝트를 구성했습니다. Gradle(8.2.1) Spring Boot(3.2.1) Java(17) MySql(8.0.23) 또한 실습에 필요한 의존성은 다음과 같습니다. Spring-Data-JPA(3.2.1) Spring-Batch(5.1.0) Lombok(1.18.30) MySql-Connector(8.1.0) 프로젝트 생성 시 Spring Initializr 를 통해 필요한 의존성을 선택하여 생성하면 build.gralde 파일은 다음과 같습니다. plugins { id '.. 2024. 1. 14.
[Spring] @Transactional 속성 @Transactional 스프링은 @Transactional 어노테이션을 활용하여 트랜잭션 관리를 단순화합니다. 이는 트랜잭션의 관리를 설정이나 어노테이션과 같은 외부 수단을 통해 선언하는 방식인 선언적 트랜잭션(Declarative Transaction) 방식 중 하나입니다. 스프링은 선언적 트랜잭션을 처리하기 위해 Spring AOP를 활용하여 적용 대상 로직 전후에 트랜잭션 관련 기능을 삽입함으로써 핵심 비즈니스 로직과 트랜잭션 관리를 분리할 수 있습니다. 동작 스프링에서는 트랜잭션을 관리하기 위해 PlatformTransactionManager 이라는 추상화된 인터페이스를 제공합니다. @Transactional 이 적용된 메소드가 호출될 경우 트랜잭션을 시작하고 실행 결과에 따라 Commit 또.. 2023. 12. 24.
[Spring] Spring Batch란? 최근 회사 프로젝트에서 스프링 배치를 활용하여 모바일 Push 알림 관련 배치/온라인 작업을 진행했습니다. 비교적 간단한 작업이라 큰 어려움은 없었지만 처음 사용해보는 스킬이기 때문에 공부용으로 해당 글을 작성하게 됐습니다. Batch Application 배치 애플리케이션이란 대량의 데이터를 처리하거나 반복적인 작업을 수행하는 목적을 가지는 애플리케이션을 의미합니다. 주기적으로 반복 되는 작업을 자동으로 수행하며 일련의 단계로 구성되어 있는 작업들을 수행합니다. 위와 같은 작업들은 배치 애플리케이션으로 따로 분리해서 관리해야 하는데는 다음과 같은 중요한 이유가 있습니다. 일반적으로 사용되는 웹 애플리케이션은 실시간으로 사용자와 상호 작용 하기 위한 비즈니스 로직들을 수행합니다. 이를 위해 네트워크 I/.. 2023. 12. 18.
[Spring] Spring Security Authentication이란? Authentication public interface Authentication extends Principal, Serializable { Collection 2023. 12. 10.