작성
·
101
·
수정됨
0
강의 잘 들었습니다🙏
락을 구현할 때 ReadLock을 만들었는데 전체 강의 코드를 보면 ReadLock을 사용하는 데가 없더라고요(DB 쪽은 스킵했습니다). 우리 프로젝트에만 해당하는 특별한 경우인지 실무에서도 WriteLock 사용이 압도적으로 높은 것인지 궁금합니다.
락을 직접 구현한 이유 중 하나가 (동일 스레드 기준) 쓰기 락이 걸려있을 때 읽기를 허용하기 위한 것도 있었는데, 읽기 락을 만들어놓고 한 번도 사용하지 않았다는 사실이 약간 신기하게 느껴졌습니다.
+) 답변하시기 전에 추가 질문
서두에 말씀하신, 직접 락을 구현하는 이유가, 기획 데이터는 대부분 읽기를 수행하는데(잘 안 바뀌는 데이터), 굳이 스레드 간에 상호배타적일 필요가 없기 때문에(표준을 이용한 방법이 있으나), 읽기에 대해선 모든 스레드가 접근할 수 있게 ReaderLock이 필요한 걸로 이해했습니다.
그렇다면 운영에서 기획 데이터에 아이템을 추가한 걸 화면에 보여줘야 할 때는, WRITE_LOCK이 사용되나요?..기획 데이터를 실시간으로 읽어오는 건지 업데이트를 하면 서버를 재시작하는 건지 궁금합니다. 실무 경험이 없다 보니까 기획 데이터로 예를 들어주실 때 상황이 명확하게 안 그려지네요. 서버를 재시작하는 거라면 이미 변경된 데이터를 서버 구동 때 읽어오는데 쓰기 락이 왜 필요한지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. literate_t님.
락을 사용할 때 ReadLock과 WriteLock의 역할이 어떻게 다른지 궁금해 하시는 것 같습니다. 실제로 실무에서 WriteLock이 더 많이 사용되는 경향이 있는지, 그리고 본인 프로젝트에서는 왜 ReadLock을 사용하지 않았는지에 대해 고민이 있으신 것 같습니다.
먼저, ReadLock과 WriteLock의 차이에 대해 간단히 설명드리자면:
- ReadLock(읽기 락): 여러 스레드가 동시에 데이터를 읽을 수 있도록 합니다. 즉, 데이터 읽기 시에는 경합이 없으므로 극대화를 위한 것입니다.
- WriteLock(쓰기 락): 데이터의 일관성을 유지하기 위해 한 번에 하나의 스레드만 데이터를 수정할 수 있도록 보장합니다. 여러 스레드가 동시에 데이터 쓰기를 시도할 경우 경합이 발생할 수 있으므로 이를 방지합니다.
To address your specific question:
1. 실무에서의 사용 빈도: 실무에서는 데이터의 수정보다 읽기가 훨씬 빈번하게 발생하는 경우가 많습니다. 즉, 대부분의 상황에서는 데이터의 읽기 시 성능을 최대화하기 위해 여러 스레드가 동시에 접근할 수 있도록 ReadLock이 더 많이 사용됩니다. 하지만 특정 프로젝트나 시스템 설계에 따라 WriteLock이 더 중요할 수도 있습니다.
더 심화된 내용을 원하신다면 아래의 링크를 참고해 인사이트를 얻으실 수 있을 것 같습니다:
- RW락 질문입니다.
- writeLock, writeUnlock, readLock, readUnlock 관련 질문입니다
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.