프로젝트/선착순 쿠폰 발급 시스템
-
Database local dev환경 구성하기(postgreSQL with Docker)프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 29. 00:01
개요 별다른 설정 없이도 Spring Boot가 지원하는 in-memory H2 Database 덕분에 JPA를 활용하여 API요청 테스트를 수행할 수 있었습니다. local 환경에는 h2 database를 dev환경에는 postgreSQL로 구성해 보고자 합니다. application-infra.yml 설정 --- spring: profiles: active: on-profile : local h2: console: enabled: true jpa: database-platform: org.hibernate.dialect.H2Dialect hibernate: ddl-auto: none datasource: hikari: connectionTimeout: 30000 idleTimeout: 60000 ma..
-
회원 도메인 모듈 만들기프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 27. 00:01
Domain 모듈 생성 settings.gradle.kts에 다음과 같은 구문을 추가합니다. include("domain") domain이라는 이름을 가지는 Directory를 추가하고 gradle을 refresh 합니다. domain 모듈에는 순수 Kotlin만 다루게 됩니다. Jpa Entity가 아닌 순수 회원 객체 Jpa Repository가 아닌 Repository Interface 제공 member entity sample code package com.demo.domain.member.entity class Member( val id: String, val password: String, val nickName: String, val fullName: String, ) member repos..
-
gradle build 속도 개선하기프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 25. 00:01
개요 project가 잘 build 되는지 , 테스트는 제대로 수행되는지 ./gradlew build 명령어를 수행하곤 합니다. 하지만 매번 오래걸리는 빌드를 더 빠르게 수행할 수 없을까? 에서 출발해서 속도를 개선해보고자 합니다. 현재 build time BUILD SUCCESSFUL in 49s 49초가 걸렸습니다. 현재 프로젝트는 멀티모듈구조에 kafka embedded test 한건이 존재했습니다. IntelliJ IDEA로 build 하기 If you have a pure Java or a Kotlin project, it is sometimes better to select IntelliJ IDEA for building a project. IntelliJ IDEA supports the in..
-
gradlew build 에러 해결 과정 기록프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 24. 00:01
개요 평소 작업하던 다른 컴퓨터와 다르게 macbook으로 git clone을 받고 gradlew build를 수행했을 때 에러 해결과정을 담아보고자 합니다. Permission Deney junuu@aideulnalaui-MacBookPro coupon-system % ./gradlew build zsh: permission denied: ./gradlew 권한이 없어서 나오는 에러입니다. 다음을 통해 해결하였습니다. chmod +x gradlew org.gradle.wrapper.GradleWrapperMain junuu@aideulnalaui-MacBookPro coupon-system % ./gradlew build 오류: 기본 클래스 org.gradle.wrapper.GradleWrapperMa..
-
Docker로 Spring + Kafka 실행하기프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 22. 00:01
Docker로 카프카 서버 띄우기 사전조건으로 docker와 docker-compose가 이용가능해야 합니다. docker-compose.yml 파일 작성하기 #docker-compose.yml version: '2' services: zookeeper: container_name: local-zookeeper image: wurstmeister/zookeeper ports: - "2181:2181" kafka: container_name: local-kafka image: wurstmeister/kafka depends_on: - zookeeper ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 KAFKA_ADVERTISE..
-
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..