피드백


목차

  1. 프로젝트 설명

프로젝트 목표

순간적으로 발생하는 대용량의 트래픽에 대처할 수 있도록 락과 캐싱을 활용한 티켓팅 프로젝트 구현

프로젝트 이름

Ticket Radar

서비스 아키텍쳐

ERD

기능

기술스택

웹 프레임워크 : vue.Js

데이터베이스 : PostgreSQL

클라우드 플랫폼 : AWS

  1. 주요 기능(구현 완료)

Redis Lock 을 활용한 동시성 제어

동시성 제어

하나의 공유자원(이벤트)에 다수의 사용자가 동시(티켓팅)에 접근할 때 발생할 수 있는 문제를 방지하기 위한 기술

이를 통해 데이터의 일관성과 무결성을 유지하며, 시스템의 안정성과 신뢰성을 보장할 수 있습니다.QueryDSL을 사용하면 컴파일 시점에 타입 체크가 가능합니다.

Pub-Sub Lock

비슷한 락인 SpinLock과 비교하였을 때 Pub-Sub Lock은 대기 중인 스레드를 블록하지 않고, 이벤트 또는 메시지를 통해 대기열에 있는 스레드에게 알림을 제공합니다.

이는 계속 레디스에 부하를 주는 SpinLock과 달리 CPU 자원을 더 효율적으로 활용할 수 있도록 합니다.

Lock의 점유와 해제

락을 구현한다면 락의 점유 시점과 해제 시점을 명확하게 해주어야 합니다.

우선 저희 티켓레이더의 사용자 입장에서 티켓을 예매하는 단계는 이렇게 진행됩니다.

  1. 원하는 공연(Event) 선택

  2. 공연 기간 내의 날짜중 한개를 선택

  3. 해당 날짜의 남아있는 좌석중 1~4개 선택

  4. 좌석예매 버튼 클릭

  5. 예매한 좌석들 결제하기 버튼 클릭

  6. 결제 완료

저희는 여기서 4번과 5번사이에 락을 점유하고 해제하는 과정을 구현할 예정입니다.

그렇다면 4번과 5번사이에 어떤 과정이 들어가는지 표시해보겠습니다.

  1. 원하는 공연(Event) 선택

  2. 공연 기간 내의 날짜중 한개를 선택

  3. 해당 날짜의 남아있는 좌석중 1~4개 선택

  4. 좌석예매 버튼 클릭

» CreateTicket 호출

-해당 이벤트와 날짜, 좌석등급, 번호를 기반으로 락 Key를 생성

-이미 락이 점유 중인 상태라면 대기

-타임 아웃시 유저에게 이미 예매중인 좌석이라는 알림창 띄움

-락이 점유중이 아니라면 Key를 이용하여 락을 점유

-락 점유 시간동안 Ticket의 정합성 (예매 가능 상태, 알맞은 좌석번호 등등) 을 확인

-정합성이 맞지 않는다면 유저에게 오류메세지를 띄우고 락 해제

-정합성 확인 이후 DB의 Ticket테이블에 Ticket 정보 저장

-락 해제

  1. 예매한 좌석들 결제하기 버튼 클릭

  2. 결제 완료

OAuth 를 활용한 소셜로그인

보안

사용자에게 안전하고 신뢰할 수 있는 인증을 제공하고 권한을 부여합니다

간편함

기존 계정 정보를 공유함으로써 사용자가 새로운 계정을 만들거나 기억할 필요없이 로그인할 수 있습니다

회원 관리 방법

기존 회원 분류 비회원 Common 멤버 소셜 로그인 멤버 혼합 멤버
자체 회원가입 시 isCommon = True,
회원가입 중복 이메일 에러 예) 카카오 회원가입 시isKakaoMember = True, 회원가입 중복 이메일 에러
소셜 로그인(회원가입) 예) isKakaoMember = True, 회원가입
로그인 토큰 발급 예) isKakaoMember = True, 로그인 토큰 발급 해당 소셜 로그인 컬럼이 True면 로그인, False면 회원가입 로그인 토큰 발급 해당 소셜 로그인 컬럼이 True면 로그인, False면 회원가입 로그인 토큰 발급

OAuth 2.0 적용 단계 의사결정

일반 회원과 소셜 로그인 회원 통합

처음 OAuth2를 적용할 때 소셜 로그인 사용자와 일반 사용자를 구분해야 관리가 용이하다고 판단해 각자 패키지와 엔티티를 분리해서 저장했다.

문제:

관리 측면 :

사용자 측면 :

해결:구분 값: Email(Unique)이유 -> 현실적으로 주민등록번호나 이름 받아 인증하기 어려움MemberId를 가진 ProviderMap 테이블을 생성해 해당 계정의 인증 정보를 저장했다.

Spring Security 사용 이유

  1. 시연

  2. 사용할 기술(구현 예정)

.

발표 대본(발표 : 장준용)