
안녕하세요 ! 오랜만에 새로운 글로 찾아온 GOLF 입니다! 내용 요약GPT 발췌1. 문제 상황사용자가 제일 먼저 구매했음에도 결제까지 완료되지 않으면, 다른 사용자가 결제를 진행하여 상품을 선점할 수 있는 문제가 발생합니다. 2. 해결 방법 비교:주문 즉시 판매 처리 (보상 트랜잭션 방식): 주문 정보를 즉시 “팔림” 상태로 처리하여 다른 사용자가 결제하지 못하게 합니다. 결제 실패 시 보상 트랜잭션으로 롤백하는 등 복잡한 예외 처리와 상태 관리가 필요합니다.상품 잠금 (선점) 방식: 주문 시점에 해당 티켓이나 상품을 잠금 처리하여 결제 전까지 다른 사용자가 접근하지 못하도록 합니다. 주문 처리에 문제가 생기면 단순히 잠금만 해제하면 되므로 구현 및 예외 처리가 간단합니다. 두 방식은 구현 난이도, 예..

소프트웨어 개발 과정에서 예기치 못한 상태 변경으로 인한 버그를 마주합니다. 이런 경우 디버깅도 힘들어지고 이후 객체의 개발 의도가 변경되고 비대해지면서 더 찾기가 힘들어집니다. 이런 문제를 개선하기 위해선 어떤 방법이 있을까요?불변성불변성이란 한번 생성된 객체는 이후 어떤 방법으로든 상태가 변경되지 않는 것을 말합니다. 불변 객체는 상태가 바뀌지 않기 때문엔 여러 스레드에서 동시접근 해도 안전하고, 예측가능하고 디버깅이 쉬운 코드 작성을 돕습니다.보통 final class로 불변 클래스를 선언해주고 내부적으로도 상태를 변경하는 코드가 없어야 합니다. 다음은 불변을 위반한 상황입니다. val person = Person("1996-08-12", "golf", 27, 179, 72)println(perso..

배경 https://golf-dev.tistory.com/53 Redis INCR을 이용한 분산환경에서의 동시성 제어하기 문제 상황 회사에서 분산환경에서 하루에 한 번만 요청이 가능한 기능이었지만 한 사람이 3번 이상 요청을 보낸 기록이 있어 원인을 찾아보았습니다. 우선 샘플 코드는 다음과 같습니다. fun save( golf-dev.tistory.com 제 블로그를 많이 읽어보셨다면 익숙한 글 입니다. Redis INCR 동작원리를 이용해서 분산환경에서 Lock을 구현했었는데요. 이 방식이 과연 최선이었는가에 대해서 고민을 해보는 시간을 가져볼 겁니다. 뭐가 문젠데? 요청 프로세스를 다이어그램으로 그려보면 다음과 같습니다. 이미 요청 횟수를 정해놓고 구현했기 때문에 INCR로 두 서버에서 요청수를 co..

CQRS 패턴이란? CQRS는 Command Query Responsibility Segregation의 약자로 "명령 조회 책임 분리" 라는 뜻을 갖고 있다. 이는 애플리케이션을 구성하는 아키텍처 패턴 중 하나로 명령과 조회에 대한 책임을 분리하여 아키텍처를 구성하는 것이다. 그럼 왜 그렇게 해야하는지 알아보자 Why? 일반적인 애플리케이션은 데이터를 연결된 데이터베이스에 레코드로써 생성하거나 조회하거나 갱신 삭제를 한다. 그리고 이렇게 애플리케이션이 데이터를 레코드로 저장하는 과정에서 데이터는 특정한 모델로 다뤄진다. 예를 들어 주문 내역이라는 데이터는 애플리케이션 내에서 id, 주문 상품, 일시 등으로 속성을 지니는 하나의 클래스 모델로써 다뤄지고 DB에는 레코드로써 저장되어 조회 갱신 삭제될 수 ..
- Total
- Today
- Yesterday
- IT
- CS
- Kotlin
- 면접준비
- MySQL
- Spring
- 백엔드
- lock
- 코딩
- thread
- 자바
- 게시판
- docker
- 프로젝트
- DB
- 코드
- 면접 준비
- 인터뷰
- 동시성
- JPA
- 개발자
- Redis
- 취업
- 개발
- java
- 취준
- 취업준비
- 면접
- DevOps
- 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |