프로젝트
-
kafka 모듈 구성하기프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 20. 00:01
git repo에 모든 코드가 존재합니다. https://github.com/Junuu/coupon-system GitHub - Junuu/coupon-system: 선착순 쿠폰 발급 프로젝트 선착순 쿠폰 발급 프로젝트. Contribute to Junuu/coupon-system development by creating an account on GitHub. github.com Kafka 디렉터리 만들기 kafka 디렉터리를 만들고 settings.gradle.kts에 include를 추가합니다. include("kafka") 이후 gradle refresh Kafka 모듈에 의존성 추가 kafka 모듈의 build.gradle.kfs import org.springframework.boot.grad..
-
Eventual Consistency란?프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 19. 00:01
Eventual Consistency란? 번역하자면 최종적 일관성이라는 의미입니다. 간단히 말하면 "고객이 한번 실행했던 기능은 반드시 처리되어야 한다"라는 것입니다. 10분이 지나던 며칠이 지나던 지금 당장은 아니더라도, 언젠가 반드시 된다는 보장을 해줍니다. 유저의 주문, 결제 시나리오 예시 유저가 주문을 발행했습니다. 재고가 차감됩니다. 결제가 시도됩니다. 구매 주문이 데이터베이스에 저장됩니다. 재고 차감이 확정됩니다. 결제가 확정됩니다. 이때 결제가 확정되다가 실패가 되면 주문이 실패했다고 보아야 할까요? 이렇게 되면 결제의 실패가 주문의 실패로 이어지게 되고 비즈니스 관점에서 판매자는 판매의 기회를 잃게 됩니다. 즉, 주문이 전달되면 언젠가(미래 특정 시점) 해당 서비스를 책임지고 결제를 처리해..
-
서킷 브레이커 구성하기프로젝트/선착순 쿠폰 발급 시스템 2023. 2. 28. 00:01
개요 Client 모듈을 생성 외부 서버를 호출하는 테스트를 수행해 보았습니다. 하지만 외부 서비스에 장애가 발생하면 어떻게 될까요? 내부 서비스까지 같이 장애가 전파되어 버릴 수 있습니다. 이를 막는 방법중 하나가 서킷 브레이커입니다. 서킷 브레이커란? 장애가 특정 임계값에 도달하면 오류와 함께 반환하는 간단한 아이디어입니다. 메서드 호출이 실패할 때 장애가 연쇄적으로 발생하는 것을 방지하고 실패한 서비스를 복구할 수 있는 시간을 제공합니다. 서킷 브레이커 적용하기 1. build.gradle.kts 수정 //Circuit Breaker implementation("io.github.resilience4j:resilience4j-spring-boot2:1.7.0") //kotlin-logging imp..
-
Client 모듈 구성하기프로젝트/선착순 쿠폰 발급 시스템 2023. 2. 27. 00:01
Client 모듈이란? 우리가 서버를 구성하다 보면 또 다른 서버로부터 데이터를 요청받고 처리해야 할 수 있습니다. 이때 Rest 방식으로 API를 호출하기 위해서 RestTemplate, WebClient, FeignClient 등이 있습니다. 이렇게 외부 서비스를 호출하기 위해서 Client 모듈을 두고 해당 모듈에 다른 서버로부터 데이터를 요청받고 처리하는 코드를 작성하고자 합니다. 이렇게 되면 외부 호출건에 대한 수정은 Client 모듈에서 이루어지게 됩니다. Client 모듈 구성하기 1. settings.gradle.kts 수정 //추가 include("client") 2. 프로젝트 root에 client 디렉터리 생성 및 gradle refresh 3. buidl.gradle.kts에 의존성..
-
코틀린 멀티모듈 프로젝트 구성하기프로젝트/선착순 쿠폰 발급 시스템 2023. 2. 23. 00:01
목표 Kotlin DSL Gradle을 사용하여 멀티 모듈을 구성하는 프로젝트를 만들어보고자 합니다. 멀티 모듈이란? 멀티모듈에 대해서는 다음글에서 다룹니다. - 우아한 멀티모듈 by 권용근님 - 실전! 멀티 모듈 프로젝트 구조와 설계 - 김대성님 간단하게 하나의 Spring 프로젝트에서 여러 디렉터리 구조를 가지고 서버를 실행시킬 수 있도록 구성할 수 있습니다. 개인적인 공부용으로 사용하는 프로젝트이며 envers, executor등은 각각 실행될 수 있는 하나의 SpringApplication으로 구성되어 있고, core같은 모듈은 공통적으로 사용합니다. Spring Initializr를 통해 프로젝트 만들기 1. Spring Initializr 접속 2. 프로젝트 세팅 Gradle Project K..
-
SpringBatch Cursor 기반 vs Paging 기반프로젝트/스프링 배치 튜토리얼 2023. 2. 7. 00:01
개요 SpringBatch의 ItemReader에 Cursor기반, Paging 기반이 존재한다는 것을 알게 되었습니다. 각각은 어떤 것인지 찾아보고 더 적합한 것을 적용해보고자 합니다. Spring Batch의 ItemReader Spring Batch의 Chunk Tasklet은 아래와 같은 과정을 통해 진행됩니다. Spring Batch의 ItemReader는 데이터를 읽어들입니다. 꼭 DB의 데이터만을 이야기하는 것은 아니며 File, XML, JSON 등 다른 데이터 소스를 배치 처리의 입력으로 사용할 수 있습니다. 보통 Spring Batch에서 쓰이는 itemReader로서 가장 대표적인 구현체로 JdbcPagingItemReader가 있습니다. 해당 클래스의 계층 구조는 다음과 같습니다. ..
-
Spring Batch 프로젝트 생성하기 - Spring Boot 2.7.5프로젝트/스프링 배치 튜토리얼 2023. 2. 5. 00:01
프로젝트 생성하기 Generate로 프로젝트를 생성하고 압축을 풀어줍니다. Intellij에서 프로젝트 시작하기 파일 -> 열기 -> 압축 푼 프로젝트 경로 -> build.gradle.kts 열기 Simple Job 생성하기 @SpringBootApplication @EnableBatchProcessing class BatchApplication fun main(args: Array) { runApplication(*args) } Spring Batch 기능 활성화 어노테이션 EnableBatchProcessing을 추가합니다. job 패키지 성상 및 SimpleJobConfiguration 파일 생성 import org.springframework.batch.core.Job import org.spr..