인프런 커뮤니티 질문&답변

won05121님의 프로필 이미지
won05121

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

분산락이라고 할 때 분산이

해결된 질문

작성

·

317

·

수정됨

0

어플리케이션 서버가 여러개 라는 뜻일까요?

DB 서버가 여러개라는 뜻일까요?

 

멀티 스레드 테스트를 통해

여러 애플리케이션 서버가 동시에 요청이 들어오는 경우는

비관,낙관적 락으로도 해결이 가능한걸 확인했고

DB가 분산서버일때 분산락을 이용해야한다고 이해했는데 맞을까요?

  

namelock도 결국엔 문자열에 건다해도 그 문자열 == 특정 데이터 인데

특정 데이터에 락== 비관적 락이랑 다를게 없는데 정확한 차이를 모르겠습니다.

문자열로 하면 뭐가 다른건지...

 

 

답변 2

1

최상용님의 프로필 이미지
최상용
지식공유자

won05121 님 안녕하세요.
애플리케이션 서버, 분산된 DB 둘 다 포함될 것 같습니다.

분산락은 분산된 환경에서 사용하는 락이므로 애플리케이션 서버, DB 상관없이 필요할 때 사용하는 것이라고 이해하시면 좋을 것 같습니다.

named lock 을 통해 락을 제어한다면 테이블에 있는 row 에 락을 거는게 아니다보니 데드락과 같은 상황에서 조금 더 자유로울 수 있을 듯합니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

won05121님의 질문에 대해 분산락의 의미와 적용 범위와 관련하여 정보를 찾아보았습니다. 분산락은 일반적으로 여러 대의 애플리케이션 서버가 공통된 데이터나 자원에 대한 접근을 동기화하기 위해 사용하는데, 이때의 ‘분산’은 애플리케이션 서버 자체가 분산되어 있다는 의미인 경우가 많습니다.

다음은 관련된 지식공유자의 답변 링크입니다:

  • 분산락의 정의가 궁금합니다: 이 게시물에서 지식공유자는 분산락이 여러 서버에서 공유된 데이터를 제어하기 위해 사용하는 기술이라고 설명하고 있습니다. 이 기술은 재고시스템과 같은 경우, 여러 서버에서 ‘재고’라는 공유된 데이터의 정합성을 제어하기 위해 사용됩니다.

  • 강의에서 배운 수단들은 모두 분산락이라고 할 수 있을까요?: 지식공유자는 MySQL의 pessimistic lock, optimistic lock, named lock과 Redis의 라이브러리를 이용한 lock 모두 분산락을 구현하는 방법이라고 언급하고 있습니다.

분산락은 데이터베이스가 분산된 환경에서도 사용될 수 있으며, 여러 대의 데이터베이스가 동일한 데이터에 대해 일관성을 유지해야 할 때 필요합니다. Named lock 같은 경우 에는 MySQL 내의 여러 세션 간에 락을 설정할 수 있어, 단순한 비관적 락보다 더 넓은 범위(여러 세션 또는 트랜잭션)에 걸쳐 락을 걸 수 있다는 특징이 있습니다.

다만, 비관적 락이나 낙관적 락 자체가 ‘분산락’이라고 부르기에는 조금 다른 면이 있습니다. 이런 락은 주로 단일 데이터베이스 시스템 내에서 데이터의 동시성을 제어하는 데 사용되며, 분산 환경(여러 개의 애플리케이션 서버가 있는 경우)에서는 외부 시스템(예: Redis를 사용한 분산락)을 사용해야 실제 분산락을 구현할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

won05121님의 프로필 이미지
won05121

작성한 질문수

질문하기