항해99 실전 프로젝트 (24일차)

2024. 2. 26. 21:44· 항해99
목차
  1. 예매 테이블 MySQL에서 ElasticSearch 변경
  2. [트러블슈팅] 티켓 구매 시 락 유효성 검사

Pasted image 20240127002218.png

예매 테이블 MySQL에서 ElasticSearch 변경

MySQL에서 ElasticSearch로 변경완료

  1. 불필요한 클래스들 삭제
  2. Domain에 Reservation 폴더 구조 변경
  3. 테스트 확인 완료

[트러블슈팅] 티켓 구매 시 락 유효성 검사

  1. 좌석을 선택 한 사람이 구매를 무조건 해야한다.
  2. Redis에서 따로 해당 좌석의 키로 이메일을 저장을 한다.
  3. 그 후 구매 할 때 비교를 한다.
    Pasted image 20240227013638.png
@Transactional
	public void updateReservationStatusWithLocked(ElasticReservationRequestDto elasticReservationRequestDto,
		String email) throws
		InterruptedException {

		String uuid = elasticReservationRequestDto.getReservationId();
		String lockName = "seat_lock:" + uuid;
		RLock rLock = redissonClient.getLock(lockName);

		ElasticSearchReservation elasticSearchReservation = elasticSearchReservationRepository.findById(
				elasticReservationRequestDto.getReservationId())
			.orElseThrow(() -> new GlobalException(HttpStatus.NOT_FOUND, ExceptionCode.NOT_EXIST_RESERVATION));

		long waitTime = 0L;
		long leaseTime = 180L;
		boolean isLockAcquired = rLock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS); // 락 획득 시도

		if (!isLockAcquired) {
			throw new GlobalException(HttpStatus.LOCKED, ExceptionCode.LOCKED);
		}

		**seatValidateRepository.save(new SeatValidate(uuid, email));**
		elasticSearchReservation.updateStatus(Status.RESERVATION);
		elasticsearchTemplate.update(elasticSearchReservation);

	}

seatValidateRepository.save(new SeatValidate(uuid, email)); 를 추가하여 redis에 ‘seat_validate:좌석id’ 를 key값으로 ‘**email’**를 value로 추가

SeatValidate seatValidate = seatValidateRepository.findById(ticketRequestDto.getReservationId())
			.orElseThrow(() -> new GlobalException(HttpStatus.NOT_FOUND, ExceptionCode.NOT_EXIST_SEAT));

if (!seatValidate.getEmail().equals(userEmail)) {
			throw new GlobalException(HttpStatus.LOCKED, ExceptionCode.NOT_SELECT_LOCKED);
		}

티켓 구매할 때 로그인한 유저의 email과 redis에 좌석의 id로 저장한 email을 비교하여 같은 경우에만 티켓을 구매 가능하도록 변경

'항해99' 카테고리의 다른 글

항해99 실전 프로젝트 (26일차)  (0) 2024.02.28
항해99 실전 프로젝트 (25일차)  (0) 2024.02.27
항해99 실전 프로젝트 (23일차)  (0) 2024.02.26
항해99 실전 프로젝트 (22일차)  (0) 2024.02.23
항해99 실전 프로젝트 (21일차)  (0) 2024.02.22
  1. 예매 테이블 MySQL에서 ElasticSearch 변경
  2. [트러블슈팅] 티켓 구매 시 락 유효성 검사
'항해99' 카테고리의 다른 글
  • 항해99 실전 프로젝트 (26일차)
  • 항해99 실전 프로젝트 (25일차)
  • 항해99 실전 프로젝트 (23일차)
  • 항해99 실전 프로젝트 (22일차)
blablax5
blablax5
웹 백엔드취준생 입니다.
blablax5
blablax5
blablax5
전체
오늘
어제
  • 분류 전체보기 (141)
    • 개발 (39)
      • 트러블 슈팅 (25)
      • 서버 & DB (5)
      • 스프링 & 자바 (3)
      • 알고리즘 (6)
    • 스터디 (27)
      • AWS SAA (23)
      • 쉽게 배우는 운영체제 (3)
      • AWS Builders 온라인 시리즈 (1)
    • 학습부채 (0)
    • 항해99 (70)
    • 횡설수설 (3)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • AWS
  • SAA

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
blablax5
항해99 실전 프로젝트 (24일차)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.