비전공자에서 주니어 개발자까지
close
프로필 배경
프로필 로고

비전공자에서 주니어 개발자까지

  • 분류 전체보기 (89)
    • 개발 도서 (15)
    • 스프링 (12)
    • 코테대비 (0)
    • CS (1)
      • 네트워크 (9)
      • 데이터베이스 (11)
      • 운영체제 (13)
    • 개발 (24)
  • 글쓰기
  • 설정

분산 트랜잭션 실패 시 데이터 정합성 보장하기

현재 상황펀딩을 진행할 때 서비스 간 트랜잭션 일관성을 위해 사가패턴을 사용하고 있다. 펀딩 생성 플로우재고 예약은 동기 방식으로 즉시 처리하여 재고 정합성을 보장하고, 결제는 비동기 방식으로 처리하여 응답 속도를 개선하는 구조다. 문제 발견재고 차감에 대해 부하 테스트를 하면서 동시성 문제는 이미 잡았다고 생각했는데 재고가 안 맞는 문제를 발견했다. 문제 상황 사용자가 펀딩 시 여러 리워드를 선택할 수 있다. 예를 들어 "리워드1 + 리워드2"를 함께 선택하면, 리워드 서비스에서는 요청을 순차적으로 처리한다.리워드1 재고 차감 → 성공 리워드2 재고 차감 → 재고 부족으로 실패이 경우 리워드2의 실패로 전체 펀딩이 실패하고, 리워드1의 예약도 취소되어야 한다.하지만 실제로는 리워드1은 차감된 상태로 남..

  • format_list_bulleted 개발
  • · 2026. 1. 24.
  • textsms

재고 차감 실패율 개선 - 분산락 적용

현재 상황재고 차감에 동시성 이슈가 있어서 비관락을 적용해 동시성 문제를 해결하였다.하지만 비관적 락 특성상 락을 획득하고 있는 시간이 길어지면 다른 요청들이 대기 상태로 밀리면서 DB 커넥션 병목이 발생하고 실패율이 50%가 넘는 문제가 발생한 것을 확인했다. 실제로 지표를 확인해 보면, 가상 유저 수와 TPS가 각각 500명, 160 req/s까지 올라갔다가 약 15초 만에 급격히 감소하는 것을 볼 수 있다.또한 재고 100개가 너무 빨리 소진되면서 나머지 시간은 의미 없는 409 응답만 반복됐다.비관락 적용 과정은 재고 차감 시 발생하는 동시성 이슈 해결 - 비관적 락 에서 확인할 수 있습니다. 테스트 시나리오기존 테스트는 재고가 빠르게 소진되어 성능 지표를 관찰하기 어려웠고, 지속적인 락 경합 상..

  • format_list_bulleted 개발
  • · 2026. 1. 11.
  • textsms
재고 차감 시 발생하는 동시성 이슈 해결 - 비관적 락

재고 차감 시 발생하는 동시성 이슈 해결 - 비관적 락

현재 상황현재 재고 차감은 결제 요청 시 미리 차감 후, 결제 결과에 따라 복원하는 프로세스로 구현되어 있다.결제 도중 재고가 선점되지 않아 발생하는 사용자 이탈 및 불편을 최소화하기 위해 구현이 조금 복잡해져도 선점 방식을 도입했다.이러한 선점 로직이 동시 요청 환경에서 정합성을 보장하는지 검증하고자 동시성 테스트를 진행했다. 테스트 시나리오테스트 환경도구: K6터미널 기반으로 리소스 효율이 높고, Grafana 연동을 통한 실시간 지표 시각화 용이테스트 환경: 로컬 환경인프라 지연 요인을 배제하고 로직 자체의 동시성 결함 및 정합성 검증데이터베이스: PostgreSQL테스트 대상 API: POST /internal/rewards/reserve-stock테스트 데이터 설정리워드 초기 재고: 100개동시..

  • format_list_bulleted 개발
  • · 2025. 12. 21.
  • textsms

MSA 환경에서 이벤트 데이터 정합성 문제를 해결하기 위한 아웃박스 패턴 적용

현재 상황크라우드펀딩 플랫폼에서 Reward Service의 일부는 Kafka 기반 이벤트 드리븐 아키텍처로 구성되어 있고 이벤트를 발행하는 부분은 다음과 같은 구조로 발행을 하고 있다.[Project Service] -> [Reward Service] -> [Project Service]Project Service가 PROJECT_CREATED 이벤트를 발행하면 Reward Service가 리워드 생성 시도를 하고, 이때 성공 실패 여부를 Project Service에게 이벤트를 발행한다 현재 이벤트 플로우이벤트 수신 (Consumer 역할)Project Service로부터 PROJECT_CREATED 이벤트를 수신프로젝트에 속한 리워드 일괄 생성비즈니스 로직 처리리워드 엔티티를 DB에 저장재고 정보 ..

  • format_list_bulleted 개발
  • · 2025. 12. 13.
  • textsms

JVM과 JVM 메모리 구조

JVM이란?Java Virtual Machine의 약자로 직역하면 자바 가상 머신이다.자바 가상 머신이라는 의미를 알기 위해선 프로그래밍 언어를 컴퓨터가 어떻게 읽고 이해하는지 알면 이해하기 쉽다.컴퓨터는 기계어(0, 1)만 직접 이해할 수 있기 때문에 사람이 쓰는 언어인 Java, C, Python 등을 직접 이해하지 못한다.따라서 사람이 작성한 소스 코드는 번역 과정을 거쳐야 한다.먼저 C나 C++ 같은 언어는 컴파일러가 소스 코드를 한 번에 기계어로 바꿔서 실행 파일을 만든다.파이썬, 자바스크립트 같은 언어는 인터프리터가 코드를 한 줄씩 읽으면서 실행한다.하지만 자바는 위 두 개의 방식을 절충해 하이브리드 언어라고도 불리는데 이유는 다음과 같다.먼저 소스를 바이트코드 라는 중간 형태로 컴파일하고, ..

  • format_list_bulleted CS
  • · 2025. 9. 7.
  • textsms
프로젝트 아키텍처 설계 - 레이어드? 헥사고날?

프로젝트 아키텍처 설계 - 레이어드? 헥사고날?

아키텍처 선택레이어드 아키텍처로 진행했던 프로젝트 중 의존성 관리가 어려워진 경험이 있었다.처음에는 간단했던 구조가 클래스가 많아지고 구조가 점점 복잡해지면서 단일 책임 원칙 위반과 중복 코드 문제가 발생했었다.이러한 문제를 겪고 프로젝트 아키텍처에 공부를 했고, 내가 겪은 문제를 시원하게 해결해줄 아키텍처가 있다는 것을 알았다. 레이어드 아키텍처의 문제점레이어드 아키텍처는 controller - service - repository 구조를 가지고 있다.이 구조를 모식도와 계층으로 표현하면 다음과 같다.이 구조의 장점은 구조가 단순하고 직관적이다.각 계층의 역할이 명확하게 나뉘어져 있어, 아키텍처를 이해하고 개발 초기 단계에 설계하기가 쉽다.하지만 프로젝트 규모가 점점 커지고 복잡해지면서, 개발자들이 지..

  • format_list_bulleted 개발
  • · 2025. 8. 12.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 15
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (89)
    • 개발 도서 (15)
    • 스프링 (12)
    • 코테대비 (0)
    • CS (1)
      • 네트워크 (9)
      • 데이터베이스 (11)
      • 운영체제 (13)
    • 개발 (24)
최근 글
인기 글
최근 댓글
태그
  • #국비지원
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바