전체 글 100

[트러블슈팅] '선착순 쿠폰 발급' 로직 - Redis를 통한 동시성 문제 해결 (2/2)

[트러블슈팅] '선착순 쿠폰 발급' 로직 - 동시성 문제 발생 (w/ Race Condition) (1/2)일반 쿠폰 발급 로직 설계를 마치고, 선착순 쿠폰 발급 로직 개발에 들어왔다가 동시성 문제에 맞닥뜨렸다. 드디어 여태 들어만 봤던 동시성 문제를 해결할 기회가 왔다. 맞다이로 드루와 개요developer-jinnie.tistory.com이전 글에서는 로직 설계를 하면서 맞닥뜨린 동시성 문제와, 이 문제에 대한 분석 및 해결 방안 등을 찾아보고 비교해봤다. 이번 글에서는 지난 글을 통해 도출해낸 해결 방법을 내 로직에 적용해보며 동시성 문제를 해결해보는 과정을 담아보려 한다. 문제 해결 과정먼저 Redis를 설치해주어야 하지만 필자의 환경에서는 전에 레디스를 통한 캐싱 작업을 해 본 경험이 있어 Re..

[트러블슈팅] '선착순 쿠폰 발급' 로직 - 동시성 문제 발생 (w/ Race Condition) (1/2)

일반 쿠폰 발급 로직 설계를 마치고, 선착순 쿠폰 발급 로직 개발에 들어왔다가 동시성 문제에 맞닥뜨렸다. 드디어 여태 들어만 봤던 동시성 문제를 해결할 기회가 왔다. 맞다이로 드루와 개요일단 서비스 및 컨트롤러, 레포 코드를 작성한 후 테스트 케이스를 작성하고 돌려봤을 땐 pass가 떴다. 그 후 postman으로 1차 기능 테스트 까지는 성공.서비스 레이어 코드123456789101112131415161718192021222324252627282930    /**     * 선착순 쿠폰 발급     */    @Transactional    public CouponIssuedResponseDto issueFirstComeCoupon(CouponIssuedRequestDto request) {      ..

[프로젝트] 선착순/일반 쿠폰 발급 로직 분리에 대한 고민

프로젝트를 시작한 지 일주일이 조금 넘어간다. 초반 3일 정도 동안은 팀원들과 ERD 설계, 요구사항 정리, 깃 컨벤션 정리 등등을 했고, 본격적으로 각 도메인을 맡아 개발을 한지는 막 일주일이 된 것 같다. 내가 메인으로 맡은 쿠폰 도메인은 크게 발급 수량 제한이 없는 일반 쿠폰과, 선착순 쿠폰 이벤트를 위한 선착순 쿠폰으로 나눠진다. 그리고 쿠폰 도메인은 쿠폰 자체의 발급을 위한 관리자용 쿠폰 CRUD, 발급된 쿠폰 내역을 유저마다 관리하는 쿠폰 발급 CRD 기능이 존재한다. 이번 포스팅에서는 위에서 설명한 쿠폰 발급 로직을 설계하며 고민했던 사항들과, 고민 끝에 왜 이렇게 결정했는지 기술적 의사 결정에 대한 설명을 적어보려 한다.  🔎고민일반 쿠폰과 선착순 쿠폰 로직의 API 엔드포인트를 따로 두..

[프로젝트][MSA] API Gateway 작성으로 모듈 별 연결하기

우선 지금 진행하고 있는 api gateway와 각 도메인들을 모듈별로 구분해놓고, 각 모듈은 각기 다른 포트 번호를 가지고 있는 구조이다. 오늘은 api gateway 모듈에서 게이트웨이 설정으로 각 모듈 별 api 주소를 전부 8080 포트에서 뿌려주도록 변경해 볼 예정이다. 의존성 추가일단 스프링 클라우드 사용을 위한 의존성 추가를 해주자!ext { set('springCloudVersion', "2023.0.0")}dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' // 스프링 클라우드 implementation 'org.springframework.cloud:spring-c..

[프로젝트] 인텔리제이 깃 클론/pull 후 모듈 인식 불가 해결

문제프로젝트 초기 설정 중, 함께 피쳐 별 모듈을 나누고 깃을 클론 후 application.yml 파일을 설정하려고 하는데 풀 받은 필자의 인텔리제이 파일에서 나눠놓은 모듈을 모듈로 인식 못 하는 문제가 발생했다. 원인깃에서 풀 받으면 루트 파일의 모듈은 인텔리제이에서 알아서 찾아주는데, 그 외 따로 설정한 모듈은 알아서 찾지 못해서 인식을 못하는 것으로 추측했다. 따로 인식을 위한 추가 절차가 필요해보였다.  해결 시도 및 해결1. Import module 하기 👉 실패 모듈로 인식시키기 위해 상단 메뉴 File > Project Structure ... 로 이동해서 모듈을 import 하는 걸 시도해봤는데 왜인지 필자의 인텔리제이에서는 그대로 모듈로 인식을 못했다. 2.  해당 모듈의 build...

[programmers] 피자 나눠 먹기 (2) 파이썬 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/120815 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 문제 자체는 쉬운 문제였다. 최소 공배수를 구해야겠구나 라고 생각하고, for 문으로 피자 판 수를 1부터 시작해서 필요한 피자 판 수를 찾을 때까지 증가시키면서 모든 사람이 동일한 수의 조각을 가질 수 있는지 확인되면 그 때의 피자 판 수를 return 시키는 식으로 풀었다. 1.  for문 풀이 👉 정답def solution(n): for i in range(1, 6 * n + 1):..

[Python] 파이썬에서 최소 공배수 함수로 구하기

알고리즘 문제를 풀다 최소 공배수를 구해야 하는 문제를 맞닥뜨렸다.  필자는 for문으로 풀었지만, 풀고 난 후 다른 적합한 풀이 방법이 있나 찾아보다 파이썬에서 최소 공배수를 구하는 함수가 있다는 걸 알았다. 공유도 하고 잊지 않고 다음에 써먹기도 할 겸 포스팅한다 🍀 ✏️ 최소 공배수란?먼저 다들 알고 있겠지만 최소 공배수가 뭔지 간단히 짚고 넘어가보려 한다. 최소 공배수(LCM, Least Common Multiple)는 두 수의 배수 중에서 가장 작은 공통 배수를 의미한다. 예를 들어, 4와 6의 최소 공배수는 12 이다. 개념최소 공배수는 다음과 같은 특성을 가지고 있다.두 수의 공통된 배수 중 가장 작은 수최소 공배수를 구하기 위해 최대 공약수(GCD, Greatest Common Divis..