전체 글

hoya

    쿠폰 발급 프로젝트 (2)

    어플리케이션 단에서 Lock 개념으로 언급되는 것은 크게 낙관적 락(Optimistic Lock) 과 비관적 락(Pessimistic Lock)이 있다. 각각의 방식을 적용해서 동시성 문제를 해결해보도록 하자! 비관적 락 비관적 락은 말 그대로 트랜잭션 끼리의 충돌은 무조건 발생(비관적으로 생각) 한다고 보고 트렌잭션이 접근하는 데이터에 미리 락을 거는 방식을 뜻한다. public interface CouponRepository extends JpaRepository { @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("SELECT count(c) FROM Coupon c") long countWithPessimisticLock(); } 기존의 CouponRepositor..

    쿠폰 발급 프로젝트 (1)

    평소 동시성 관련된 문제에 대해 관심이 많았기에 토이 프로젝트를 통해 학습하고자 해당 프로젝트를 시작했다! 또한 서비스를 운영하면서 특정 이벤트를 진행할 경우가 많은데 (쿠폰, 할인 이벤트) 이럴 경우 일시적으로 트래픽이 폭발적으로 증가하게 되는 현상이 발생한다. 단순히 스케일아웃을 통해 트래픽을 해결하는 것이 아닌, 작업 큐를 활용하여 일시적인 트래픽을 제어하는 방법 또한 이번 프로젝트를 통해 학습하고자 한다. 위 코드는 쿠폰을 발급과 관련된 정말 간단한 로직을 담고있다. 쿠폰 발급 수량이 100개가 넘어가거나, 동일 회원이 쿠폰을 중복으로 발급받으려 할 때 체크하는 유효성 검증 로직과 UUID를 바탕으로한 쿠폰 발급 로직이다. 아무런 동기화 처리를 해주지 않은 상태인데, 이 상태에서 테스트를 해보면 ..

    학습의 3단계 / 시스템의 중요성

    https://www.youtube.com/watch?v=QHlyr8soUDM 스프링 강의를 듣던 중, 주니어 개발자가 이직에 대한 고민을 댓글을 통해 토로하자, 영한님이 해당 영상을 참고하라고 하셨다. 사실 처음에는 아무런 생각 없이 누워서 듣다가, 들으면 들을수록 "오? 오?!" 하면서 자세를 고쳐안고 강의 내용을 경청하게 되었다. 여러 좋은 말씀들을 많이 해주셨지만 인상 깊었던 부분은 2가지 정도가 있었다. 이 부분들은 까먹지 않고 주기적으로 상기하기 위해 정리해둬야 겠다는 생각이 들어 관려 내용에 대한 요약 정리를 해보려고 한다! 1. 학습의 3단계 학습에는 다음과 같이 3가지 단계가 있다고 한다. 1. 학습 - 강의를 보고 책을 읽는 것 2. 체득 - 나의 것으로 만드는 것, 실무에 도입 또는..

    동기/비동기 블로킹/논블로킹에 대하여

    🔖 Introduce 동기/비동기, 블로킹/논블로킹 의미 📌 동기 / 비동기는 작업의 순서와 관련된 개념이다. 📌 블로킹 / 논블로킹은 작업 흐름의 막는 여부와 관련된 개념이다. 두 개념을 종합하여 생각해보기 비동기+논블로킹 비동기+블로킹 동기+블로킹 동기+논블로킹 정리하며.. 평소 동기와 비동기에 대한 차이가 무엇이냐는 질문을 받으면, 이렇게 답하고 했다. ” 동기는 한가지 일만 할 수 있는 것이고, 비동기는 여러가지 일을 바꾸어가며 동시에 실행할 수 있는 방식을 말합니다 “ 그런데 여기서 추가적인 질문이 들어온다. 블로킹과 논블로킹은 그럼 무슨차이에요? ” 동기와 블로킹이 비슷하고 비동기와 논블로킹이 비슷한 방식아닐까요..? “ 당연히 비슷한 개념이면, 굳이 블로킹과 논블로킹이라는 단어를 쓰진 않겠지..