도도한 개발자

[TIL] 2023/08/24 본문

TIL

[TIL] 2023/08/24

Kiara Kim 2023. 8. 24. 23:55

🐈‍⬛ 오늘 공부한 내용

  • 분산 키-값 저장소
    • CAP 정리: 데이터 일관성 / 가용성 / 파티션 감내
  • [스프링 DB 2편 - 데이터 접근 활용 기술]
    • Querydsl
    • 스프링 트랜잭션
    • 스프링 트랜잭션 전파

 🐾 느낀 점 & 배운 점

아침에 일어나면 책 <가상 면접 사례로 배우는 대규모 시스템 설계 기초>를 읽으며 하루를 시작하고 있다. 술술 읽혀 좋긴 하다만 중간중간 이 기술을 우리 프로젝트에 어떻게 도입해보면 좋을까라는 고민에 빠져 책을 덮기까지 오래걸린다. 
 
오늘은 6장 키-값 저장소 설계와 7장 분산 시스템을 위한 유일 ID 생성기 설계를 학습했는데 키-값 저장소를 읽으며 정리해보고 싶은 부분을 여기에 간략히 남겨보고자한다.
 
분산 시스템을 설계할 때 꼭 알아두어야 할 이론이 있는데 바로 CAP(Consistency, Availability, Partition Tolerance theorem) 정리다. CAP는 각각 데이터 일관성, 가용성, 파티션 감내를 의미하는데 우선 이 세 개념을 짚고가야한다.
 

  • 데이터 일관성
    • 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에서든 항상 같은 데이터를 볼 수 있어야 한다.
  • 가용성
    • 일부 노드에 장애가 발생했더라도, 분산 시스템에 접속하는 모든 클라이언트는 항상 응답을 받을 수 있어야 한다.
  • 파티션 감내
    • 두 노드 사이에 통신 장애(=네트워크 파티션)가 발생했더라도, 시스템은 계속 동작해야 한다.

이 세가지 조건을 모두 만족한다면 정말 좋겠지만 아쉽게도 그런 설계방식은 불가능하다. 셋 중 두가지를 충족한다면 반드시 나머지 하나는 포기해야하는 구조다.
 
그럼 세 가지 경우로 나눌 수 있다. 
- CP 시스템: 일관성 - 파티션 감내
- AP 시스템: 가용성 - 파티션 감내
- CA 시스템: 일관성 - 가용성
 
그러나 네트워크 장애를 고려하는 건 불가피하므로 통상 파티션 감내는 반드시 만족되도록 설계해야 한다. (즉, CA는 없다)
 
사실 여기서 내가 계속 헤맸던 부분이 있는데 바로 가용성이다. 책을 읽으면서 가용성이 뭐였지? 하면서 앞장으로 되돌아간 횟수가 다섯번이 넘는다. 이정도면 물고기가 아닌가 싶고.. 암튼 그래서 내가 궁금한 것은 가용성이었다.
 

가용성이란 모든 클라이언트의 Read와 Write에 대해 항상 응답이 가능(성공)해야 함을 말한다. 내고장성이라고도 하며, 내고장성을 가진 어떤 클러스터 내에 몇 개의 노드가 망가지더라도 정상적인 서비스가 가능하다. 이는 시스템 아키텍처 설계에서 말하는 고가용성(High Availability)와 유사한 개념으로 볼 수 있다.
예를 들어, 스마트폰과 PC에서 은행앱을 사용할 때 서로 잔고가 일치하지 않더라도 잔고를 조회할 수 있어야 한다.

예시를 들으니 이해하기 한결 수월하다. 가용성 설계를 고려할 때 일관성을 아주 포기하지 않는 방법으로 결과적 일관성 모델을 선택한다. 위 예시에서 '잔고를 조회할 수 있다'라는 부분에서 가용성을 만족했다는 것을 알 수 있고,  '서로 잔고가 일치하지 않더라도' 부분이 일관성을 포기한 것 같지만 결국엔 잔고가 일치되도록 하니 아주 포기한 것은 아닌 거지.
* 결과적 일관성: 갱신 결과가 결국에는 모든 사본에 동기화되는 모델
 
스프링 DB 2편을 드디어 다 봤다. 커리큘럼에 Querydsl이 들어있었지만 생각보다 가볍게 훑고 지나가서 이 부분을 깊에 학습하려면 Querydsl만 다루는 강의를 찾아보는 것도 방법일 것 같다.
 
마지막 섹션인 스프링 트랜잭션 전파를 학습하는 내내 너무 재밌었다. 처음엔 트랜잭션 AOP의 동작 순서가 엄청나게 복잡해보였는데 강의를 다 들을 때 쯤 김영한님이 현상을 설명하기 전에 잠깐 멈추고 혼자 설명할 수 있을 정도로 잘 이해한 것 같다.(너무 오만한가?ㅋㅋ) 그런데  강의를 듣는 것만으로는 아주 내 것이 되는 것은 아니므로 이 부분은 꼭 정리해서 올릴 예정이다. 
 
한 줄 요약: 트랜잭션 전파 참 재밌네
 

💭 감정회고

오늘도 귀염둥이 분리불안 아기 강아지 해리를 집에 두고 나갔다 왔다. 외출 전 심신 안정과 하우스 훈련을 하고 나가야 하는데 40분이나 걸렸다. 안돼 기다려 하고 현관 문 열면 쪼르르 나오고 다시 돌아가서 주의주고 하기를 한 60번 반복했더니 땀이 너무 나서 나가기도 전에 지쳤다. 그래도 홈캠으로 보니 낑낑거리기만 하고 짖진 않아서 참 기특했다.
 
굉장히 짧은 시간동안 스프링, 스프링 DB 1, 2 강의를 끝냈다. 갑자기 많은 지식이 머릿속에 들어와서 이제는 조금 쉬면서 정리하는 시간을 가질 예정이다. 아 근데 방학 너무 짧다..

'TIL' 카테고리의 다른 글

[TIL] 2023/08/26  (0) 2023.08.26
[TIL] 2023/08/25  (0) 2023.08.25
[TIL] 2023/08/23  (6) 2023.08.23
[TIL] 2023/08/22  (2) 2023.08.22
[TIL] 2023/08/21  (2) 2023.08.21