#database
노트 51개
Frontend › Web
IndexedDB브라우저에 내장된 출처별 트랜잭션 키-값 데이터베이스의 API. 버전으로 스키마를 바꾸는 upgradeneeded, 객체 저장소·키·인덱스·키 범위·커서로 저장하고 찾는 법, 자동 커밋되는 트랜잭션의 함정과 오류 처리, 다른 탭과의 버전 충돌, 그리고 네이티브 개념이 idb 래퍼에서 어떻게 보이는지 정리한다.
Backend
클라이언트의 요청을 받아 비즈니스 로직을 처리하고 데이터를 저장·제공하는 서버 쪽 개발 지식 모음.
Backend › Architecture
결제 시스템 설계: 흐름, 멱등성, 대사, 핫스팟 계정구매 버튼 뒤에서 결제 서비스·결제 실행기·PSP·지갑·원장이 어떻게 맞물리는지 정리했다. 이중 결제를 막는 재시도+멱등 키, 정보 흐름과 자금 흐름의 어긋남을 메우는 대사(reconciliation), 한 계좌에 쓰기가 몰리는 핫스팟 계정 대응, 결제 시스템을 장애에 강하게 만드는 운영 원칙까지 다룬다.
Backend › Architecture
고가용성 이중화 구조와 장애 감지가용성을 나인(nines)으로 재는 법과 직렬·병렬 구성의 가용성 계산, 주-백업·주-보조·주-주·핫-핫·핫-웜·단일 리더·리더 없는 클러스터 같은 이중화 구조, 결함 허용 설계의 여섯 원칙, 하트비트로 노드 장애를 감지하는 방식, 페일오버 절차와 비동기 복제의 유실, 스플릿 브레인을 막는 정족수·에포크·펜싱·리스를 정리했다.
Backend › Architecture
뉴스 피드 설계: 연결, 활동, 팬아웃뉴스 피드는 「누구와 연결됐나」와 「누가 무엇을 했나」 두 데이터를 합쳐 사용자마다 다른 목록을 만드는 문제다. 읽을 때 모으는 방식(스캐터·개더)과 쓸 때 받은편지함에 뿌리는 방식(팬아웃)의 차이, 활동 복제와 집계·중복 제거·점수 매기기, 비정규화와 캐시로 타임라인을 빠르게 만드는 법을 정리했다.
Backend › Architecture
대규모 서비스 기술 스택 해부Netflix·Uber·Reddit·Twitter 같은 대규모 서비스의 기술 스택을 계층별로 겹쳐 보고 반복되는 설계 선택을 정리했다. 데이터 성격별로 DB를 고르는 폴리글랏 저장, 캐시를 조회 가속 이상으로 쓰는 네 가지 방식, 비싼 작업을 큐로 미루고 CDC로 캐시를 맞추는 패턴, 표준화된 이벤트 플랫폼, 카나리 배포 중심의 CI/CD, 자동 버그 수정과 전용 하드웨어까지 다룬다.
Backend › Architecture
데이터 관리 패턴: CDC, 이벤트 소싱, CQRS, 최종 일관성데이터가 여러 서비스·저장소에 흩어질 때 쓰는 패턴을 모았다. DB 변경을 로그에서 읽어 퍼뜨리는 CDC, 상태 대신 이벤트를 저장하는 이벤트 소싱, 읽기·쓰기 모델을 나누는 CQRS, 인덱스 테이블, 최종 일관성을 만드는 네 가지 방법(이벤트·백그라운드 동기화·사가·CQRS), 이벤트와 스키마의 호환성 규칙(Avro, 스키마 레지스트리)까지 다룬다.
Backend › Architecture
분산 시스템의 시간과 장애: 8가지 착각부터 논리 시계까지분산 시스템이 어려운 이유는 메시지가 늦게 오고(비동기) 부품이 일부만 고장 나기(부분 장애) 때문이다. 분산 컴퓨팅의 8가지 착각, 대규모 클러스터의 실제 장애 빈도, 전역 '지금'이 없다는 사실, Lamport의 happened-before와 논리 시계, 선형화 가능성부터 최종 일관성·세션 보장까지의 일관성 모델, 합의 문제와 비잔티움 장애·BFT, Raft의 리더 선출과 로그 복제, 합의·CRDT로 조율 비용을 다루는 법을 정리한다.
Backend › Architecture
빠르고 유지보수하기 좋은 DB 조회 패턴서버 코드에서 DB 조회를 빠르게 하면서도 코드는 단순하게 두는 방법. 직렬 조회 → 수동 배치 → 병렬 처리 → 자동 배치 → 값별 독립 함수 → 요청 단위 캐시로 발전시키며, 핵심은 '지역적 추론(local reasoning)'이라는 점을 정리한다. DataLoader의 원리이기도 하다.
Backend › Architecture
사진 공유 서비스 설계: 메타데이터, 저장, 샤딩Instagram 같은 사진 공유 서비스의 설계다. 요구 사항과 규모 추정(하루 사진 200만 장, 10년 저장량), 미디어 파일과 메타데이터를 나눠 저장하는 구조, 테이블별 크기 계산, 느린 업로드가 읽기를 막지 않게 읽기·쓰기 서버를 나누는 이유, 복제로 파일을 잃지 않는 법, PhotoID 기반 샤딩과 홀짝 티켓 서버로 ID 만들기, CDN 배포를 다룬다.
Backend › Architecture
시스템 설계의 선택지와 흔한 문제의 해법수직·수평 확장, SQL·NoSQL, 배치·스트림, 정규화·비정규화, 강한·최종 일관성, REST·GraphQL, 상태 유지·무상태, 동기·비동기처럼 설계에서 반복되는 양자택일을 비교하고, 읽기 폭주·쓰기 폭주·단일 장애 지점·지연·대용량 파일·느린 쿼리 같은 흔한 문제를 해법과 짝지었다.
Backend › Architecture
캐시 전략: 계층, 읽기·쓰기 패턴, 교체 정책, 장애 패턴캐시는 요청 경로의 거의 모든 층에 있다. 캐시와 원본을 맞추는 읽기·쓰기 패턴(cache-aside, read-through, write-through, write-around, write-back), 꽉 찼을 때 무엇을 버릴지 정하는 교체 정책(LRU·LFU·FIFO·SLRU·TTL 등), 그리고 캐시가 오히려 DB를 무너뜨리는 네 가지 장애(동시 만료, 관통, 핫 키 만료, 캐시 다운)와 대응을 정리한다.
Backend › Database
검색엔진의 원리: 역인덱스와 랭킹검색엔진은 문서를 토큰으로 쪼개 단어 → 문서의 역인덱스를 만들고(색인), 질의어를 같은 방식으로 처리해 찾은 뒤 TF-IDF·BM25 같은 점수로 순서를 정한다(질의). 한국어는 형태소 분석이나 N-gram이 필요하다.
Backend › Database
데이터베이스 샤딩한 DB에 담기 어려울 만큼 커진 데이터를 같은 스키마의 여러 DB로 행 단위로 나누는 샤딩을 정리했다. 샤드 키와 라우팅 방식(모듈러·범위·디렉터리·일관된 해싱·가상 버킷), 샤딩이 어렵게 만드는 것, ShardingSphere 같은 미들웨어, 기존 DB에서 옮겨 올 때의 동기화와 첫 요청 지연까지 다룬다.
Backend › Database
데이터베이스 확장과 성능 최적화DB가 느려지거나 한계에 닿을 때 싼 것부터 쓰는 수단을 순서대로 정리했다. 인덱스·쿼리 튜닝·커넥션 풀·캐시·구체화된 뷰(갱신 방식)·반정규화·수직 확장·읽기 복제본·파티셔닝(프루닝, 분할 방식, 로컬·글로벌 인덱스)·샤딩의 효과와 대가, 복제 구조(단일 리더·다중 리더·리더 없음)와 동기화 방식, 읽기 복제본 패턴의 복제 지연과 라우팅(애플리케이션 vs 미들웨어)을 다룬다.
Backend › Database
분산 환경의 고유 ID 생성여러 서버가 동시에 겹치지 않는 ID를 만드는 다섯 가지 방법(UUID, Snowflake, DB 자동 증가, DB 세그먼트, Redis)을 비교하고, 시간순 정렬·64비트·저지연 같은 요구 사항에 따라 어떤 방식을 고를지, 시간순 UUID(UUIDv7)가 인덱스 문제를 어떻게 푸는지 정리했다.
Backend › Database
와이드 컬럼 DB와 대규모 메시지 저장: Cassandra·ScyllaDBCassandra·ScyllaDB 같은 와이드 컬럼 DB는 파티션 키로 데이터를 노드에 나누고 파티션 안을 클러스터링 키로 정렬해 둔다. 파티션 키·클러스터링 키 모델, 조절 가능한 일관성, LSM 트리 저장 엔진, Cassandra와 ScyllaDB의 차이를 정리하고, 수조 건 메시지를 저장할 때 생기는 핫 파티션을 데이터 서비스 계층의 요청 병합으로 막는 방법과 로컬 SSD와 네트워크 디스크를 RAID로 묶어 디스크 지연을 줄이는 방법을 다룬다.
Backend › Database
용도별 데이터베이스와 고르는 법OLTP·OLAP·검색·키-값·문서·와이드 컬럼·그래프·시계열·벡터·공간 DB를 「어떤 질문에 답하는 저장소인가」로 나누고, 고르는 순서와 결정 트리, 확장 기능으로 여러 용도를 덮는 PostgreSQL, 컴퓨팅과 저장을 분리한 서버리스 DB, 클라우드 관리형 대응표를 정리했다.
Backend › Database
인덱스 설계와 쿼리 튜닝인덱스는 정렬이다. 카디널리티·분포도와 후보 컬럼 고르기, 복합 인덱스 컬럼 순서, 유니크·외래 키 인덱스, 인덱스를 못 타게 만드는 조건, EXPLAIN 접근 유형과 Oracle 인덱스 스캔 방식, 조인 방식(중첩 루프·해시·정렬 병합)과 조인 순서, ORDER BY·GROUP BY·커버링 인덱스, 빠른 쿼리를 위한 체크리스트, NoSQL의 인덱스와 MongoDB의 ESR 규칙까지 정리했다.
Backend › Database
DB 내부 구조: 쿼리 실행과 인덱스 자료 구조SQL 한 문장이 파서·옵티마이저·실행기·버퍼 관리자·트랜잭션·잠금 관리자를 거쳐 처리되는 흐름, Oracle을 예로 본 엔진의 메모리(SGA·PGA)·백그라운드 프로세스·파일 구성과 테이블스페이스→세그먼트→익스텐트→블록의 논리 저장 구조, 그리고 DB가 데이터를 찾는 데 쓰는 자료 구조(B-트리, LSM 트리, 해시, 스킵 리스트, 역색인, R-트리 등)를 정리했다. B-트리는 읽기에, LSM 트리는 쓰기에 강하다.
Backend › Database
DB 커넥션 풀커넥션 풀은 DB 연결을 미리 만들어 빌려주고 돌려받는다. 풀 크기와 처리량의 관계, 대기 시간(maxWait·connectionTimeout)을 짧게 잡아야 장애가 번지지 않는 이유, 유효성 검사와 유휴 연결 정리, DataSource 프록시로 SQL에 출처 주석을 다는 법을 정리했다.
Backend › Database
Elasticsearch 검색: 매핑·분석기·Query DSLElasticsearch로 무엇을 어떻게 찾는지 정리했다. 동적·명시적 매핑과 필드 타입, object와 nested, 분석기(문자 필터·토크나이저·토큰 필터), Query DSL의 질의·필터 문맥과 match·term·range·bool·multi_match, BM25 점수와 부스팅, 집계, 페이지네이션(from·search_after·PIT·scroll), suggester, Painless 스크립트, 벡터 검색과 ES|QL까지 다룬다.
Backend › Database
Elasticsearch와 ELK 스택Elasticsearch는 Lucene 위에 만든 분산 검색·분석 엔진이다. JSON 문서를 역인덱스로 색인해 전문 검색과 집계를 거의 실시간으로 처리한다. 클러스터·노드 역할·샤드·세그먼트 구조, 쓰기 경로와 복제·일관성 모델, 인덱스 템플릿·롤오버·ILM·데이터 티어, 스냅숏 백업, 확장과 튜닝, 모니터링과 장애 진단(429, 디스크 워터마크), 보안, ELK 로그 파이프라인을 정리한다.
Backend › Database
Flyway로 DB 마이그레이션 관리하기스키마 변경을 버전이 붙은 SQL 파일로 기록하고 순서대로 적용하는 오픈소스 DB 마이그레이션 도구 Flyway. 왜 쓰는지, 동작 방식, 실행 방법을 정리한다.
Backend › Database
JPA와 영속성 컨텍스트Java의 ORM 표준인 JPA(Jakarta Persistence)가 객체와 테이블의 패러다임 불일치를 어떻게 메우는지, 영속성 컨텍스트의 1차 캐시·쓰기 지연·변경 감지와 엔티티 상태, N+1 문제의 원인과 해결(페치 조인·배치 크기·엔티티 그래프), 엔티티 설계 관례, 대량 데이터를 읽는 no-offset 배치 리더를 정리한다.
Backend › Database
MongoDB 시작하기와 CRUD문서형 NoSQL인 MongoDB를 Atlas 클라우드에 만들고 접속 설정을 한 뒤, 기본 CRUD 명령과 Mongoose로 다루는 방법. 샤딩 구조(mongos, config server, shard)와 청크·밸런서까지.
Backend › Database
Prisma: 커서로 이전·다음 항목 찾기와 CLINode.js ORM Prisma의 cursor·skip·take로 상세 화면의 이전/다음 항목 키를 조회하는 방법과, 자주 쓰는 Prisma CLI 명령.
Backend › Database
RedisRedis는 메모리에 데이터를 두는 키-값 저장소로, 캐시를 넘어 세션·분산 락·카운터·레이트 리미터·랭킹·큐로 쓰인다. 빠른 이유(메모리, 단일 스레드 이벤트 루프와 I/O 다중화, 효율적인 자료구조), 자료구조별 쓰임, 영속성(RDB·AOF·혼합)과 큰 키의 영향, 만료·교체 정책과 메모리 지표, 트랜잭션(MULTI·WATCH)과 Lua, 복제·센티널·클러스터와 리샤딩, ACL, 장애 진단, Memcached와의 차이를 정리한다.
Backend › Database
SQL 기초SQL 명령어 분류(DDL·DML·DCL)와 테이블 구조 변경과 제약 조건(기본 키·외래 키·CASCADE, 자연 키와 대리 키), 뷰·시퀀스·동의어, 데이터를 생성·조회·수정·삭제하고 조건·정렬·집계·그룹화하는 기본 문법, WHERE와 HAVING·DISTINCT·CROSS JOIN처럼 헷갈리기 쉬운 지점, 서브쿼리(상관 서브쿼리, EXISTS와 NOT IN의 NULL 함정), 저장 프로시저와 PL/SQL(블록, 예외, 커서, BULK COLLECT, 함수·패키지·트리거).
Backend › Django
Django 모델 관계 (1:1, 1:N, M:N)OneToOneField, ForeignKey, ManyToManyField로 모델 간 1:1, 1:N, M:N 관계를 표현하고 역참조하는 방법.
Backend › Django
Django Model, Migration과 Adminmodels.py의 클래스로 DB 테이블 구조를 정의하고, makemigrations·migrate로 그 변경을 데이터베이스에 반영하며, admin.py에 모델을 등록해 관리자 페이지에서 데이터를 확인·편집하는 방법.
Backend › Django
Django ORM과 QuerySetDjango ORM으로 SQL 없이 객체 문법으로 CRUD·조건 조회·정렬·집계를 수행하는 방법과, 각 API가 어떤 SQL이 되는지 대응표로 정리한다.
Backend › Django
DRF Serializer와 관계 표현Django REST Framework의 Serializer로 모델을 JSON으로 바꾸고, 중첩 Serializer로 1:N·M:N 관계를 응답에 담으며, api_view로 CRUD를 구현하는 방법.
Backend › NestJS
NestJS에서 Mongoose 스키마 정의@nestjs/mongoose 연결·디버그 로그 설정, @Schema·@Prop 데코레이터로 MongoDB 컬렉션 구조를 클래스로 정의하고 virtual 필드로 응답에서 민감 정보를 숨기는 방법.
Backend › NestJS
Repository 패턴과 레이어 분리서비스와 데이터베이스 사이에 데이터 접근 전담 계층을 두어 비즈니스 로직과 DB 쿼리를 분리하는 패턴.
Backend › Web Basics
API 페이지네이션큰 목록을 나눠 내려 주는 API 페이지네이션의 여섯 가지 방식(오프셋, 페이지 번호, 커서, 키셋, 시간 기반, 혼합)을 요청 모양·DB 쿼리·장단점으로 비교한다. 깊은 페이지에서 오프셋이 느려지는 이유, 데이터가 바뀔 때 생기는 중복·누락, 정렬 키에 동점 깨기를 넣는 규칙, 응답에 다음 페이지 정보를 싣는 법까지.
Computer Science
컴퓨터 구조, 운영체제(프로세스·메모리·파일), 네트워크(TCP·HTTP), 데이터베이스, C와 기초 자료구조, 정보처리기사 개념까지 개발의 바탕이 되는 CS 지식 모음.
Computer Science
데이터베이스DBMS의 역할과 데이터 모델의 종류, 트랜잭션과 병행 제어·회복, 정규화, 관계대수와 ER 모델·DB 설계에 관한 노트 모음.
Computer Science › Database
관계대수·관계해석과 DB 설계릴레이션의 구조와 성질, SQL의 바탕이 되는 관계대수 연산자(σ·π·⋈·÷와 집합 연산, 조인의 종류)와 결과 카디널리티, 비절차적인 관계해석(∃·∀와 EXISTS), DB 설계 단계와 개념적 설계의 ER 모델(개체·속성·관계, 카디널리티와 참여, 일반화·특수화와 집단화), ERD를 테이블로 옮기는 변환 규칙, 스키마와 인스턴스(내포·외연), 3단계 스키마와 데이터 독립성.
Computer Science › Database
데이터베이스 모델: RDB, NoSQL, NewSQLDBMS가 파일 처리 시스템의 어떤 문제를 푸는지와 1·2·3계층 구조, 관계형 DB의 특징과 한계, 코드의 규칙, NoSQL 네 가지 유형과 BASE·CAP 정리, 둘의 장점을 합치려는 NewSQL을 비교하고, 프로젝트에서 무엇을 고를지와 PostgreSQL·MySQL의 차이를 정리. 평면·계층·네트워크 모델에서 관계형까지의 계보와 분석용 스타·스노플레이크 스키마도 다룬다.
Computer Science › Database
정규화와 반정규화중복으로 생기는 이상 현상을 없애는 정규화 단계(1NF~5NF)와 그 정확한 정의, 함수 종속의 암스트롱 공리와 속성 폐포로 후보키 찾기, 다치·조인 종속, 무손실 분해와 종속성 보존 판정, 다중값 속성을 펴는 법, 성능을 위해 일부러 정규화를 깨는 반정규화.
Computer Science › Database
트랜잭션과 회복트랜잭션의 ACID 특성, 이를 지키기 위한 병행 제어·고립화 수준·회복 기법을 연결해서 정리. 동시 실행 문제(갱신 손실·더티 읽기 등), 스케줄의 충돌·뷰 직렬 가능성과 선행 그래프, 회복 가능·비연쇄·엄격 스케줄, 2단계 잠금(2PL)의 변형과 타임스탬프 순서·토마스 쓰기 규칙, wait-die·wound-wait 교착 예방, MVCC가 스냅숏으로 읽는 방식과 InnoDB·PostgreSQL의 구현 차이(undo·VACUUM), 스냅숏 격리·쓰기 스큐·SSI, 잠금의 종류와 단위, 비관적·낙관적 잠금, 2PC와 사가까지 다룬다.
Computer Science › Programming Languages
DTO와 VO, DAO와 Repository이름이 비슷해 헷갈리는 네 가지 객체를 구분한다. DTO는 계층 사이로 데이터를 실어 나르는 로직 없는 상자, VO는 값으로만 같음을 따지는 불변 도메인 객체다. DAO는 테이블 중심으로 영속성을 추상화한 저수준 계층이고, Repository는 도메인 객체의 컬렉션처럼 보이게 만든 상위 수준 계층이다.
Computer Science
개발자가 빠지는 함정 모음CSS·유니코드·부동소수점·시간·SQL·동시성·React·Git·네트워크 등에서 직관과 다르게 동작해 버그를 만드는 지점을 분야별로 묶고, 이름·주소·전화번호·이메일 같은 현실 데이터에 대한 착각(Falsehoods)을 덧붙였다. 공통 교훈은 '기본값과 경계를 믿지 말고, 표현과 비교의 기준을 명시하라'다.
DevOps
고가용성과 재해 복구 설계데이터센터 하나가 통째로 사라져도 서비스를 이어 가기 위한 설계 원칙. RTO·RPO로 목표를 정하고, 백업·파일럿 라이트·웜 스탠바이·액티브-액티브 중 전략을 고르며, 데이터·플랫폼·운영 도구까지 모든 계층을 여러 데이터센터에 나누고, 전환을 정기 훈련으로 검증한다. 복구에 쓰는 운영 도구가 가장 자주 다중화에서 빠진다.
DevOps
관측 가능성: 로그, 트레이스, 메트릭관측 가능성의 세 기둥인 로그(개별 사건), 트레이스(요청 하나의 경로), 메트릭(집계 가능한 수치)의 차이와 수집 구조, OpenTelemetry로 한 표준에 모으는 방법, 메트릭 수집의 풀·푸시 모델과 서비스 디스커버리, 쓰기가 많고 읽기가 몰리는 메트릭에 범용 DB 대신 시계열 DB를 쓰는 이유를 정리한다.
DevOps
서버 장애 진단 패턴서버 장애를 추측이 아니라 계측으로 좁혀 가는 방법과, 자주 반복되는 장애 유형의 증상·원인·해결을 모았다. load average와 CPU·I/O 지표 읽기, 힙 덤프로 메모리 누수 찾기, DB 커넥션 실패와 DNS 역조회, 인덱스를 못 타는 쿼리와 MVCC 죽은 튜플, 세션이 Redis 메모리를 고갈시키는 경우, 선착순 카운터 병목, 피크 트래픽 대비와 사후 분석까지 다룬다.
AI & Data
데이터 파이프라인과 저장소 용어데이터 파이프라인은 수집 → 적재 → 저장 → 처리 → 활용의 다섯 단계로 데이터를 옮기고 다듬는다. 단계별 도구 지도(2026)와 도구를 고르는 원칙, 배치와 스트림·이벤트 시간과 늦게 오는 데이터·람다와 카파 아키텍처, ETL과 ELT, 웨어하우스·레이크·레이크하우스·테이블 포맷·데이터 메시 같은 저장소 용어, 데이터 계층과 테이블 이름 규칙, 분석 저장소가 커 가는 단계와 재작업에 강한 적재·운영 원칙을 정리한다.
AI & Data
분산 데이터 처리: MapReduce, Spark, SQL 엔진한 서버로 감당할 수 없는 데이터를 클러스터로 처리하는 기술의 계보(GFS·MapReduce·Hadoop → Spark → Trino)와 핵심 원리를 정리했다. MapReduce의 한계, Spark RDD의 계보(lineage)·지연 실행·좁은/넓은 의존성, 지금의 표준인 DataFrame·Spark SQL, 객체 저장소 위 클러스터 운영 팁, 대화형 SQL 엔진이 빠른 이유, 열 지향 포맷 Parquet의 컬럼 선택·조건 푸시다운을 다룬다.
Tools
DBeaver에서 SQL로 데이터 다루기여러 DBMS를 한 화면에서 다루는 무료 GUI 클라이언트 DBeaver의 특징, PostgreSQL 연결 방법, SQL 편집기로 데이터를 조회·수정하는 방법과 주의점.
Tools
Retool: 로우 코드로 내부 도구 만들기어드민 페이지·대시보드 같은 내부 도구를 UI 개발 없이 약간의 JS와 SQL로 만드는 로우 코드 플랫폼 Retool의 특징과 어울리는 쓰임.