본문 바로가기

반응형

기타

(39)
[RabbitMQ] RabbitMQ 개념 설명 업무중 rabbitmq 를 사용할 상황이 생겼다. 이전에도 메시지 브로커를 사용해본적이 있지만 rabbitmq 는 사용해본적이 없다. 그래서 이번 기회에 rabbitmq 의 개념과 구조에 대해서 정리해보려 한다.1. 메시지 브로커RabbitMQ 는 메시지 지향 미들웨어를 위한 프로토콜인 AMQP 를 Erlang 으로 구현한 시스템으로 producer 와 consumer 사이에서 메시지를 중계해주는 메시지 브로커이다. RabbitMQ 를 사용하면 프로그램 간에 비동기적인 메시지 송수신이 가능하다.※ AMQP (Advanced Message Queuing Protocol)메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다. 메시지 지향, 큐잉, 라우팅 (p2p, pub-sub), 신뢰성, 보안 ..
[nginx] ssl 인증서 적용 특정 도메인에 https 로 접속하기 위해서는 서버에 ssl 인증서가 적용되어 있어야 한다. 이번에 ssl을 적용하는 서버는 앞단에 nginx 를 두어서 모든 요청이 nginx를 거치도록 하고있다. 이때문에 https를 사용하기 위해서는 nginx에 ssl 인증서를 적용해야 했다. 이를 위해서 다음과 같은 과정을 수행한다.1. ssl 인증서 키 확인ssl 인증서는 crt, cer, csr, pem 등등 다양한 형식을 가지고 있다. 이번에는 pem 형식의 ssl 인증서를 제공받아 이를 적용하게 되었다. ssl 인증서는 인증서 파일인 fullchain.pem 과 키 파일인 privkey.pem 으로 구성되어 있다. (파일 명칭은 달라질 수 있다.)2. nginx configuration 파일 수정ssl 인증..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 9. 웹 크롤러 설계 웹 크롤러는 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 프로그램이다. 검색 엔진 인덱싱, 웹 아카이빙, 웹 마이닝, 웹 모니터링 등 다양한 목적으로 사용된다.1. 문제 이해 및 설계 범위 확정웹 크롤러의 기본 알고리즘은 다음과 같다. 1. URL 집합이 입력으로 주어지면, 해당 URL들이 가리키는 모든 웹 페이지를 다운로드한다.2. 다운받은 웹 페이지에서 URL들을 추출한다.3. 추출된 URL들을 다운로드할 URL 목록에 추가하고 위의 과정을 처음부터 반복한다. 기본 알고리즘을 바탕으로 많은 양과 다양한 데이터를 지원할 수 있는 확장성과 저장용량, 장애나 악성 코드와 같은 비정상적인 입력과 웹 페이지에 대한 안정성, 크롤링하고자 하는 페이지에 너무 많은 요청을 보내지 않도록 하는 등 다양한 사항을 고..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 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를 만드는 ..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 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..

반응형