전체 글 (249) 썸네일형 리스트형 [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 9. 웹 크롤러 설계 웹 크롤러는 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 프로그램이다. 검색 엔진 인덱싱, 웹 아카이빙, 웹 마이닝, 웹 모니터링 등 다양한 목적으로 사용된다.1. 문제 이해 및 설계 범위 확정웹 크롤러의 기본 알고리즘은 다음과 같다. 1. URL 집합이 입력으로 주어지면, 해당 URL들이 가리키는 모든 웹 페이지를 다운로드한다.2. 다운받은 웹 페이지에서 URL들을 추출한다.3. 추출된 URL들을 다운로드할 URL 목록에 추가하고 위의 과정을 처음부터 반복한다. 기본 알고리즘을 바탕으로 많은 양과 다양한 데이터를 지원할 수 있는 확장성과 저장용량, 장애나 악성 코드와 같은 비정상적인 입력과 웹 페이지에 대한 안정성, 크롤링하고자 하는 페이지에 너무 많은 요청을 보내지 않도록 하는 등 다양한 사항을 고.. [Linux] systemd, service, systemctl 리눅스 서버에서 시스템 서비스를 실행하기 위해 systemctl 또는 service 명령어를 사용한다. 이 글에서는 해당 명령어들이 어떤 의미를 가지고 어떻게 동작하는지, 시스템 서비스는 어떤 것들인지에 대해서 정리한다.1. systemdservice와 systemctl을 이해하기 위해서는 먼저 systemd에 대한 이해가 필요하다. systemd는 리눅스에서 PID 1번을 차지하고 있는 프로세스로 리눅스에서 실행되는 서비스, 데몬들을 관리하는 역할을 한다. 데몬이란, 사용자가 직접적으로 제어하지 않고 백그라운드에서 여러 작업을 수행하는 프로그램을 말한다. 리눅스가 부팅되면 네트워크 요청을 처리하는 데몬, 하드웨어 동작을 처리하는 데몬 등 시스템에 필요한 여러 데몬들이 실행된다. 리눅스에서는 이러한 데몬.. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 8. URL 단축기 설계 1. 문제 이해 및 설계 범위 확정이 장에서 설계할 URL 단축기의 기능은 다음과 같다. - URL 단축: 주어진 긴 URL을 짧게 줄인다.- URL Redirection: 축약된 URL로 HTTP 요청이 오면 원래 URL로 안내한다.- 높은 가용성과 규모 확장성, 장애 감내2. 개략적 설계안 제시 및 동의 구하기- API 엔드포인트URL 단축기를 사용할 수 있도록 클라이언트에게 다음의 두가지 엔드포인트를 제공한다.1) URL 단축용 엔드포인트단축하고 싶은 URL을 인자로 실어서 POST 요청을 보내면 단축된 URL을 응답으로 반환한다. POST /api/v1/data/shorten- 인자: {longUrl: longURLstring}- 반환: 단축 URL2) URL 리다이렉션용 엔드포인트단축 URL에 .. [PostgreSQL] DB 백업 - pg_dump 업무를 하던 중, PostgreSQL DB를 직접 파일로 백업해야할 필요가 있었다. 직접 DB의 데이터 디렉토리를 압축할 수도 있고 AWS와 같은 플랫폼 서비스를 사용한다면 스냅샷을 찍는 방법으로 백업을 할 수 있을 것이다. 이번 경우에는 런타임중에 실행중인 온프레미스 DB 서버의 데이터를 백업이 필요했고 이와 관련하여 찾아보던 중 pg_dump 유틸을 발견했다. 이 글에서는 pg_dump를 사용하여 백업하는 방법을 정리해본다.1. pg_dumppg_dump는 PostgreSQL 백업을 위한 유틸리티이다. 명령어를 통해 PostgreSQL database 를 스크립트 파일이나 아카이브 파일 형식으로 덤프하여 백업할 수 있다. - 스크립트 형식: DB를 백업 당시의 상태로 재구성하기 위한 SQL문이 포함된.. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 7. 분산 시스템을 위한 유일 ID 생성기 설계 분산 시스템에서는 단순히 DB 의 auto_increment 속성을 통한 기본 키를 사용하기 어렵다. 서버 한 대로는 모든 요청을 처리하기 힘들고, 여러 DB를 사용하게 되면 키의 유일성과 딜레이를 두고 고민해야한다. 그런 이유에서 이 장에서는 분산 시스템에서 사용할 수 있는 유일 ID 생성기를 설계해본다.1. 문제 이해 및 설계 범위 확정이 장에서 설계할 시스템에 대한 요구 사항을 다음과 같이 정리했다. - ID는 유일해야 한다.- ID는 숫자로만 구성되어야 한다.- ID는 64비트로 표현될 수 있는 값이어야 한다.- ID는 발급 날짜에 따라 정렬 가능해야 한다.- 초당 10,000개의 ID를 만들 수 있어야 한다.2. 개략적 설계안 제시 및 동의 구하기분산 시스템에서 유일성이 보장되는 ID를 만드는 .. [Docker] hosts 파일과 docker-compose extra_hosts 도메인으로 서버에 접속시 이에 매핑되는 ip 주소로의 변환이 필요하다. 일반적인 경우 dns 서버를 통해 도메인 주소에 해당하는 ip 주소를 찾아와서 접속한다. dns 서버를 거치지 않고 로컬에서도 변환할 수 있는데, 이때 사용되는 것이 hosts 파일이다. docker-compose 를 기반으로 서버를 구축하면서 서비스 간의 통신을 위해 hosts 에 도메인을 등록하였다. 그런데 docker 서비스를 재시작 할 때마다 hosts 파일이 초기화 되면서 매번 수정을 해주어야 하는 불편함이 있었다. 이를 해결하기 위해서 docker-compose 의 extra_hosts 옵션을 사용했다. 이 글에서는 extra_hosts 옵션을 사용하면서 찾아본 hosts 파일과 extra_hosts 등의 내용을 정리한다... [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 6. 키-값 저장소 설계 키-값 저장소 (key-value store) 는 데이터를 '키-값' 쌍으로 저장하는 비 관계형 데이터베이스이다. 키는 저장소에서 유일해야 하며, 값은 키를 통해서만 접근할 수 있다. 키는 텍스트나 해시 값일 수도 있고, 값은 문자열이나 리스트, 또는 객체일 수도 있다. 주로 레디스, 아마존 다이나모, memcached 등이 사용된다. 이 장에서는 다음의 두가지 연산을 지원하는 키-값 저장소를 설계해본다.- put(key, value): 키-값 쌍을 저장소에 저장한다.- get(key): 인자로 주어진 키에 매핑된 값을 반환한다.1. 문제 이해 및 설계 범위 확정키-값 저장소를 설계할 때는 키-값 쌍의 크기, 데이터의 크기, 가용성, 확장성, 데이터 일관성, 응답 지연시간 등을 고려해야 한다. 이러한 요.. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 5. 안정 해시 설계 안정 해시는 요청이 들어왔을때 이를 균등하게 작업 서버로 나누기 위한 방법이다. 요청을 균등하게 나누기 위해서 고려해야 하는 사항과 안정해시 알고리즘 등을 정리한다.1. 해시 키 재배치 문제N개의 캐시 서버가 있을 때, 일반적으로 부하를 균등하게 나누는 방법은 해시 함수를 사용하는 것이다.인덱스 = hash(key) % N // (서버의 개수 N)이 방법은 서버 풀 (server pool) 의 크기가 고정되어 있고 데이터의 분포가 균등할 때는 잘 동작한다. 하지만 서버의 추가, 삭제가 발생하거나 데이터의 분포가 특정 서버로 몰리는 경우에는 문제가 된다.- 안정 해시 (Consistent hash)안정 해시는 해시 테이블의 크기가 고정될 때, 평균적으로 k/n 개의 키만 재배치하는 해시 기술이다. 이때 k.. 이전 1 2 3 4 ··· 32 다음 목록 더보기