• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

질문드립니다

24.03.29 02:23 작성 조회수 91

0

  1. 1분 42초에 lock을 건다고 하는데 이게 어떤 lock을 건다는 의미인지 모르겠습니다.
    설명해주시기로는 범위로 락을 잡고 처음에 쿠폰 발급 여부를 가져와서 판단하는 방식입니다.라고 설명해주셨는데 여기서 lock이란게 뭐고 lock을 사용하는 이유가 뭔지 설명해주시면 감사하겠습니다.
    if문을 통해 확인한다는게 lock인건지 아니면 apply메서드 자체에 lock을 걸고 다른 프로세스가 접근하지 못하게한다는건지 모르겠내요

  1. 유저 아이디별로 쿠폰 발급 개수를 한개로 제한할때 Redis에 Set자료구조를 써도되고 Map을 써도될거같은데 Set을 소개해주신 이유가 있을까요?

답변 1

답변을 작성해보세요.

0

answntjd1006 님 안녕하세요.
1. 강의에서 설명드린 Lock 은 해당 메소드에 진입하기 전 잠금을 얻어 다른 사용자가 해당 메소드에 접근을 하지 못하도록 막는 장치를 뜻합니다.
여러 사용자가 하나에 자원에 접근하면서 발생할 수 있는 레이스컨디션을 방어하기 위하여 사용하곤 합니다.

if 문을 통해 확인 하는것은 발급할 수 있는 조건을 만족하는지를 체크하는 용도였습니다.

Map 을 말씀하신 이유가 있으실 것 같은데, 제가 이해하지 못한 것 같습니다.
Map 을 어떻게 사용할지 말씀을 조금만 더 해주실 수 있을까요 ?

답변 정말 감사드립니다!


혹시 1번은 apply메서드에 진입하게 못하는 Syncronized라고 이해해도될까요?

추가적인 질문입니다! 강사님이 아래와 같이 설명해주셨는데요

API에서 직접 쿠폰을 발급한다고 쳐도 락 범위가 너무 넓어지게 됩니다. 
다른 요청들은 이 락이 끝날 때까지 이 로직에 접근을 하지 못하게 되므로 성능이 안 좋아지는 이슈가 발생할 수 있습니다.

Redis를 쓴다면 Redis가 싱글스레드인것을 이용해 판단이 가능하니 lock을 걸필요가 없어진다는게 맞는지 궁금합니다!

 

위에서 두번째 질문은 제가 잘못이해하고 질문을 남긴거 같아 지나가셔도 좋을 것 같습니다!