데이터 용어집

데이터 분야의 개념 93개를 한 장에 모았습니다. 객체-테이블 매핑 · 검색 사전 · 격리 수준 · 노출 · 클릭 원장 등 — 코드베이스에서 뽑아 뜻과 관계를 정리했습니다.

객체-테이블 매핑
코드의 객체와 DB 의 행을 오가게 한다. ORM 이 SQL 을 대신 만들지만, 언제 몇 번의 쿼리가 나가는지는 여전히 개발자가 알아야 한다
검색 사전
동의어 · 사용자 사전 · 스톱워드. 원천 코드표에서 유도하면 손으로 안 쓴다
격리 수준 (isolation level, 트랜잭션 격리 수준)
동시에 도는 트랜잭션이 서로의 변경을 얼마나 보는지 고르는 설정. READ UNCOMMITTED · READ COMMITTED · REPEATABLE READ(MySQL 기본) · SERIALIZABLE 순으로 이상 현상이 줄고 동시성이 준다
노출 · 클릭 원장
대상 × 동작 두 축(entity_type · action)과 계층 위치(screen · section · item_index)로 남긴 노출과 클릭. 온라인 학습과 CTR 지표의 유일한 원천
단어 비용
사전 항목마다 붙은 비용. 낮을수록 그 분해를 선호한다. 사용자 사전 항목은 −100000 으로 고정돼 경쟁 없이 이긴다
더티 리드 (dirty read)
다른 트랜잭션이 아직 커밋하지 않은 변경을 읽는 것. 그 트랜잭션이 롤백하면 존재한 적 없는 값을 본 셈이 된다
데이터 분산
한 대에 담기지 않거나 한 대가 죽으면 안 되는 데이터를 여러 노드에 나누고 복제한다
데이터 저장 (persistence, 영속성, 데이터베이스)
애플리케이션이 데이터를 잃지 않고, 동시에 고쳐도 깨지지 않고, 빨리 읽히게 저장하는 일. 저장소 선택 · 관계형 DB · 인메모리 저장소 · 데이터 접근과 캐시 · 분석용 저장으로 나눠 읽는다
데이터 파이프라인 (bulk API)
원천 전량으로 새 색인을 만들고 별칭을 한 번에 옮긴다. 덜 찬 색인이 라이브가 되지 않게 교체 전에 건수 · 실패율을 잰다
동의어 사전
다른 말을 같은 것으로 묶는다. 양방향(A, B)과 한 방향(A ⇒ B) 규칙이 있다
랭킹 피처
리랭커가 보는 값 — 융합 점수 · 제목 일치 · 의도 일치 · 문서 완성도. 학습 피처와 서빙 피처가 같아야 한다. 서빙에서 못 얻는 값은 학습에서도 뺀다
레플리케이션 (replication, 복제)
같은 데이터를 여러 노드에 복제해 가용성과 읽기 성능을 높인다. 누가 쓰기를 받는지(단일 리더·다중 리더·리더 없음)와 언제 응답하는지(동기·비동기)로 갈린다
매핑 · 필드 타입 (mapping, schema)
필드마다 keyword · text · knn_vector 같은 타입을 정한다
모델 스탬프
벡터 공간 식별자. 모델이나 차원이 바뀌면 옛 벡터와 섞이지 않게 한다
문맥 ID (left-id · right-id)
사전 항목의 좌·우 문맥 ID. 품사 계열과 받침 유무로 정해지며(left-id.def · right-id.def) 연접 비용표의 행·열 키다
문서 임베딩
문서를 벡터로 바꿔 색인에 싣는다. 오프라인 배치로 미리 계산한다
반복 불가능한 읽기 (non-repeatable read, read skew)
한 트랜잭션 안에서 같은 행을 두 번 읽었는데 그 사이 다른 커밋 때문에 값이 달라지는 것
버전 마이그레이션 (schema migration, DB 마이그레이션)
V1, V2 … 순번이 붙은 SQL 을 한 번씩만 적용하고 적용 이력을 스키마 이력 테이블에 남긴다. 적용된 파일은 체크섬으로 잠기므로 고치지 않고 새 버전을 더한다
벡터 양자화 (vector compression, 벡터 압축)
저장된 벡터를 더 적은 비트로 눌러 상주 메모리를 줄인다. 스칼라(차원마다 정수로) · 이진(부호만) · 곱 양자화(부분 벡터를 코드북으로) 세 계열이 있다. 모델 가중치 양자화와 다른 축이고, 정밀도 손실은 재채점으로 메운다
벡터 캐시 · 원장
만든 쿼리 벡터를 저장해 같은 검색어를 다시 인코딩하지 않는다
벡터 필드 (knn_vector, dense_vector)
벡터를 담는 필드와 그 근사 탐색 구조. 비용은 계산이 아니라 메모리 접근이다 — 방문한 노드마다 벡터를 무작위 위치에서 읽는다
별칭 스왑 (alias, 별칭)
ES에서 새 인덱스를 미리 빌드하고 별칭을 전환하여 무중단 재색인하는 기법. 교체는 원자적이어야 한다
복제 지연 (replication lag)
원본에 커밋된 변경이 복제본에 늦게 반영되는 상태. 쓰고 바로 읽는 화면에서 옛 값이 보인다
복제 지연 (replication lag)
원본에 쓴 값이 복제본에 보이기까지 걸린 시간. 길면 복제본에서 방금 쓴 값이 안 보인다
복합 인덱스 (composite index, 다중 컬럼 인덱스, multi-column index)
여러 컬럼을 순서대로 묶은 인덱스. 앞 컬럼부터 조건에 쓰여야 탄다. 등치 조건 컬럼을 앞에, 범위 · 정렬 컬럼을 뒤에 둔다
복합어 분해 모드
복합어를 통째로(none) · 조각만(discard, 기본값) · 둘 다(mixed) 색인할지. 색인과 질의 양쪽이 같아야 통째 토큰이 매칭된다
분류 코드 · 태깅
필터 축이 되는 분류 코드와 태그
분석기 · 토크나이저 (analyzer, analysis chain)
텍스트를 토큰으로 가르는 규칙. 문자 필터 → 토크나이저 → 토큰 필터의 사슬이고, 한국어는 형태소 분석기(nori)를 쓴다. 색인과 질의에 같은 분석을 해야 매칭된다
사용자 사전
분석기가 모르는 고유명사 · 복합어를 한 토큰으로 지정한다
새 인덱스 생성 (full reindex, 전체 재색인)
기존 색인을 고치지 않고 새 색인을 만든 뒤 별칭을 옮긴다. 전체 재색인은 단순하고 되돌리기 쉽다
색인 계약
매핑 · 분석기 · 벡터 필드 — 색인이 무엇을 받아들이는지의 정의. 대부분 나중에 못 바꾼다 — 바꾸려면 새 인덱스 + 재색인 + 별칭 교체다
샤딩 (sharding, 수평 분할, horizontal partitioning, partitioning)
데이터를 샤드 키로 나눠 여러 DB 인스턴스에 수평 분할해 저장한다. 쓰기 처리량과 저장 용량이 한 대를 넘을 때 쓰고, 샤드를 가로지르는 조인·트랜잭션을 잃는다
세종 말뭉치
21세기 세종계획 말뭉치. 형태소·품사가 사람 손으로 달린 대규모 한국어 코퍼스로, 범용 형태소 분석기 비용의 원천이다. 신문·소설 분포라 도메인 용어는 일반어 조각으로 갈린다
스키마 검증 (ddl-auto validate)
ORM 이 스키마를 만들지 않고 엔티티와 실제 테이블이 맞는지만 기동 시에 확인한다(ddl-auto: validate). 스키마 변경의 책임을 마이그레이션 한 곳에 둔다
스키마 변경 관리
테이블 구조 변경을 버전이 붙은 스크립트로 남겨 모든 환경에 같은 순서로 적용한다. 큰 테이블은 쓰기를 멈추지 않는 방식으로 바꾸고, 앱과 스키마가 잠시 공존하도록 단계를 나눈다
스키마 불일치 (schema drift)
환경마다 테이블 구조가 달라지거나 엔티티와 테이블이 어긋난 상태. 손으로 고친 운영 DB, 자동 DDL, 적용 뒤 수정한 마이그레이션에서 생긴다
스톱워드 (불용어)
검색에 뜻이 없는 말을 뺀다
시스템 사전 항목 (mecab-ko-dic)
사전 CSV 에 품사 · 비용 · 문맥 ID 를 직접 줘서 비터비 경쟁에 정상 참여시킨다. 기존 항목의 교정 · 삭제가 되는 유일한 층이고, 플러그인을 다시 굽는다
엔티티(JPA) (JPA entity, @Entity)
테이블 행에 매핑되는 객체. 식별자(@Id)로 구분되고 영속성 컨텍스트가 상태를 추적한다
역인덱싱 (inverted index, 역색인)
단어→문서 매핑으로 전문 검색을 가능하게 하는 인덱스 구조. 정렬된 텀 사전과 텀마다의 포스팅 리스트로 이뤄진다
연접 비용 (matrix.def)
앞 단어의 우 문맥 ID 와 뒤 단어의 좌 문맥 ID 로 행렬(matrix.def)에서 찾는 이음 비용. 「명사 뒤에 조사」 같은 품사 연쇄의 자연스러움을 값으로 갖는다
영속성 컨텍스트 (persistence context, 1차 캐시, first-level cache)
트랜잭션 동안 읽은 엔티티를 담아 두는 1차 캐시. 같은 id 는 같은 객체로 돌려주고, 커밋 때 바뀐 필드를 찾아 UPDATE 를 만든다
요청당 쿼리 수 (query count)
요청 하나가 DB 에 보낸 쿼리 개수. 결과 행 수에 비례해 늘면 N+1 이다
원본 보존
원천 값을 가공 없이 저장한다. 다시 받으려면 한도를 또 쓴다
원천 수집
외부 원천을 전량 또는 증분으로 받는다. 호출은 일일 한도 자원이다
원천 코드표 유도
원천의 분류 코드표(한 · 영 이름 쌍)에서 사전을 만든다
인덱스 설계
자주 쓰는 조건 · 정렬에 맞춰 인덱스를 만들어 조회가 테이블 전체를 읽지 않게 한다. 인덱스가 늘면 쓰기와 저장 공간 비용이 는다
읽기 복제본 라우팅 (read replica, master/replica routing, AbstractRoutingDataSource)
읽기 전용 트랜잭션은 복제본으로, 쓰기는 원본으로 보낸다. 원본의 부하를 덜지만 방금 쓴 값을 복제본에서 못 볼 수 있다
읽기 이상 현상 (read phenomena, isolation anomaly)
격리가 약할 때 다른 트랜잭션의 변경이 섞여 보이는 상태. 더티 리드 · 반복 불가능한 읽기 · 팬텀 읽기 · 쓰기 왜곡이 있다
임베딩 텍스트 규칙
무엇을 이어 붙여 인코딩하나 — 제목 · 분류 · 주소 · 개요
저장소 선택
데이터의 모양과 읽는 방식에 맞춰 저장소를 고른다. 정합성이 중요한 원장은 관계형, 자주 읽는 값은 인메모리, 대량 집계는 컬럼 지향 저장소가 맞다
정규화 · 파생
원본은 그대로 두고 화면용 그루핑은 파생 컬럼으로 만든다
증분 · 백필
안 받은 것만 이어 받는다. 일일 한도 안에서 며칠에 걸쳐 채운다
지연 로딩 (lazy loading, FetchType.LAZY)
연관 엔티티를 처음 접근할 때 읽는다(FetchType.LAZY). 안 쓰는 연관을 읽지 않지만, 목록을 돌며 접근하면 행마다 쿼리가 나간다
직렬화 (serialization, deserialization, marshalling)
객체를 JSON·바이트 같은 전송·저장 형식으로 바꾸고(직렬화) 되돌린다(역직렬화). Kotlin 의 non-null·기본값을 지키려면 Kotlin 모듈을 붙인 매퍼를 쓴다
카디널리티 (cardinality)
컬럼 값의 서로 다른 개수. 높을수록 인덱스가 행을 잘 걸러 낸다
캐시 불일치 (stale cache, cache inconsistency)
원본이 바뀌었는데 캐시가 옛 값을 내주는 상태. 가격 · 재고처럼 틀리면 비싼 값일수록 짧은 TTL 이나 쓰기 시 무효화가 필요하다
캐시 스탬피드 (cache stampede, thundering herd, dog-pile, hot key expiry)
인기 키가 만료된 순간 많은 요청이 동시에 원본을 조회해 DB 가 몰리는 상태. 만료 시각 분산, 한 요청만 재계산하는 잠금으로 막는다
캐시 전략
자주 읽고 드물게 바뀌는 값을 빠른 저장소에 복사해 둔다. 누가 채우고 누가 쓰는지(패턴), 얼마나 오래 두는지(TTL), 원본이 바뀌면 어떻게 지우는지(무효화), 만료 순간 몰림을 어떻게 막는지를 정한다
캐싱 (cache, 캐시)
원본보다 빠른 저장소(메모리 · Redis)에 결과를 보관해 다시 계산 · 조회하지 않는다. 읽기 · 쓰기에서 캐시와 원본을 누가 어떤 순서로 다루는지에 따라 패턴이 나뉜다
커넥션 관리
DB 연결을 만들고 나눠 쓰고 돌려받는다. 연결은 비싸고 DB 쪽 한도가 있으므로 풀 크기 · 대기 시간 · 트랜잭션 길이를 함께 본다
커넥션 대기 시간 (connection acquire time, hikaricp_connections_acquire, hikaricp_connections_pending)
요청이 풀에서 연결을 받기까지 기다린 시간. 0 에서 벗어나면 풀 크기보다 트랜잭션 길이부터 본다
커넥션 풀 (connection pool, DB 커넥션 풀)
DB 연결을 미리 만들어 두고 빌려 쓰고 돌려준다. 요청마다 TCP · 인증 비용을 내지 않는다. 풀이 비면 요청은 연결이 돌아올 때까지 기다린다
커넥션 풀 고갈 (connection pool exhaustion, Connection is not available)
모든 연결이 빌려 나가 새 요청이 타임아웃까지 기다리는 상태. 느린 쿼리, 긴 트랜잭션, 트랜잭션 안의 외부 호출, 잠금 대기가 흔한 원인이고 진짜 풀 부족은 드물다
쿼리 지연 (query latency, slow query)
쿼리 하나가 응답하기까지 걸린 시간. 평균보다 P95 · P99 로 보고, 실행 계획(EXPLAIN)과 함께 읽는다
클릭 약지도 라벨 (weak supervision, implicit feedback)
노출 · 클릭 · 체류 · 담기 · 구매 원장에서 0~4 관련도 라벨을 만든다. 사람 판정보다 싸지만 위치 편향이 섞여 있어 그대로 쓰면 1위를 1위라서 배운다
타입 안전 쿼리 빌더 (dynamic query, 동적 쿼리)
조건이 바뀌는 동적 조회를 문자열 JPQL 대신 컴파일되는 코드로 조립한다. 오타 · 타입 오류가 빌드에서 잡힌다
탐색 · 성향 로깅 (propensity)
노출 순서를 정한 정책과 그 선택 확률을 원장에 같이 남긴다. 가끔(ε) 순서를 섞어야 다른 정책의 결과를 나중에 추정할 수 있다. 트래픽이 오기 전에 깔아야 한다
트랜잭션 (transaction, commit, rollback)
전부 반영(커밋)되거나 전부 취소(롤백)되는 작업 단위
트랜잭션 관리
여러 변경을 한 단위로 묶어 전부 반영하거나 전부 취소한다. 격리 수준을 정해 동시에 도는 트랜잭션끼리 무엇이 보이는지 정한다
파생 컬럼
가공 값은 원본을 덮지 않고 별도 컬럼으로 둔다
팬텀 읽기 (phantom read)
같은 조건으로 두 번 조회했는데 그 사이 다른 커밋이 행을 넣거나 지워 결과 행 집합이 달라지는 것
페치 조인 (fetch join, JOIN FETCH, @EntityGraph)
연관 엔티티를 한 쿼리의 JOIN 으로 같이 읽는다(JOIN FETCH, @EntityGraph). 컬렉션 페치 조인은 페이징과 함께 쓰면 메모리에서 잘리므로 주의한다
풀 테이블 스캔 (full table scan, type=ALL)
조건에 맞는 인덱스가 없거나 못 써서 테이블 전체를 읽는 상태. 행이 늘수록 조회 시간이 선형으로 는다
풀스캔
원천 전량을 다시 받는다
품사 태그 (POS tag, 세종 품사)
한국어 분석기는 세종 품사 체계를 쓴다 — NNG 일반명사 · NNP 고유명사 · NR 수사 · MAG 일반부사 · VV 동사 … 품사 필터와 동의어 규칙이 이 태그를 본다. 같은 글자도 문맥 비용에 따라 다른 태그를 받는다
형태소 분석기 커스텀 층 (nori 커스텀)
분해 결과를 바꾸는 손잡이 셋 — 사용자 사전(L1) · 시스템 사전 항목(L2) · 비용 재학습(L3). 층이 깊을수록 플러그인 빌드와 라벨 코퍼스가 따라온다
ACID (Atomicity, Consistency, Isolation, Durability)
트랜잭션이 지켜야 할 네 성질. 원자성(전부 아니면 전무) · 일관성(제약을 깨지 않음) · 격리성(동시 실행이 서로 간섭하지 않음) · 지속성(커밋되면 장애 뒤에도 남음)
BASE (Basically Available, Soft state, Eventually consistent)
Basically Available, Soft state, Eventually consistent. ACID 의 즉시 일관성 대신 가용성을 우선하고 일관성은 시간이 지나 맞춰지는 것으로 받아들이는 모델
ClickHouse
컬럼 지향 분석용 저장소. 행 단위 갱신 대신 대량 적재와 집계에 맞다. 이 레포에서는 analytics 가 이벤트를 쌓고 recommendation 이 읽기만 한다
Flyway
버전 마이그레이션 도구. 기동 시 안 된 버전만 적용하고 flyway_schema_history 에 기록한다. Spring Boot 4 에서는 자동설정 모듈을 따로 넣어야 실제로 돈다
Hibernate
JPA 구현체. 영속성 컨텍스트 · 변경 감지 · 지연 로딩 프록시를 제공한다. 이 레포는 스키마 생성을 끄고 검증만 시킨다
HikariCP
Spring Boot 기본 JDBC 커넥션 풀. maximum-pool-size · minimum-idle · connection-timeout · max-lifetime · keepalive-time · leak-detection-threshold 로 조절한다
Jackson (ObjectMapper, jackson-module-kotlin)
JVM JSON 직렬화 라이브러리. jackson-module-kotlin 을 붙이면 주 생성자·기본값·non-null 을 이해해 data class 를 그대로 읽고 쓴다. Spring Boot 4 부터 패키지가 tools.jackson(3.x)으로 바뀌었다
mecab-ko-dic (MeCab)
MeCab 형식의 한국어 사전. 세종 말뭉치로 학습한 비용이 붙은 품사별 CSV 와 연접 비용 행렬(matrix.def) · 학습 모델(model.def)로 이뤄지고, Lucene nori 가 이것을 바이너리로 구워 쓴다
MVCC (Multi-Version Concurrency Control, 다중 버전 동시성 제어)
행의 여러 버전을 남겨 읽기는 잠금 없이 자기 시점의 스냅샷을 보게 한다. 읽기와 쓰기가 서로를 막지 않는다
MySQL
이 레포의 관계형 저장소(8.0, InnoDB). 도메인마다 스키마를 따로 두고 서비스 간에 공유하지 않는다. InnoDB 는 B-트리 인덱스 · MVCC · redo 로그(WAL)로 트랜잭션을 보장한다
N+1 문제 (N+1 query problem)
목록 1 번 조회 뒤에 각 행의 연관을 읽느라 N 번이 더 나가는 상태. 개발 데이터에서는 안 보이다가 운영 데이터 규모에서 지연으로 드러난다
ORM (Object-Relational Mapping, JPA)
객체와 관계형 테이블을 매핑해 SQL 을 직접 쓰지 않고 객체로 읽고 저장하게 한다. 이 레포는 JPA 엔티티를 infrastructure 에 두고 도메인 모델과 분리한다
Querydsl
엔티티에서 Q 타입을 생성해 JPQL 을 코드로 조립하는 라이브러리. JPAQueryFactory 로 쓴다
Redis
인메모리 키-값 저장소. 이 레포에서는 점수 캐시 · 재고 선차감 · 추천 결과(sorted set) · 레이트 리밋 카운터에 쓴다
TTL 만료 (TTL, time to live, expire)
캐시 항목에 수명을 걸어 시간이 지나면 저절로 지운다. 무효화 로직 없이 옛 값이 머무는 시간을 상한으로 묶는다
WAL (Write-Ahead Log, 선행 기록 로그, redo log)
데이터 페이지를 고치기 전에 변경 내용을 로그에 먼저 순차 기록한다. 장애 뒤에 로그를 다시 적용해 커밋된 변경을 복구하므로 ACID 의 지속성을 만든다

다른 분류