전체 글
데이터중심 애플리케이션 설계 - 7장 [트랜잭션] 리뷰 - 1
6장과 비교했을 때 굉장히 내용이 많다. 다양한 정의 및 내용이 나오다보니 개인적으로 헷갈리는 부분이 많았다. 트랜잭션 (Transaction) 애플리케이션에서 다수의 읽기와 쓰기 작업을 하나의 논리적 단위로 묶는 방법 (개념적으로 하나의 트랜잭션 내에서는 모든 읽기 / 쓰기는 하나의 연산으로 실행) 트랜잭션은 전체가 성공(commit) or 실패(abort, rollback) 된다. 트랜잭션이 필요한 이유 1. DB, SW, HW, 모두 언제라도 연산 및 작업이 실패할 수 있다. 2. 네트워크 오류로 인해 노드 사이의 통신 실패 3. Client 사이의 경쟁 조건으로 인해 예상치 못한 버그 유발 가능 ACID 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속..
프로그래머스 - KAKAO k진수에서 소수 개수 구하기 [파이썬]
2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기 ( 파이썬 Python ) 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0 처럼 소수 양쪽에 0이 있는 경우 P0 처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우 ..
Service Discovery 패턴
Service Discovery 배경 : MSA 분산 환경 : 서비스 간 원격 호출 구성 (일반적으로 원격 서비스 호출 - IP / port 이용 ) 클라우드 환경 내에서 오토 스케일링 등에 의해 동적 생성, 컨테이너 기반 배포 등으로 서비스 IP가 동적으로 자주 변경될 수 있음 또한 책에 나온 것 처럼 파티션 리벨런싱에 의해 노드에 할당된 파티션이 바뀌는 상황 또한 결국 dest 노드를 찾아야하는 상황 → (service discovery가 필요) 따라서 클라이언트가 서비스를 호출하기 위해서는 서비스의 위치(or Ip/Port) 를 알아야하는데, 이를 보통 service registry 에 등록해놓음 Service Registry 서비스 디스커버리의 가장 중요한 포인트이며, 이 때문에 높은 가용성 및 ..
데이터중심 애플리케이션 설계 - 6장 [파티셔닝] 리뷰 - 3
이번 포스팅에서는 6장에서의 3번째 주제 파티션 재균형화에 대해 리뷰한다. 파티션 재균형화 재균형화(Rebalancing) : 특정 노드에 대한 데이터와 요청을 다른 노드로 옮기는 과정 재균형화에 대한 요구사항 재균형화 이후에는 부하가 클러스터의 노드들에 대해 균등하게 분배 재균형화 도중에도 DB에 read/write 요청이 가능해야함 재균형화는 빠르게 실행되어야하며, 네트워크, 디스크 I/O 부하를 최소화할 수 있도록 노드간의 데이터 이동은 최소로 이동 파티션 리벨런싱 전략 사용하면 안되는 방법 : 해시값에 mod N 연산 실행 문제점 : 노드 개수 N 이 바뀌면, 대부분의 키의 위치가 노드 사이에서 옮겨진다. 즉, 필요이상의 데이터가 이동하게 되므로 리벨런싱 비용이 너무 많아짐 # 파티션 개수 고정 ..
데이터중심 애플리케이션 설계 - 6장 [파티셔닝] 리뷰 - 2
인덱스와 파티셔닝의 상호 작용 key - value 데이터 모델에 의존한 파티셔닝 방식 = 기본키를 통해 레코드를 식별한다. 파티셔닝과 보조 색인 보통 보조색인의 역할 : 특정한 값이 발생한 항목을 검색하는 수단으로 이용 ex) user_123 의 실행 액션 조회 / 'water' 가 들어간 글을 모두 조회 보조 색인이 있는 DB 색인 방식 2가지 문서 기반 파티셔닝 [local Index] 용어 기반 파티셔닝 [Global Index] 문서 기반 보조 색인 파티셔닝 문서 파티셔닝 색인 local index(지역 색인)으로 칭하기도 함 각 파티션은 본인의 보조 색인을 유지 보조 색인은 해당 파티션이 속하는 document만 담당 [Create, Update, Delete 시의 파티션만 다루면 된다] 장점..
데이터중심 애플리케이션 설계 - 6장 [파티셔닝] 리뷰 - 1
5장 리뷰 작성을 미루다가 6장을 먼저 공부해버렸다. 이후에 5장도 마저 작성하도록한다... 6장 preview 파티셔닝 방법 인덱스와 파티셔닝 간의 상호 작용 재균형화 데이터베이스가 올바른 파티션을 찾아 요청을 전달하고 질의를 실행하는 방법 파티셔닝 데이터 셋이 크거나, 질의 처리량이 매우 높은 경우 데이터를 작은 단위[파티션]으로 쪼개는 작업 (≒ 샤딩) ex) - 샤드(MongoDB, Elasticsearch, Solr), 리전 (Hbase), 태블릿 (Bigtable) - 브이노드 (Cassandra, Riak), 브이버켓 (Couchbase) 파티션은 보통 각 데이터 단위(record, row, document)가 하나의 파티션에 속함 물론 파티셔닝과 샤딩의 정확한 의미의 차이는 존재합니다. 파..
프로그래머스 - KAKAO 두 큐 합 같게 만들기 [파이썬]
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 : 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다. 큐는 먼저 집어넣은 원소가 먼저 나오는 구..
데이터중심 애플리케이션 설계 - 4장 [부호화와 발전] 리뷰
Data outlives code (데이터는 코드보다 오래 산다) 최근 서비스는 무중단배포(ex_ 블루그린배포) - staged rollout 방식과 마이크로서비스와 같은 구조적 차이를 띈다. 그만큼 서비스 내부 코드는 더욱 자주 바뀐다. # 호환성 상위 호환성 : 이전 코드는 새로운 버전의 데이터를 읽을 수 있어야한다. 하위 호환성 : 새로운 코드는 예전 버전의 데이터를 읽을 수 있어야한다. # 직렬화(부호화), 역직렬화(복호화) 직렬화(부호화, 마샬링) : 데이터를 인메모리 표현 -> 바이트열 변환 역직렬화(복호화, 언마샬링) : 데이터를 바이트열 -> 인메모리 표현으로 변환 데이터 부호화 4가지 방식 언어별 내장 라이브러리 JSON, XML, CSV binary Encoding Libaray bas..