반응형

전체 글 442

[가상면접 사례로 배우는 대규모 시스템 설계 기초2] 13장. 증권 거래소

기능 요구사항새 주문을 넣을 수 있고, 체결되지 않은 주문은 취소할 수 있어야 한다. 주문이 체결된 경우에는 실시간으로 그 사실을 알 수 있어야 한다. 호가 창(order book)의 정보는 실시간으로 갱신되어야 한다. 최소 수만 명 사용자가 동시에 거래할 수 있어야 하고, 최소 100가지 주식 거래가 가능해야 한다. 거래소는 규제 시설이므로 위험성 점검(risk check)이 가능해야 한다. 간단한 점검이 가능해야 한다. 일례로, 한 사용자가 하루에 거래할 수 있는 애플 주식을 백만 주 이하로 제한하는 규칙이 있다고 했을 때, 해당 규칙을 위반하는 거래가 이루어지지 않도록 점검할 수 있어야 한다. 개략적 규모 측정100가지 주식하루 10억 건의 주문뉴욕증권거래소는 월요일부터 금요일까지, 오전 9시 3..

[netlify] blob 설정 - api key, site id 확인 방법

1. 프로필 아이콘 클릭 -> user settings 2. Applications -> Personal access tokens -> new access token https://app.netlify.com/user/applications/personal 3. desription 쓰고 생성하면 끝 ! +) netlify blob 사용 시 요점: 해당 포럼 글에서도 언급되듯, Blobs의 자동 자격증명 주입은 Netlify Functions v2/Edge Functions 런타임에서만 된다고 한다. 로컬 독립 스크립트(vite-node)에서는 getStore('foo')만으로는 동작하지 않고 siteID와 token이 필요하다. 참고: Functions v2 맥락에서만 자동 주입 및 v2 런타임 ..

개발 2025.10.14

[가상면접 사례로 배우는 대규모 시스템 설계 기초2] 12장. 전자 지갑

12장. 전자 지갑 2단계 : 개략적 설계안 제시 및 동의 구하기인메모리 샤딩지갑 애플리케이션은 모든 사용자 계정의 잔액을 유지한다. 이 관계를 나타내는 자료구조로는 해시 테이블을 사용한다 .인메모리 저장소로 인기 있는 선택지 중 하나는 레디스다. 그러나 레디스 노드 한 대로 100만 TPS 처리는 벅차다. 클러스터를 구성하고 사용자 계정을 모든 노드에 균등하게 분산시키는 파티셔닝(partitioning) 또는 샤딩(sharding)을 해야 한다. 클라이언트 A에서 클라이언트 B로 1달러를 이체하라는 명령을 받으면 두 개의 레디스 노드에 두 개의 명령이 전달된다. 첫 번째 업데이트를 끝난 후 두 번째 업데이트 완료하기 전에 지갑 서비스가 죽어버리면 이체는 온전히 마무리하지 못하기 때문에 모두 성공하리라..

[가상면접 사례로 배우는 대규모 시스템 설계 기초2] 11장. 결제 시스템

11장. 결제 시스템 1단계 : 문제 이해 및 설계 범위 확장 기능 요구사항대금 수신 (pay-in) 흐름 : 결제 시스템이 판매자를 대신하여 고객으로부터 대금을 수령한다. 대금 정산 (pay-out) 흐름 : 결제 시스템이 전 세계의 판매자에게 제품 판매 대금을 송신한다. 비기능 요구사항신뢰성 및 내결함성 : 결제 실패는 신중하게 처리해야 한다. 내부 서비스 (결제 시스템, 회계 시스템)와 외부 서비스(결제 서비스 제공업체) 간의 조정 프로세스 : 시스템 간의 결제 정보가 일치하는지 비동기적으로 확인 개략적 규모 측정하루에 100만건의 트랜잭션을 처리해야 한다. (초당 10건의 트랜잭션) 2단계 : 개략적 설계안 제시 및 동의 구하기복식부기 원장 시스템원장 시스템에는 복식 부기(double-entry)..

[가상면접 사례로 배우는 대규모 시스템 설계 기초2] 10장. 실시간 게임 순위표

