프로젝트/선착순 쿠폰 발급 시스템
-
Kotlin Jpa Auditing - Entity 수정, 생성기간 저장프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 24. 00:01
BaseEntity 정의 @MappedSuperclass @EntityListeners(AuditingEntityListener::class) abstract class BaseEntity { @CreatedDate @Column(nullable = false, updatable = false) var createdAt: LocalDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()) @LastModifiedDate @Column(nullable = false) var modifiedAt: LocalDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())..
-
Kotlin MapStruct 사용하기프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 21. 00:01
MapStruct란? 컴파일 시 매핑 코드를 생성하며 Java Bean 간의 매핑을 단순화하는 Java 기반 코드 생성도구입니다. MapStruct를 사용하면 객체 간 데이터 매핑을 위해 boilerplate code를 작성할 필요가 없어집니다. ModelMapper와의 차이점 reflection을 사용하여 객체 간의 필드를 매핑하는 Java 기반 코드 생성도구입니다. 컴파일 시 매핑 코드를 생성하지 않으며, reflection을 사용하기 때문에 MapStruct보다 속도가 느릴 수 있습니다. Kotlin DSL Gradle MapStruct 적용 plugins { kotlin("kapt") version "1.7.10" } subprojects { apply(plugin = "kotlin-kapt") ..
-
Spring Data Redis TTL설정하기프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 20. 00:01
TTL이란? 컴퓨터 네트워킹 및 데이터베이스 시스템에서 사용되는 용어인 "Time To Live"의 약자입니다. 데이터 레코드 또는 네트워크 패킷이 삭제되거나 만료된 것으로 간주되기 전에 존재할 수 있는 시간을 나타냅니다. 예를 들어, Redis 데이터베이스에서 키에 대한 TTL 값을 설정하면 지정된 시간이 경과한 후 해당 키가 데이터베이스에서 자동으로 삭제되도록 할 수 있습니다. 이는 메모리 사용량을 관리하고 오래되거나 오래된 데이터가 데이터베이스에서 자동으로 제거되도록 하는 데 유용합니다. 네트워킹에서 TTL은 패킷이 삭제되기 전에 패킷이 통과할 수 있는 최대 홉(라우터) 수를 지정하는 패킷의 IP 헤더에 있는 필드입니다. 패킷이 통과하는 각 라우터는 TTL 필드를 1씩 감소시키며, TTL 필드가 0..
-
OpenAPI Specification으로 API-First 개발하기프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 18. 00:01
개요 OpenAPI Specification 3.0을 기준으로 문서의 스펙을 작성하고 이를 토대로 문서와 코드를 생성해보고자 합니다. 이를 위한 여러 가지 개념들을 파악하고 Swagger RestDocs등과는 어떻게 다른지 알아보고자 합니다. 더 나아가서 OpenAPI Specification으로 문서와 코드를 만들어봅니다. OpenAPI Specification이란 무엇일까? 공식문서는 다음과 같이 말합니다. OAS는 HTTP API에 대한 프로그래밍 언어에 독립적입니다. 컴퓨터와 사람 모두 이해할 수 있으며 최소한의 구현 논리로 API 소비자가 이해할 수 있도록 상호작용할 수 있습니다. OpenAPI 와 Open API의 차이점 Open API는 단어 그대로 "개방된 API"입니다. 즉, 누구나 사용..
-
쿠폰 발급을 위한 Redis Set Document 읽기프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 6. 00:01
개요 목표는 1000개의 쿠폰을 미리 만들어두는 것이 목표입니다. 첫 번째로 RDB와 Redis 중 어떤 DB를 사용할지 고민했습니다. 레디스는 인메모리 DB이며 싱글스레드이기 때문에 성능과 동시성을 고려하여 레디스를 사용해보고자 합니다. 여기서 Set을 활용하여 미리 1000개의 쿠폰을 구성해 두고 pop 하면서 해결해보고자 하며 이를 위해 문서를 읽어보고자 합니다. Redis Sets Redis Set은 정렬되지 않은 고유한 문자들로 구성되어 있습니다. 예를 들어 user 123과 user 456이 좋아하는 책의 아이디를 set에 저장할 수 있습니다. > SADD user:123:favorites 347 (integer) 1 > SADD user:123:favorites 561 (integer) 1 ..
-
Embedded Redis 구성하여 테스트 수행하기프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 4. 00:01
개요 로컬에서 redis를 테스트하기 위해 embedded redis를 구축하고자 합니다. h2와 비슷하게 embedded redis를 활용하면 프로젝트를 수행하기 위해 특별한 작업 없이 git clone만 받으면 바로 로컬/개발을 할 수 있게 됩니다. 사용 기술 Spring Data Redis Redis를 JPA Repository를 사용하듯이 인터페이스 제공 Lettuce Redis Java Client Jedis는 업데이트가 거의 되지 않음 Embedded Redis H2와 같은 내장 Redis build.gradle.kts //redis implementation("it.ozimov:embedded-redis:0.7.2") implementation("org.springframework.boot:..
-
Event Driven Architecture란?프로젝트/선착순 쿠폰 발급 시스템 2023. 5. 1. 00:01
개요 회원과 쿠폰 도메인을 설계할 때 Event 기반으로 다른 도메인들, 모듈들과 결합도를 느슨하게 가져가려고 합니다. 지금 정리하는 부분은 "우아한 형제들 권용근님의 회원시스템 이벤트기반 아키텍처 구축하기"를 보면서 더 잘 이해하기 위해 글로 한번 정리해보고자 합니다. 이외에도 다른 글들을 조금씩 참조하긴 했지만 적다 보니 용근님의 글이 거의 90% 같습니다. 회원 시스템 이벤트 기반 아키텍처 구축과정 회원과 가족계정이라는 두 가지 도메인의 관계를 예시로 알아보고자 합니다. "회원의 본인인증이 초기화되는 경우 가족계정 서비스에서 탈퇴되어야 한다"라는 정책이 존재합니다. 이를 코드로 작성하면 다음과 같습니다. public void initCertificationOwn(MemberNumber memberN..
-
Spring Boot Flyway 적용하기(flyway, h2 DB test 에러 해결)프로젝트/선착순 쿠폰 발급 시스템 2023. 4. 30. 00:01
개요 DB 형상관리를 위해 Flyway를 도입하고자 합니다. Flyway란? git을 통하여 우리가 코드를 관리하는 것의 DB 버전입니다. 데이터베이스의 DDL의 이력을 쌓아 DDL이 어떻게 변화되었는지 관리하는 툴으로 사용할 수 있습니다. 실무에서는 local prod등 실제 서버와 개발환경이 나뉘어 있습니다. 이때 local 에서 변경한 DB의 스키마나 데이터를 운영 DB에 반영할 때 누락하는 것을 막기 위해 사용합니다. Flyway Convention 기본 위치는 main/reousrces/db/migration (커스텀 설정 가능) Prefix V(Versioned) 현재 버전을 새로운 버전으로 업그레이드 U(Undo) 현재 버전을 이전 버전으로 되돌리는 경우 R(Repetable) 버전에 관계 ..