Spring(22)
-
[Spring] WebServer와 Servlet
Spring Webflux와 함께 사용할 WebServer, WAS(Web Application Server)을 선정하면서 정리한 내용입니다. Web Server, Servlet Container에 대한 설명과 기능과 다양한 종류의 WebServer, WAS(Web Application Server)를 비교하여 정리했습니다. WebServer 란?웹 서버는 클라이언트(일반적으로 웹 브라우저)로부터 HTTP 요청을 받아들여, 그 요청에 따라 HTML 페이지나 다른 형태의 파일(예: 이미지, CSS, JavaScript 등)을 클라이언트에게 전달하는 소프트웨어입니다. 웹 서버는 주로 웹 애플리케이션의 정적 콘텐츠(HTML, CSS, JS, 이미지 파일 등)를 제공하는 역할을 합니다.Web Server의 주..
2024.08.27 -
[SpringBoot] Transaction 재시도 처리(@Retryable, RetryTemplate)
SpringBoot에서 Deadlock 처리를 위해서 Deadlock 발생시 재시도 처리를 진행하는 과정을 정리한 문서입니다.재시도 방법 3가지@Retryable 어노테이션Spring RetryTemplate 사용수동 구현1. @RetryableSpring Framework는 @Retryable 어노테이션을 통해 간단하게 재시도 로직을 구현할 수 있는 기능을 제공. 이 방법은 코드의 가독성을 높이고, 재시도 로직을 쉽게 설정할 수 있다1. Spring Retry 의존성 추가spring-batch의 경우는 spring-retry를 포함하고 있기때문에 의존성 추가가 필요없음. org.springframework.boot spring-boot-starter-aop ..
2024.08.21 -
[Spring] open-in-view 설정 이슈
해당 글은 Spring 의 open-in-view 설정에 관한 이슈 해결 내용을 정리했습니다. ReadOnly transaction과 Write transaction이 함께 사용되면 경우, 데이터베이스 연결이 유지되어 다음 트랜잭션 동작시 ReadOnly transaction의 Connection을 그대로 사용하여 에러가 발생했습니다. Open in View란?Spring 프레임워크에서 "Open in View"는 데이터 액세스와 관련된 특별한 패턴입니다. 특히 Spring MVC와 같은 웹 애플리케이션에서 Hibernate와 같은 ORM(Object-Relational Mapping) 도구를 사용할 때 자주 사용됩니다. 이 패턴의 주 목적은 웹 요청이 끝날 때까지 영속성 컨텍스트를 열어 두는 것입니다..
2024.08.16 -
[Spring Batch] DB 동적 라우팅
다중 데이터베이스 환경에서의 하나의 EntityManagerFactory를 사용하면서 동적으로 데이터베이스를 Injection 하는 방식을 정리한 글입니다.spring-batch의 JpaPagingItemReader, JpaPagingItemReaderBuilder를 재설계하고, 동적으로 DataSource 를 Injection 할 수 있게 만들었습니다.1. Database Enum사용하는 데이터 목록을 정의public enum DatabaseEnum { DB1, DB2, DB3}2.RoutingDatabaseConextHolderTheadLocal 에 Database 정보를 담아 관리public class RoutingDatabaseContextHolder { private sta..
2024.07.29 -
[SpringBoot] Cache(캐시)
해당 문서는 SpringBoot 에서 Cache에 대한 설명과 적용하는 방법을 작성한 글입니다. Cache 및 Redis에 대한 설명: https://hunstory.tistory.com/94 Redis Cache해당 글은 Cache와 Redis에 대해서 정리한 글입니다.캐시란?데이터의 원래 소스보다 더 빠르게 효율적으로 엑세스할 수 있는 임시 데이터 저장소, 저장 공간이 작고 비용이 싼 대신 빠른 성능을 제hunstory.tistory.com 1. Local Cache vs Global Cache[ Local Cache ]서버 내에서만 사용되는 캐시로, 내부 Resource를 이용한다.속도가 빠르다.다른 서버와 데이터 공유가 어렵다.[ Global Cache ]여러 서버에서 Cache DB에 접근하..
2024.07.19 -
[SpringBoot] SSE(Server Sent Event)
해당 글은 SpringBoot MVC에서 비동기설정 및 SSE(Server Sent Event)를 적용하는 방법을 정리한 글입니다. SSE는 SpringBoot Webflux에서 사용하길 권장하나 MVC 환경에서도 필요한 경우 사용이 가능하기에 정리했습니다.SSE 란?Server-Sent Events (SSE)는 클라이언트-서버 간의 통신에서 서버가 클라이언트로 데이터를 지속적으로 푸시할 수 있는 단방향 통신 방식입니다. 이는 HTML5 표준의 일부로, 웹 애플리케이션이 서버에서 자동으로 데이터 업데이트를 수신할 수 있도록 설계되었습니다. SSE는 HTTP 프로토콜을 사용하며, 주로 실시간으로 자주 업데이트되는 데이터를 클라이언트에 전달할 때 사용됩니다. 예를 들어, 뉴스 피드, 주식 가격, 채팅 메시지..
2024.07.18 -
[Batch] Spring batch Job API 호출
Spring batch 서버에서 Job을 API로 호출하는 방법을 정리했습니다. 사용범위환경 별 API 호출을 통한 통합 테스트대부분 배치서버는 외부 호출을 막고 있기 때문에 로컬테스트 용도로 사용외부호출이 가능하거나 인스턴스 접근이 가능하면 curl 등으로 호출 Config 구성Job parameterJobBuilderFactoryJobMemberExecutionListenerJobExecutionListener 구현체를 만들어 사용해야한다.JobParameterIncrementAPI 호출 시 회원별 분기 처리같은 회원 중복 호출 시 고유값이 중복으로 들어오면 에러발생같은 파라미터로 배치를 중복생성 할 수 없음Step@Slf4j@RequiredArgsConstructor@Configurationpubl..
2024.06.27 -
[Spring] Kafka consumer multiple group 설정
Kafka를 사용하다보면 여러개의 Topic을 컨슘하고 있는 서버에서 Topic과 Consumer Group을 N:N 으로 구성해야하는 상황이 생길 수 있습니다. Topic과 Consumer Group을 N:N으로 구성하기 위한 환경설정이 필요합니다. application.yml 설정 시 옵션과 consumer group을 여러개 설정하기 위한 방법을 정리했습니다. Kafka란?Kafka는 Apache Kafka의 줄임말로, 분산형 스트리밍 플랫폼입니다. Kafka는 주로 실시간 데이터 스트리밍을 처리하고, 대규모 데이터를 효율적으로 전달 및 관리하기 위해 사용됩니다.Kafka의 주요 개념분산형 시스템:Kafka는 여러 서버로 이루어진 클러스터에서 동작하며, 데이터를 안전하게 분산 저장하고 처리할 수 있..
2024.06.20