항해 플러스 추천인 코드
지원페이지에서 추천 코드에 3ZTeU1
를 입력하시면 20만원
할인 혜택을 받을 수 있습니다.
항해 플러스 과정에 관심 있는 분들은 아래 링크를 통해 신청해보세요! 궁금한 점이나 커피챗을 원하시면 LinkedIn이나 kboxstar@gmail.com
으로 연락주세요.
1. 문제
이번 주차에는 분산환경에서 동시성 제어하는 방법들에 대해 알아보고 동시성 문제가 발생하는 시나리오에 적절한 동시성 제어를 적용하는 것을 진행했습니다.
2. 시도
동시성 제어 방법에는 비관적락(Pessimistic Lock), 낙관적락(Optimistic Lock), 분산락(Distributed Lock), Message Queue 활용하는 방법 등이 있습니다.
해당 방법에 장단점 구현 방식에 대해 공부하였으며 콘서트 시나리오에서 발생하는 동시성 상황에 어느 방법이 적절할지 분석하였습니다.
우선 Redis에 대해 공부하고 Redis로 분산락을 구현하는 방법에 대해 알아보았습니다. Spring Boot Redis를 활용한 분산 락 구현
3. 해결
좌석 예약, 포인트 충전, 예약내역 결제 과 같이 동시성 문제가 발생하는 시나리오에 비관적락, 낙관적락, 분산락을 적용하여 비교하였습니다.
각 동시성제어를 어느 방식에서 왜 사용하는지에 대해 알아보고 맞는 방법이 뭔지 고민해봤습니다. Spring Boot 콘서트 예약 시나리오 동시성 문제 분석
4. 알게 된 점
동시성 제어의 경우 실직적인 트래픽이 몰리지 않는 서비스라면 이슈가 있는 지 모를 수 있습니다. 하지만 모르고 있다가 트래픽이 몰려서 데이터 정합성이 깨진다면 많이 힘들어질 것 같아요. 데이터 정합성이 깨졌을 때 힘들었던 기억들이 있습니다...ㅠㅠ
동시성제어는 개발 레벨에서 통합테스트를 통해 어느정도 확인은 가능하다고 생각합니다. 그래서 이부분은 필수로 진행해야하지 않을까 싶어요. 문제는 예상하지 못한 부분에서 발생하기에 전부를 막을 순 없더라도 내가 인지하고 있는 부분에 한해서는 막아야 한다고 생각합니다.
동시성 이슈는 보통 경쟁 조건(Race Condition) 이슈로 발생하는 경우가 많습니다. 이를 해결하기 위해 공유 자원을 순차적으로 제어하도록 하는 방법(비관적락, 분산락)과 공유 자원이 최신정보인지 확인하고 처리하는 방법(낙관적락)이 있습니다.
첫번째 방법은 공유자원에 대해 접근이 무수히 많을때 즉 충돌이 많을 때 사용하고 두번째 방법은 충돌이 적을 때 사용합니다.
이유는 두번째 방법의 경우 충돌을 할 때마다 롤백을 하고 재시도를 하는 비용이 발생하기 때문입니다.
하지만 좌석 예약과 같이 첫 번째 트랜잭션외에 전부 실패하는 즉 재시도가 필요없는 경우에선 두번째 방법을 사용하는 것이 좋습니다.
왜냐하면 첫 번째 방법을 사용하면 어처피 실패할 요청들이 불필요하게 대기를 해야하는 경우가 발생하기 때문입니다.
분산락을 사용하는 경우는 이름에서도 써있듯이 분산환경에서 사용하는 방법이다. 분산 환경이란 서버가 분산되어있거나 DB가 분산되어있는 경우입니다.
이러한 경우도 비관적락 낙관적락으로도 동시성 제어를 할 수 있으나 비관적락의 경우는 분산환경에서 사용하기에는 어려움이 있습니다. DB가 분산되어있을 경우 락을 담당할 DB 또는 서버를 둬야하고 이에 대한 정합성을 유지하기 위해 추가적인 작업이 필요하기 때문입니다.
그리고 현 시스템의 아키텍처가 분산환경이라는 게 대량의 트래픽이 몰렸을때 대비하기 위함이라고 생각하는데 동시성 제어를 DB에 의존에서할 경우 DB에 부하가 많이 걸리게 되고 이는 시스템 전체에 영향을 미치게 됩니다.
그래서 동시성 제어에 대한 부분을 분산락에 책임을 두어 동시성제어를 할 수 있습니다.
Keep : 현재 만족하고 유지할 부분
계속 이론을 공부하고 정리하면서 지식을 쌓아가는 즐거움이 있는 것 같습니다.
지금은 인터넷 또는 GPT 사수를 통해 학습하고 있으나 이러한 데이터는 정재되어있지 않아 선별작업이 추가적으로 필요한 것 같습니다.
그래서 정재된 데이터에 대한 욕구가 생기는데 유료강의나 책고 같은 부분이 정재된 정보이지 않을까 싶습니다.
이전에는 재미없는 책을 왜 읽지에 대한 의문이 있었는데 이제는 아 빨리 항해 끝내고 책을 많이 읽고 싶다로 생각이 바뀌었습니다.
매일매일 학습하며 지식을 쌓아가는 저를 보며 앞으로가 점점 기대되고 있습니다.
Problem : 개선이 필요한 부분
재직자의 경우면 이번 과정에서 항해에만 몰두해야하는 게 맞다고 생각합니다. 진짜 시간이 많이 필요하거든요.
저는 현재 백수임에도 생각보다 항해에 대해 많은 시간을 투자하고 있습니다. 항해가 정해준 커리큘럼 바운더리에서만 공부를 하고 있지 않나 라는 생각이 들었어요.
물론 얇고 넓게 공부하는 것 보단 깊게 공부하는게 좋다고 생각합니다. 그런데 시간을 효율적으로 쓰지 못한다는 생각이 들었습니다.
이 부분에 대해 개선이 필요한 것 같습니다.
Try : 개선을 위한 시도
항해에 집중하는 시간을 따로 두고 나머지 시간에 다른 공부를 진행하려고 합니다.
공부가 될 수도 있고 외부 활동이 될 수도 있으며 내가하고 싶은 것이 될 수도 있습니다.
이미 6주차라는 시간이 흘러 7주차가 되어가는 시점이지만 시간을 효율적으로 쓸려고 노력하며 이 개선점은 저에게 계속 좋은 영향을 줄거라고 믿습니다.
'항해 > WIL' 카테고리의 다른 글
항해 플러스 백엔드 코스 6기 8주차 회고 WIL (0) | 2024.11.17 |
---|---|
항해 플러스 백엔드 코스 6기 7주차 회고 WIL (1) | 2024.11.10 |
항해 플러스 백엔드 코스 6기 5주차 및 챕터 회고 WIL (6) | 2024.10.27 |
항해 플러스 백엔드 코스 6기 4주차 회고 WIL (3) | 2024.10.20 |
항해 플러스 백엔드 코스 6기 3주차 회고 WIL (0) | 2024.10.12 |