전체 글 110

[프로젝트/기술적 의사결정] Redis 분산락으로 재고 감소 동시성 이슈 해결하기 (1/2)

필자는 MSA 기반 이커머스 프로젝트에서 상품/재고/예약구매 도메인을 맡아 진행중이다. 지난 프로젝트에서 쿠폰 도메인을 맡아 개발했을 때 Race condition 문제를 예상치 못하게 겪고 (..) 이번 프로젝트에서 상품/재고 도메인을 맡았을 땐 어느 정도 동시성 이슈가 생기리라고 예상을 했었다. 그래서 이번 포스팅에선 해당 이슈가 왜 발생하는지 원인을 분석하고, 문제를 해결하기 위한 방법과 그에 따른 기술적 의사결정 과정을 적어보려 한다. 문제 상황 바로 테스트 코드를 작성해보자.동시에 100개의 요청이 들어올 때의 테스트 코드를 작성하고 돌려보니 역시나 실패다. 실패하는 이유는 역시나 위에 언급해 둔 Race condition 문제 때문이다. 💡Race Condition 이란?두 개 이상의 스..

[boj 14888.python] '연산자 끼워넣기' 파이썬 풀이 (feat. 브루트포스, DFS 비교)

https://www.acmicpc.net/problem/14888문제 출력 문제 접근문제 난이도 자체는 어렵지 않은 문제였다.처음에는 브루트포스(완탐)와 DFS 사이에서 고민하다가, DFS로 구현하려면 각 연산자를 선택하는 과정을 재귀 호출로 구현해야 할 것 같았다. 아직 그 부분은 미흡해서 브루트포스로 풀 수 있을까? 하고 고민했는데 ,, 그래서 시간 복잡도를 계산해 봤다. N - 1개의 연산자에 대해 가능한 모든 순열을 생성해야 하니까, 경우의 수는 (N - 1)!과 같을거다. '입력'에서 N의 조건을 보면 N의 최대값은 11 이다. 즉, 최대 경우의 수는 10! = 3,628,800이라는 말 ! 그래서 이 문제의 경우는 브루트포스로도 충분히 풀 수 있을 거라고 판단해 브루트포스 방법을 채택해서 문..

Algorithm/BaekJoon 2024.12.03

[TIL][자료구조] 그래프의 개념과 표현 방법

DFS와 BFS를 학습하다가, 이 알고리즘들을 배우기 전에 이 알고리즘들의 근간을 이루고 있는 '그래프'라는 자료 구조에 대해 깊게 알아보고 가야겠다는 생각이 들었다. ✏️그래프란?그래프란, 연결되어 있는 정점과 정점간의 관계를 표현할 수 있는 자료구조이다. [천재학습백과] 알다시피 자료구조는 크게 비선형구조와 선형구조로 구분되는데,선형구조는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고 (ex. 스택, 큐, 리스트, ...), 비선형구조는 '표현'에 초점이 맞춰져 있다고 생각하면 된다. 자료구조인 그래프는 바로 연결 관계에 초점이 맞춰져 있는데, 말로만 들으면 너무 추상적이게 느껴질 수 있으니 관계망을 나타내는 서비스인 페이스북으로 예시를 들어보자. 필자가 친구 "제니"를 알고 있고, "로제"와 친하..

Algorithm 2024.12.02

[프로젝트/기술적 의사결정] Kafka vs RabbitMQ, 대규모 트래픽 상황에 맞는 메세징 시스템 선택

요구 사항사용자들이 주문 api 요청을 할 때, 사용자 트래픽이 몰리는 상황에서도 안정적인 주문 처리가 필요했다. 주문이 완료되면 재고를 차감하는 기능이 필요했고, 이때 효율적으로 주문을 처리하고 트래픽을 관리하기 위해 메시징 시스템을 도입하기로 결정했다. 기술 선택지RabbitMQKafka 선택한 기술 및 근거두 가지 기술 선택지 중, 어떤 시스템이 더 적절한지 검토할 때 아래와 같은 상황을 고려했다.▪️트래픽 처리 능력 : 높은 동시 요청 상황에서의 안정성이 필요하다. ▪️메세지 전달 보장 : 주문이 실패 없이 처리되어야 하며, 중복 주문이나 데이터 손실을 방지해야 한다. ▪️재고 관리 : 주문이 완료되었을 때 재고를 정확히 차감해야 한다. 이제 각 기술 선택지를 비교해보면서 결론을 내려보자.  1...

[프로젝트] MSA 기반 대용량 트래픽 프로젝트 설계 및 S.A 문서

MSA 기반 대규모 트래픽 처리 팀 프로젝트에 들어가면서, 초반 요구사항을 정리하고 ERD를 설계하는 동안 들었던 고민들과 그 결과를 정리해두려 한다.이번 프로젝트는 요구사항이 미리 정해진 게 아닌, 팀원들과 함께 상의해서 요구사항을 정하는 프로젝트였으므로 요구사항과 도메인 구성 등등을 정하기 위한 회의를 진행했다. 🔹요구 사항요구사항의 경우, 팀원들 모두가 개발 시 공통적으로 지켜야 할 요구 사항과 도메인 별 요구 사항으로 나누어 토론하고 결정했다. 🔗전체 요구사항 보러가기 요구 사항 정리 | Notion필수 구현 사항teamsparta.notion.site 🔹테이블 명세서 및 ERD🔗테이블 명세서 보러가기 테이블 명세서 | Notion유저(p_users)teamsparta.notion.site..

[programmers lv1.python] 달리기 경주 풀이 (시간초과 해결)

https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제문제는 간단하다 ! 해설진이 이름을 부르는 선수는 달리기 경주 중 현재 자리에서 추월한 선수이므로, 선수들 리스트에서 한 칸 땡겨오면 되는 것! 1차 풀이 (시간 초과 실패)def solution(players, callings): for call in callings: # 호출된 이름(call)의 현재 인덱스 찾기 idx = players.index(call) # 첫 번째 원소가 아니라면 ..

[내배캠 Spring 심화 트랙 1기 후기] 배움에 목마른 개발자라면!

필자는 일주일 전 내일배움캠프 Spring 심화 트랙 1기를 막 수료한 따끈따끈한 수료생이다.점점 높아지고 있는 신입의 기준 문턱 아래에서, 나와 같이 실력적 성장을 위해 너무나 노력하지만 독학의 한계에 부딪히고 있는 개발 취준생에게 조금이나마 도움이 됐으면 해서 이 후기(겸 회고)를 적는다.✏️ 심화 트랙 이전의 삶필자는 개발 공부를 시작한지 1년 정도가 지난 취준생이었다. 작년에 KDT 국비 부트캠프를 수료하고, 실력적으로 부족함을 느껴 개인 프로젝트를 했다. 이후 마음 맞는 분들과 MSA 팀 프로젝트를 한 개 더 하며 한 계단씩 성장하면서 기본기를 충실히 쌓아왔다고 생각했다. 하지만 마지막 프로젝트를 하며 느꼈던 아쉬움이 내배캠을 선택한 계기가 되었다. ✏️내배캠 심화 트랙을 선택한 계기심화 트랙을..

Review 2024.11.01