인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

송재근님의 프로필 이미지
송재근

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

좋아요 수 구현

실무에서의 락

해결된 질문

작성

·

310

1

안녕하세요. 현재 좋아요 부분에서 락에 관련해서 강의를 듣고 있습니다.

 

궁금한 점은 실무에서는 어떻게 사용을 하시는지 궁금합니다.

왜냐하면 대부분 실무에서는 테이블 자체를 논리적 외래키로 전부 가져가는 경우를 많이 봤었습니다.

외주를 부탁한 외부 업체 또한 낙관적 락을 사용하는 케이스를 봤구요.

 

강사님께서 일하시는 곳에서는 락의 3가지 케이스를 다양하게 필요에 맞게 사용하는 건가요?!

답변 2

2

쿠케님의 프로필 이미지
쿠케
지식공유자

재근님, 안녕하세요!

 

말씀하신대로 실무에서는 논리적 외래키로 가져가는 경우가 많습니다.

대규모 시스템에서는 잠깐의 병목도 장애가 날 수 있기 때문에 비관적 락은 가능하다면 피하려곤 합니다.

하지만 장애 위험도와 개발 비용을 적절히 고려하여 사용할 수도 있습니다.(강의에서는 단일 레코드에 비교적 적은 쓰기 트래픽으로 인한 락을 일시적으로 점유하므로, 비관적 락도 적절하다고 판단할 수 있는 배경)

낙관적 락도 자주 사용하는데, 사용자 유즈케이스에 따라 필요하다면 실패 시에 재처리 동작을 수행하기도 합니다.

그리고 정합성 문제는 꼭 락을 안 잡고 해결 할 수도 있습니다.(이 부분은 인기글 강의에서 배우는 분산 트랜잭션이란 개념을 활용할 수도 있습니다!)

꼭 DB 락을 이용하지 않고, 다른 시스템의 락을 이용할 수도 있고요.(조회수 강의에서 배우게 될 레디스를 이용한 락 개념처럼)

 

개인적으로는 select for update는 언급된 위험성(락 점유가 길어질 수 있는) 때문에 굳이 잘 사용하진 않는 편이고,

다른 부분(DB 락 외의 다른 방법으로도)은 상황에 따라 적절히 사용하고 있습니다!

 

혹시 더 궁금한 점 있으시면 편히 문의 주세요!

0

안녕하세요, 인프런 AI 인턴입니다. 송재근님.

락(lock)과 관련된 질문에 대해 답변드리겠습니다. 락은 데이터의 무결성과 동시성 문제를 해결하기 위한 중요한 기법으로, 실무 환경에서 다양한 방식으로 적용됩니다.

실무에서 락의 사용

  1. 비관적 락(Pessimistic Lock): 주로 데이터의 충돌 가능성이 높은 환경에서 사용됩니다. 데이터베이스에서 트랜잭션이 충돌할 가능성이 있을 때 데이터의 변경을 막기 위해 사용됩니다. 예를 들어, 은행 업무와 같이 동시에 여러 사용자가 접근하여 같은 데이터를 수정하려고 할 때 활용될 수 있습니다.

  2. 낙관적 락(Optimistic Lock): 데이터 충돌의 가능성이 낮은 환경에서 효율적입니다. 보통 애플리케이션 레벨에서 구현되며, 데이터 버전 관리를 통해 충돌 감지를 합니다. 많은 웹 기반 애플리케이션에서 사용자 요청이 자연스럽게 나뉘는 경우에 적합합니다.

  3. 논리적 외래키: 데이터의 일관성을 유지하기 위해 논리적으로 외래키를 사용하는 경우가 있습니다. 이는 데이터베이스의 락과는 다르지만, 엔터프라이즈 애플리케이션에서 엔티티 간의 관계를 관리하고 분산 시스템의 일관성을 유지하는 데 도움을 줍니다.

락 사용의 고려사항

  • 성능: 비관적 락은 자원의 대기 시간을 증가시킬 수 있어 성능에 영향을 미칩니다. 따라서 이점과 단점을 잘 고려해야 합니다.
  • 트랜잭션 범위: 락이 적용되는 범위가 좁을수록 오버헤드가 적습니다. 가능한 작게 설정하고, 필요한 부분에서만 사용하는 것이 중요합니다.
  • 충돌 빈도: 데이터 충돌이 빈번하지 않다면 낙관적 락을 고려하는 것이 좋습니다.

지식 공유자님의 다양한 경험에 따라, 락의 선택은 구체적인 상황에 맞춤형으로 이루어져야 합니다. 각 케이스에 맞는 최적의 락 전략을 수립하는 것이 실무 성공의 열쇠입니다.

관련된 내용을 더 탐색하시려면, 스프링에서의 트랜잭션과 락 구현 전략 (게시글 제목)이라는 게시글이 도움이 될 수 있습니다.

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

송재근님의 프로필 이미지
송재근

작성한 질문수

질문하기