키-값 저장소(key-value store)는 비 관계형(non-relational) 데이터베이스이다.이 저장소에 저장되는 값은 고유 식별자(identifier)를 키로 가져야 한다.키와 값 사이의 이런 연결 관계를 "키-값" 쌍(pair)이라고 지칭한다. 키는 일반 텍스트일 수도 있고 해시 값일 수도 있으나, 성능상의 이유로 키는 짧을수록 좋다. 단일 서버 키-값 저장소한 대 서버만 사용하는 키-값 저장소를 설계하는 것은 쉽다.가장 직관적인 방법은 키-값 쌍 전부를 메모리에 해시 테이블로 저장하는 것이다.이 접근법은 빠른 속도를 보장하긴 하지만 모든 데이터를 메모리 안에 두는 것이 불가능할 수도 있다는 약점을 갖고 있다.이 문제를 해결하기 위한 개선책으로는 아래와 같은 것이 있다.데이터 압축(compr..
전체 글
많은 것들을 기록하고자 합니다.안정 해시는 수평적 규모 확장성을 달성하기 위해 요청 또는 데이터를 서버에 균등하게 나누기 위해 보편적으로 사용하는 기술이다.해시 키 재배치(rehash) 문제N개의 캐시 서버가 있을 때, 이 서버들에 부하를 균등하게 나누는 보편적인 방법은 아래의 해시 함수를 사용하는 것이다.`serverIndex = hash(key8) % N (N은 서버의 개수)`이 방법은 서버 풀(server pool)의 크기가 고정되어 있을 때, 그리고 데이터 분포가 균등할 때는 잘 동작한다. 하지만, 서버가 추가되거나 기존 서버가 삭제되면 문제가 생긴다.예를 들어, 1번 서버가 장애를 일으켜 동작을 중단했다고 하자. 서버 풀의 크기는 3으로 변하고, 그 결과 키에 대한 해시 값은 변하지 않지만 나머지(%) 연산을 적용하여 계산한..
네트워크 시스템에서 처리율 제한 장치(rate limiter)는 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치다. API에 처리율 제한 장치를 두면 좋은 점DoS(Denial of Service) 공격에 의한 자원 고갈(resource starvation)을 방지할 수 있음비용을 절감한다. 추가 요청에 대한 처리를 제한하면 서버를 많이 두지 않아도 됨서버 과부하를 막는다. 봇(bot)에서 오는 트래픽이나 사용자의 잘못된 이용패턴으로 유발된 트래픽을 걸러내는데 처리율 제한 장치를 활용할 수 있음처리율 제한 장치를 구현하는 데는 여러 가지 알고리즘을 사용할 수 있는데, 각각은 고유한 장단점을 갖고 있다. 처리율 제한 장치는 어디에 둘 것인가?`클라이언트` 측에 둘 수 도 있..
3장은 실제 면접의 접근법에 대해 설명해주고 있다. 나는 당장은 면접을 준비하고 있는 것은 아니지만, 실제 업무에서도 마찬가지로 책의 내용대로 사고하는 방식은 좋은 접근일 것 같다는 생각을 했다. 사실 면접이라는 것은 업무를 잘하는 사람을 뽑기 위함이니, 당연한 것이라고도 생각이 든다. 아래 내용에서 면접관을 상사라고 치환하면 동일한 내용일 것이다. 시스템 설계 면접은 두 명의 동료가 모호한 문제를 풀기 위해 협력하여 그 해결책을 찾아내는 과정에 대한 시뮬레이션이다.이 문제에는 정해진 결말도, 정답도 없다.면접은 설계 기술을 시연하는 자리이며, 설계 과정에서 내린 결정들에 대한 방어 능력을 보이는 자리이다.기술적 측면을 평가하는 것 이상으로, 협력에 적합한 사람인지, 압박이 심한 상황도 잘 헤쳐 나갈 자..
`개략적인 규모 추정(back-of-the-envelope estimation)`은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)을 행하여 추정치를 계산하는 행위로써, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것이다. 개략적인 규모 추정을 효과적으로 해 내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 함.특히, `2의 제곱수`나 `응답지연(latency) 값`, 그리고 `가용성에 관계된 수치들`을 기본적으로 잘 이해하고 있어야 함.2의 제곱수데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지를 알아야 한다.최소 단위 : 1바이트 = 8비트ASCII 문자 하나가 차지하는 메모리 크기 : 1바이트응답지연 값통상적인 컴퓨터에서 구현된 연산들의 응답..
단일 서버모든 컴포넌트가 단 한대의 서버에서 실행되는 간단한 시스템부터 설계해 보기웹 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행됨사용자 요청 처리 흐름사용자는 도메인 이름을 이용하여 웹사이트에 접속. 도메인 이름을 `도메인 이름 서비스(Domain Name Service, DNS)`에 질의하여 IP 주소로 변환하는 과정을 거침. DNS는 보통 제3 사업자(third party)가 제공하는 유료 서비스를 이용하게 되므로, 우리 시스템의 일부는 아님.DNS 조회 결과로 IP 주소가 반환됨해당 IP 주소로 HTTP(HyperText Transfer Protocol) 요청이 전달됨요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환이 요청들은 `웹 앱`과 `모바일 앱` 두 가지 종..
결측치는 데이터 분석에서 중요한 정보를 제공하지 않기 때문에 제거하거나 다른 값으로 대체 해야 합니다. 결측치를 처리하는 방법으로는 결측치가 많은 열은 열을 제거합니다. 결측치가 아주 많지 않은 열의 경우, 결측치를 가진 행만 제거합니다. 결측치를 가진 데이터를 삭제하면 안되는 경우(결측치가 몇 개 안되거나, 전체 데이터가 적은 경우), 결측치를 다른 값으로 치환합니다. 1. 결측치 확인하기 : isnull() `df.isnull().sum()`을 통해 각 열 별 결측치 개수를 확인할 수 있습니다. `df.isnull()` : 결측치가 있는 위치에서 True를 반환합니다. df.isnull().sum() >>> MovieId 5430 ImdbId 5430 TmdbId 5443 Title 5430 Year..
1. 특정 열 조회 `df.loc[:, [열 이름1, 열 이름2, ...]]` 형태로 조회할 열 이름을 리스트로 지정하여 특정 열을 조회할 수 있습니다. `df[[열 이름1, 열 이름2, ...]]` 형태로 인덱서를 생략함이 일반적입니다. `df[열 이름1]` : 조회할 열이 하나면 리스트 형태가 아니어도 됩니다. 하지만 이 경우에는 결과가 Series로 나오고, DataFrame 형태로 받고 싶다면 리스트로 넣어주면 됩니다. `df[[열 이름1]]` 2. 조건에 맞춰 필터링 DataFrame에서 조건을 충족하는 행을 가져올 수 있습니다. 조건식은 `==`, `>`, `