10장. 실시간 게임 순위표 1단계 : 문제 이해 및 설계 범위 확장 기능 요구사항순위표에 상위 10명의 플레이어를 표시한다.특정 사용자의 순위를 표시한다. 어떤 사용자보다 4순위 위와 아래에 있는 사용자를 표시한다. (보너스 문제)비기능 요구사항점수 업데이트는 실시간으로 순위표에 반영한다. 일반적인 확장성, 가용성 및 안정성 요구사항 개략적 규모 측정 사용자수게임을 하는 사용자가 24시간 동안 고르게 분포한다고 자정하면 DAU가 500만 명인 게임의 경우 초당 평균 50명의 사용자가 게임을 플레이하게 된다. 하지만 그렇게 사용량이 균등한 경우는 별로 없으며, 서로 다른 시간대의 사람들이 동시에 게임할 수 있는 북미 지역 기준 저녁 시간이 피크 시간대일 가능성이 높다. 이를 고려하기 위해 최대 부하는 평..

[가상면접 사례로 배우는 대규모 시스템 설계 기초2] 8장.분산 이메일 서비스

지메일, 아웃룩 또는 야후 메일같은 대규모 분산 이메일 서비스 설계 1단계 : 문제 이해 및 설계 범위 확정기능 요구사항이메일 발송/수신 + 첨부파일SMTP, POP, IMAP 등의 프로토콜과 서비스 제공자 전용 프로토콜 사용모든 이메일 가져오기읽음 여부에 따른 이메일 필터링제목, 발신인, 메일 내용에 따른 검색 기능스팸 및 바이러스 방지 기능 개략적인 규모 측정10억 명의 사용자한 사람이 하루에 보내는 이메일 수는 10건, 이메일 전송 QPS = 10의 9승 * 10 / 10의 5승 = 100,000 이다. 한 사람이 하루에 수신하는 이메일 수는 평균 40건, 하나의 메타데이터는 50MB라고 가정 (이때 첨부파일은 미포함)메타데이터는 데이터베이스에 저장한다고 가정. 1년간 10억명 사용자 * 하루 4..

[supabase][postgresql] Row Level Security 이란

https://supabase.com/docs/guides/database/postgres/row-level-security Row Level Security | Supabase DocsSecure your data using Postgres Row Level Security.supabase.com supabase를 사용하다 보면, RLS enabled/disabled가 보이는데, 해당 기능이 어떤 기능인지 알아봤다. supabase 기능이라기보다는 postgres의 기능에 가깝다고 한다. https://www.postgresql.org/docs/current/ddl-rowsecurity.html 이 기능을 통해 사용자가 어떤 행을 조회, 삽입, 수정, 삭제할 수 있는지를 제어할 수 있다고 한다.기..

개발 2025.09.04

[supabase] Supabase Publishable Key vs Secret Key 정리

1. project settings 클릭 2. api keys 탭 > create new key 클릭 3. add new secret key 로 등록 4. name, description 입력 후 등록하면 된다. 참고로, publishable key와 secret key가 있는데 https://supabase.com/docs/guides/api/api-keys 여기 문서를 보면 TypeFormatPrivilegesAvailabilityUsePublishable keysb_publishable_...LowPlatformSafe to expose online: web page, mobile or desktop app, GitHub actions, CLIs, source code.Secret keys..

개발 2025.08.29

[netlify] Cafe24에서 구입한 도메인을 Netlify에 연결하는 가이드

Netlify로 프로젝트를 배포했다면, 이제 기본 제공되는 *.netlify.app 주소 대신 나만의 도메인을 연결하고 싶어질 수 있다. 이번 과정에서는 Cafe24에서 도메인을 구입하고, 이를 Netlify에 연결하는 방법을 단계별로 정리했다. 1. 도메인 구매 - cafe24 Cafe24에서 원하는 도메인을 검색해서 구입했다. 1년 사용료는 약 23,500원 정도였다.https://hosting.cafe24.com/?controller=new_domain_search_result 카페24 호스팅 | 온라인 비즈니스의 시작도메인 검색 결과 주요 도메인 국가 도메인 국내 도메인 기관 도메인 국내 지역 도메인 New gTLD 한글 도메인 도메인 신청하기 도메인 신청하기hosting.cafe24.com ..

개발 2025.08.26

[netlify] GitHub 프로젝트를 Netlify에 배포하는 방법

1. add new project 클릭 2. import an existing project 클릭 3. 원하는 애플리케이션 클릭 : github 클릭그 외에도 gitlab, bitbucket, azure devops 가능하다. 4. github 에서 repository 선택 5, team, project name 설정한다. Base directory (베이스 디렉토리)Netlify가 package.json, .nvmrc 같은 의존성 관리 파일을 찾고, 의존성을 설치하며 빌드 명령을 실행하는 디렉토리입니다. 또한 빌드 과정에서 캐싱 기준이 됩니다. 별도 설정하지 않으면 저장소 루트가 기본값입니다.Site files (사이트 파일)저장소 내 사이트 소스 코드와 관련 설정 파일을 의미합니다. 흔..

개발 2025.08.25
반응형