강의

멘토링

커뮤니티

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

백승민님의 프로필 이미지
백승민

작성한 질문수

한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편

(8.1) 좋아요 기능 설계하기

궁금한게 있습니다 선생님!

작성

·

6

·

수정됨

0

안녕하세요 선생님.
강의를 모두 수강한 후 복습을 하던 중 궁금한 점이 생겨 질문드립니다.

 

좋아요 기능에서 동시성 문제를 해결하기 위해 행 잠금을 사용하는 것으로 이해했습니다.
이 경우, 첫 번째 유저의 좋아요 요청이 처리되는 동안 해당 행이 잠기게 되는데, 만약 동시에 많은 사용자(수백~수천 명)가 좋아요 버튼을 누르는 상황 이라면


요청들이 순차적으로 대기하게 되어 응답 지연이 발생되지는 않나요??


또한 이런 이유 때문에 클라이언트 단에서는 낙관적 업데이트 를 적용하는게 맞는걸까요??

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 백승민 님.

좋아요 기능에서 행 잠금을 통해 동시성 문제를 해결하는 방식을 이해하셨다니 다행입니다. 익숙하지 않은 개념일 수 있지만, 데이터베이스에서의 행 잠금은 여러 사용자의 데이터 변경 시 무결성을 유지하는 데 유용합니다. 그러나 이 방식이 대량의 동시 요청에서 어떻게 작동하는지 궁금하실 수 있습니다.

동시성 문제와 응답 지연

  1. 행 잠금(Fine-grained Locking): 데이터베이스의 특정 행에 대한 잠금은 동시에 여러 사용자가 해당 행을 수정하려 할 때 데이터 무결성을 보장합니다. 그러나 대량의 동시 요청이 발생하면, 실제로 요청들이 대기 상태가 될 수 있습니다. 이 경우 비효율적인 대기 시간을 줄이기 위해 몇 가지 방법이 있습니다.

  2. 대기열 처리(Queue Processing): 요청을 처리하기 위한 대기열(Queue)을 사용하여 요청을 순서대로 처리할 수 있습니다. 이렇게 하면 갑작스러운 트래픽 증가로 인한 응답 지연을 최소화할 수 있습니다.

  3. 비동기 처리 및 로드 밸런싱(Load Balancing): 비동기 처리와 로드 밸런싱을 사용하여 요청 처리를 분산하거나 병렬화할 수 있습니다. 여러 서버가 각각의 요청을 동시에 처리함으로써 응답 지연을 크게 줄일 수 있습니다.

  4. 캐싱(Caching): 사용자가 좋아요 수 등의 데이터에 직접 접근하더라도, 캐싱을 활용하면 실시간으로 행을 잠금하지 않고도 응답 시간을 크게 줄일 수 있습니다.

추가 설명과 참고할 수 있는 자료:

데이터베이스의 행 잠금을 사용하여 동시성과 데이터 무결성을 유지하려는 경우가 많지만, 성능 측면에서 위에 언급된 기법들을 함께 사용하여 대규모 동시성을 관리하는 전략도 필요합니다. 보다 구체적은 해결 방법을 원하시면 아래 링크들을 추천드립니다:

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

백승민님의 프로필 이미지
백승민

작성한 질문수

질문하기