목록Spring/트러블 슈팅 (14)
개발자는 기록이 답이다

2024.02.29 - [Spring/트러블 슈팅] - 쿠폰 발급에 대한 동시성 처리 (1) - synchronized, pessimisti Lock, optimistic Lock 쿠폰 발급에 대한 동시성 처리 (1) - synchronized, pessimisti Lock, optimistic Lock1. 데이터 모델링 쿠폰 발행 기능을 구현하기 위해 Coupon 테이블에 지금까지 발행된 쿠폰 개수(issued_quantity)를 반정규화하는 방식을 사용했습니다. CREATE TABLE coupon ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARYstrong-park.tistory.com 지난 시간에 이어서 동시성 제어하는 방법에 대한 다른 방법들을 알아보겠습니다. 레코드 ..

1. 데이터 모델링쿠폰 발행 기능을 구현하기 위해 Coupon 테이블에 지금까지 발행된 쿠폰 개수(issued_quantity)를 반정규화하는 방식을 사용했습니다.CREATE TABLE coupon( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '쿠폰 식별자', event_id BIGINT UNSIGNED NOT NULL COMMENT '이벤트 식별자', discount_type VARCHAR(40) NOT NULL COMMENT '정액, 정률 등', discount_rate BIGINT UNSIGNED NULL COMMENT '정률 할인', d..

프로젝트를 하면서 맨 처음에는 시간 데이터로 DATETIME을 사용했습니다. MySQL기준으로 시간을 나타내는 대표적인 타입으로 DATETIME과 TIMESTAMP 2종류가 존재합니다. 어떻게 더 나을지 테스트한 결과를 포스팅해보려고 합니다. 1. MySQL에서의 시간 데이터 MySQL공식문서에 따르면 시간 데이터는 총 3가지가 존재합니다. 간단하게 특징별로만 소개하자면 아래와 같습니다. DATE 시간부분 없이 날짜로만 'YYYY-MM-DD' 형식으로 사용된다. 지원되는 범위 '1000-01-01'에서 '9999-12-31'까지 가능하다. 저장용량은 3byte이다. 그렇다면 시간까지 포함하는 DATETIME과 TIMESTAMP의 차이는 무엇일까요? DATETIME 날짜 및 시간 부분 모두 포함해서 'YY..

@RequestBody가 바인딩하는 과정을 알기 위해서 우선 Spring Web MVC 모듈에서 HTTP 요청이 오면 어떤 일이 일어나는 지 알고 있어야 합니다. 관련된 내용은 여기에 자세한 내용이 나와있어서 참고했습니다. 하지만 직접 눈으로 보지 않으면 완전히 이해하기가 어렵고, 머리속에서 금방 잊혀져서 실제로 디버깅을 해보고자 했습니다. 1. RequestBody는 기본생성자만 사용한다 저는 이전에 오브젝트 서적을 완독했기 때문에, 이제 드디어 "객체 지향적인" 코드를 작성해봐야 겠다고 생각했습니다. 그래서 RequestDTO의 필드들에 대한 검증을 java.util.regex.Pattern를 이용해서 처리하고 객체 생성할때 validate메소드를 호출하면 될 것이라고 생각했습니다. 해당 코드는 아래..