가상 면접 사례로 배우는 대규모 시스템 설계 기초 8장: URL 단축기 설계
·
Server/System Design
가상 면접 사례로 배우는 대규모 시스템 설계 기초 8장: URL 단축기 설계를 읽고 정리합니다. 개략적 설계안API 엔드포인트클라이언트는 서버가 제공하는 API 엔드포인트를 통해 서버와 통신합니다. 이 글에선 엔드포인트를 REST 스타일로 설계합니다. URL 단축키는 기본적으로 두 개의 엔드포인트를 필요로 합니다.URL 단축용 엔드포인트: 새 단축 URL을 생성하고자 하는 클라이언트는 이 엔드포인트에 단축할 URL을 인자로 실어서 POST 요청을 보내야 합니다. 이 엔드포인트는 다음과 같은 형태를 띕니다:POST /api/v1/data/shorten- 인자: {longUrl: longURLstring}- 반환: 단축 URLURL 리디렉션용 엔드포인트: 단축 URL에 대해서 HTTP 요청이 오면 원래 UR..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 7장: 분산 시스템을 위한 유일 ID 생성기 설계
·
Server/System Design
가상 면접 사례로 배우는 대규모 시스템 설계 기초 7장: 분산 시스템을 위한 유일 ID 생성기 설계를 읽고 배운 점을 정리합니다. 분산 환경에서는 auto_increment 같은 방법을 적용하기 어렵습니다. 분산 시스템에서 유일성이 보장되는 ID를 만드는 것은 아래와 같은 방법이 있습니다.multi-master replicationUUIDticket servertwitter snowflake 접근법Multi-master replication다중 마스터 복제는 아래와 같은 구성을 가집니다.이 접근법은 데이터베이스의 auto_increment를 사용하며, 증가시킬 때 1만큼 증가시키는 것이 아닌 k(데이터베이스 수)만큼 증가시키는 방법입니다. 이렇게 하면 규모 확장성 문제를 어느정도 해결할 수 있습니다. 데..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 6장: 키-값 저장소 설계
·
Server/System Design
가상 면접 사례로 배우는 대규모 시스템 설계 기초 6장: 키-값 저장소 설계를 읽고 배운 내용을 정리합니다. key-value 데이터베이스는 비관계형 데이터베이스이다. 여기에 저장되는 값은 고유 식별자(identifier)를 키로 가져야 한다. 키와 값 사이의 연결 관계를 key-value pair 라고 합니다. 키는 성능상의 이유로 짧을수록 좋습니다. key-value pair에서 값은 문자열, list, object 등 무엇이든 될 수 있습니다. 문제 이해 및 설계 범위 확정해당 글에서는 아래의 조건으로 설계해볼 예정입니다.key-value pair의 크기는 10KB 이하이다.큰 데이터를 저장할 수 있어야 한다.높은 가용성을 보장해야 한다.높은 규모 확장성을 보장한다. (오토스케일링이 가능해야 함)데..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 5장: 안정 해시 설계
·
Server/System Design
안정 해시 설계에 대해 배운 점을 정리하였습니다. 샤딩이 뭐냐? 하면 이런겁니다. 데이터베이스 노드가 3개 있다면, 데이터베이스에 데이터를 읽고 쓸 때 어떠한 알고리즘을 통해 데이터를 저장할 장소를 분리합니다. 이렇게 하면 수평적으로 확장하기 용이합니다 (read replica를 기용하는 방법은 어쨌든 모든 데이터베이스에 데이터가 sync 되어있어야 하기 때문에 그런 점을 따져보면 샤딩이 확장성이 좋습니다). 해시 키 재배치 문제rehash 문제는 이런겁니다. 만약 서버가 3개인 상태에서 서버가 scale out을 했다고 가정해봅시다. 그러면 나머지 연산 알고리즘 결과가 아예 달라지면서 각 서버에 들어가야 할 데이터가 거의 전부 바뀌어버리게 됩니다. 이런 현상이 해시 키 재배치 문제입니다. 이는 곧 대규..
가상 면접 사례로 배우는 대규모 시스템 설계 기초 4장: 처리율 제한 장치의 설계
·
Server/System Design
처리율 제한 장치(rate limiter)의 설계를 공부한 내용을 정리했습니다.Rate limiter란?Rate limiter, 즉 처리율 제한 장치는 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치이다.e.g. 특정 기간 내 전송되는 클라이언트의 요청 횟수 제한 API 요청 횟수가 threshold를 넘어서면 추가로 도달한 요청은 모두 차단된다.사용자는 초당 2회 이상 새로운 게시글을 올릴 수 없음같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없음같은 디바이스로는 주당 5회 이상 리워드를 요청할 수 없음From Cloudflare – https://www.cloudflare.com/en-gb/learning/bots/what-is-rate-limiting/R..
[졸업프로젝트] NewsFit 개발 회고
·
Server
안녕하세요, Sean 입니다. 홍익대학교 4학년을 무사히 마치며 졸업 프로젝트도 끝이 났습니다. 졸업 프로젝트 설계와 구현 과정에서 있었던 일들을 이야기하고자 글을 쓰게 되었습니다. 저는 NewsFit 프로젝트에서 인프라 설계 및 구축, 추천 시스템 서비스, 웹 스크래핑 서비스 구현을 담당했습니다.3-tier architecture 본 백엔드 서버 아키텍처는 3계층 구조를 기반으로 설계되었으며, 확장성, 보안성 및 고가용성을 중점적으로 고려하였습니다. 각 구성 요소의 역할과 기능은 다음과 같습니다. EC2 인스턴스 및 로드밸런서백엔드 애플리케이션이 배포된 인스턴스로, 프라이빗 서브넷 내에 위치합니다. 오토 스케일링을 활용하여 트래픽의 증가 및 감소에 따라 인스턴스 수를 자동으로 조정함으로써 시스템의 탄력..
[Kubernetes] ContainerD Basics
·
Server/Kubernetes
과거의 쿠버네티스과거에는 쿠버네티스가 도커만을 컨테이너 런타임으로 지원했지만, CRI의 도입으로 인해 다른 벤더의 컨테이너 런타임도 사용할 수 있게 되었습니다. CRI (Container Runtime Interface)는 쿠버네티스에서 다양한 컨테이너 런타임을 지원하기 위해 만들어진 인터페이스입니다. 쿠버네티스의 kubelet과 컨테이너 런타임 간의 표준 인터페이스를 정의하여, 다양한 런타임을 통합하고 관리하는 것을 쉽게 해줍니다. CRI는 OCI (Open Container Initiative) 표준을 만족합니다. OCI는 컨테이너의 생성 및 실행 표준을 정의하는 비영리 조직으로, CRI는 이러한 표준을 따름으로써 다양한 컨테이너 런타임이 서로 호환되도록 합니다. 이를 통해 사용자들은 특정 런타임에 ..
DayCarat 인프라 구조 설계: 내가 한 달 만에 설계부터 구현까지 성공적으로 마칠 수 있었던 이유
·
Server
DayCarat 인프라 구조 설계: 내가 한 달 만에 설계부터 구현까지 성공적으로 마칠 수 있었던 이유올해 2월까지 DayCarat 서비스 개발을 담당했습니다.설계 중 많은 고민 사항이 있었고, 저처럼 프로젝트를 시작하는 입장에서 고려할 만한 방법이 어떤 것이 있을지 공유해 드리고자 다음 게시글을 작성했습니다.요구사항 파악하기CMC 14기로 활동하며 구성된 팀에서 만든 서비스로, 설계 당시 여러 요구사항이 있었습니다.관계형 데이터베이스에서 여러 테이블을 두고 복잡한 쿼리를 작업할 수 있는 구조를 가질 것모두에게 보내는 공지사항 알림 뿐 아니라 특정 작업 완료 시 개인에게 보내는 알림 서비스를 구현할 것외부 API(GPT)를 호출할 수 있고, 이는 비동기적으로 호출할 것팀원과 원활한 소통을 할 수 있도록 ..
Github Actions: ssh-aciton IPv6 지원
·
Server
https://aws.amazon.com/ko/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/ New – AWS Public IPv4 Address Charge + Public IP Insights | Amazon Web Services We are introducing a new charge for public IPv4 addresses. Effective February 1, 2024 there will be a charge of $0.005 per IP per hour for all public IPv4 addresses, whether attached to a service or not (there is already a char..
[Terraform] state locking을 위한 s3, ddb 설정하기
·
Server
Terraform의 경우 Github과 같은 VCS에서 프로젝트를 공유하기엔 한계가 있습니다. AWS 환경을 테라폼으로 구축한다고 가정합시다. terraform apply 명령어를 실행하는 경우, 테라폼은 연결되어 있는 계정을 통해 인프라스트럭처를 프로비저닝 합니다. 그런데, 여러명이 테라폼 프로젝트를 사용중이라면 어떨까요? 유저 A와 B는 Latest 버전의 테라폼 프로젝트에서 개발을 시작했습니다. 유저 A는 EC2 instance의 유형을 변경하고, 유저 B는 EC2 instance의 security group을 변경합니다. 이 때, 두 유저가 terraform apply 를 동시에 실행하여 한 계정에 적용을 시도합니다. 먼저 A와 B 모두 state 파일을 읽습니다. 그 후, B의 변경사항이 먼저 ..
Sean 션
'Server' 카테고리의 글 목록