본문 바로가기

반응형

전체 글

(260)
[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..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 4. 처리율 제한 장치의 설계 처리율 제한 장치는 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치다. API를 호출하는 횟수를 제한하여 DoS 와 같은 공격을 방지하고 서버 과부하, 과도한 비용 등을 막을 수 있다. 이번장에서는 앞서 3장에서 설명한 4단계 접근법을 기반으로 처리율 제한 장치를 설계해본다.1. 문제 이해 및 설계 범위 확정처리율 제한 장치를 구현하는 데는 여러가지 알고리즘을 사용할 수 있다. 각각의 장단이 있기 때문에 문제에 대한 정의를 기반으로 어떤 알고리즘을 사용하는 것이 좋은지 고민해봐야 한다. 알고리즘 외에도 처리율 제한 장치의 위치, 제어 규칙, 시스템의 규모, 분산 환경 여부, 요청 제한 여부에 대한 알림 등등을 고려해야 한다. 2. 개략적 설계안 제시 및 동의 구하기- 처리율 제한 장..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3. 시스템 설계 면접 공략법 면접을 하다보면 시스템을 설계해보라는 질문을 받을 때가 있다. 시스템을 설계하는 과정에서의 커뮤니케이션, 엔지니어링에 대한 고민, 문제 해결 능력 등을 보기 위한 질문이다. 이 장에서는 이러한 시스템 설계 면접을 위한 접근법에 대해서 얘기해본다.효과적 면접을 위한 4단계 접근법문제 이해 및 설계 범위 확정문제에 대한 정의, 요구사항 등을 가정하는 단계이다. 문제를 듣고 바로 답을 고민하기 보다는 숨겨져 있는 조건들, 문제에 대한 제약 등을 통해서 요구사항을 파악하고 요건을 정리하여 목표를 제한한다. 필요한 기능들, 제품 사용자의 수, 회사의 성장 규모, 기존에 사용하는 기술 스택과 서비스 등에 대해서 질문하며 요건을 정리해볼 수 있다.개략적인 설계안 제시 및 동의 구하기정리된 요건을 기반으로 개략적인 설..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2. 개략적인 규모 추정 시스템의 용량이나 성능 요구사항을 파악하기 위해서 개략적인 추정이 필요한 경우가 있다. 효과적으로 이를 표현하기 위해서는 2의 제곱수, 응답지연값, 가용성에 관계되어 잘 이해하는 것이 중요하다.2의 제곱수데이터의 크기는 2의 제곱수로 표현할 수 있따. 데이터의 최소 단위는 1바이트이고, 8비트로 구성된다. ASCII 문자 하나가 차지하는 메모리 크기가 1바이트이다. 10제곱: 1KB20제곱: 1MB30제곱: 1GB40제곱: 1TB50제곱: 1PB응답지연값통상적인 연산들의 응답지연값을 분석하면 아래과 같이 정리할 수 있다. 메모리는 빠르지만 디스크는 느리다.디스크 탐색 (seek) 은 가능한 한 피하라.단순한 압축 알고리즘은 빠르다.데이터를 인터넷으로 전송하기 전에 가능하면 압축하라.데이터 센터는 보통 여..
[Spring] 자바 웹 애플리케이션 & WAS 동작 원리 파이썬 웹 애플리케이션을 실행하기 위한 Gateway Interface 서버인 WSGI, ASGI 등에 대해 정리한 적이 있다. 이러한 Gateway Interface 서버는 파이썬으로 구현되어 있어서, Django와 같은 파이썬 웹 프레임워크로 개발된 애플리케이션을 파이썬 모듈로 import 하여 사용할 수 있다. 이는 인터페이스 서버가 동작하는 프로세스 안에서 해당 애플리케이션 코드를 직접 import하여 Python object 또는 callable 형태로 사용한다는 의미이다. 그렇다면 자바에서는 어떨까? 파이썬의 Gateway Interface 서버와 유사하게, 자바에도 Tomcat,  Jetty 등의 웹 애플리케이션 서버 (WAS) 가 존재한다. 이들 서버 역시 요청을 받아 자바 애플리케이션을 ..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성 기술 인터뷰 중 '대규모 트래픽을 감당해야 하는 경우 시스템을 어떻게 설계할 것인가' 라는 질문을 받은 적이 있다. 대규모 트래픽, 대용량 데이터에 대한 솔루션들의 중요성은 알고있지만 실무에서 경험이 없어 제대로 공부해보지 못했다. 이번 기회에 '가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 기반으로 관련 내용들을 공부하고 이를 정리하려 한다.단일 서버단일 서버로 구성되어 있는 시스템에 대해서 생각해보자. 이 시스템은 웹앱, DB, 캐시 등을 하나의 단일 서버에서 실행한다.시스템에 사용자의 요청이 도달하여 처리하는 과정은 다음과 같다. 클라이언트: 사용자에 의해서 특정 도메인에 대한 요청 생성-> DNS: 도메인 이름을 IP 주소로 변환-> 클라이언트: 반환된 IP 주소로 HTTP 요청을 전달..

반응형