백엔드 면접 용어 사전
학습노트에서 용어를 누르면 여기로 옵니다. 각 용어의 동작 방식·장단점·면접 함정을 정리했습니다.
171개 용어 · 상세 정리 171개
API 설계1
API·REST13
- GraphQL
클라이언트가 필요한 필드만 질의하는 API 방식. 오버페칭을 줄이지만 캐싱과 N+1 관리가 과제다.
- Idempotency-Key멱등성 키
클라이언트가 부여한 요청 고유 키. 서버가 이를 저장해 재시도 시 결제 중복 처리를 막는다.
- REST
자원을 URI로 식별하고 HTTP 메서드로 행위를 표현하는 아키텍처 스타일. 무상태성과 균일 인터페이스가 핵심.
- Rate Limiting처리량 제한 · rate limiting · rate limit
일정 시간당 요청 수를 제한하는 보호 장치. 토큰 버킷·슬라이딩 윈도우로 구현한다.
- SSEServer-Sent Events · text/event-stream · Last-Event-ID
응답을 끝내지 않고 서버가 계속 밀어 보내는 단방향 방식. 자동 재연결과 유실 복구가 규격에 들어 있다.
- STOMPSimple Text Oriented Messaging Protocol
raw WebSocket 위에 목적지·구독 개념을 얹는 텍스트 메시징 규약. 채팅방처럼 구독 단위가 여럿일 때 쓴다.
- WebSocket웹소켓 · RFC 6455
HTTP Upgrade와 101 응답으로 프로토콜을 바꿔 양방향 프레임을 주고받는 통신 방식. 재연결은 직접 구현해야 한다.
- gRPC
HTTP/2와 Protocol Buffers 기반 RPC 프레임워크. 내부 서비스 간 저지연 통신에 적합하다.
- 롱 폴링long polling
서버가 응답을 곧바로 주지 않고 붙잡고 있다가 사건이 생기면 응답하는 방식. 폴링의 헛걸음을 없앤 과도기 기법.
- 멱등성idempotency
같은 요청을 여러 번 보내도 결과 상태가 한 번 보낸 것과 같은 성질. GET·PUT·DELETE는 멱등, POST는 아니다.
- 스티키 세션sticky session · 세션 어피니티
같은 클라이언트의 요청을 늘 같은 서버 인스턴스로 보내는 로드밸런서 설정. 연결이 인스턴스에 묶이는 실시간 통신에 필요하다.
- 안전성safe method
서버 상태를 바꾸지 않는 성질. GET·HEAD가 해당하며 멱등성과는 다른 개념이다.
- 커서 페이지네이션cursor pagination · 커서 · cursor
마지막 항목의 기준값 이후를 조회하는 방식. OFFSET의 깊은 페이지 성능 저하와 누락·중복을 피한다.
Java·객체지향17
- AOT 캐시Project Leyden · AOT Cache
로드·링크가 끝난 클래스와 메서드 프로파일을 파일로 저장해 재사용하는 JVM 기동 최적화. 코드 변경 없이 최대 42% 단축.
- Checked ExceptionChecked 예외
컴파일러가 처리를 강제하는 예외. 스프링에서는 기본적으로 롤백되지 않는다는 점이 함정이다.
- Compact Object Headers압축 객체 헤더
객체 헤더를 두 워드에서 한 워드로 줄여 힙 사용량과 캐시 지역성을 개선하는 JVM 옵션. Java 25에서 프로덕션 기능.
- JEP 491Synchronize Virtual Threads without Pinning
Java 24에서 synchronized로 인한 가상 스레드 pinning을 없앤 변경. 모니터 소유권을 캐리어가 아닌 가상 스레드로 추적한다.
- JVM 런타임 데이터 영역JVM 메모리 · JVM
메서드 영역·힙·스택·PC·네이티브 스택으로 나뉜 JVM의 메모리 구조. 스택은 스레드마다, 힙은 공유다.
- Scoped ValuesScoped Value · 스코프 값
ThreadLocal을 대체하는 불변 컨텍스트 전달 기능. 값이 블록 범위에서만 살아 있고 자동으로 해제된다. Java 25 정식.
- Stop-The-WorldSTW
GC 수행을 위해 애플리케이션 스레드를 전부 멈추는 구간. 지연 시간의 주된 원인이다.
- equals와 hashCode
논리적 동등성 판단과 해시 버킷 배정을 맡는 짝. equals를 재정의하면 hashCode도 함께 재정의해야 한다.
- pinning고정(pinning)
가상 스레드가 캐리어 스레드에서 언마운트하지 못하고 붙잡혀 있는 상태. Java 24에서 synchronized 원인은 제거됐다.
- 가비지 컬렉션GC
도달 불가능한 객체의 메모리를 자동 회수하는 작업. Young/Old 영역과 STW 시간이 핵심 논점이다.
- 가상 스레드Virtual Thread · virtual thread · Project Loom
블로킹을 만나면 OS 스레드를 놓아 주는 JVM 관리 스레드. 블로킹 코드를 그대로 쓰면서 수만 동시성을 얻는다.
- 구조적 동시성Structured Concurrency
부모-자식 작업을 하나의 블록으로 묶어 함께 대기·취소·전파하는 동시성 모델. 고아 작업과 누락된 취소를 구조로 막는다.
- 불변 객체immutable
생성 후 상태가 바뀌지 않는 객체. 공유해도 안전해 동시성 문제를 원천 차단한다.
- 오버라이딩overriding
상위 클래스의 메서드를 하위에서 재정의하는 것. 실행 시점에 실제 타입으로 결정된다(동적 바인딩).
- 오버로딩overloading
같은 이름에 매개변수 목록을 달리한 메서드를 여러 개 두는 것. 컴파일 시점에 결정된다.
- 캐리어 스레드carrier thread
가상 스레드를 실제로 실행시키는 진짜 OS 스레드. ForkJoinPool로 관리되며 기본 개수는 CPU 코어 수다.
- 타입 소거type erasure
제네릭 타입 정보가 컴파일 후 지워지는 특성. 런타임에 타입 파라미터를 알 수 없다.
Spring·JPA25
- 1차 캐시first-level cache
영속성 컨텍스트가 트랜잭션 동안 엔티티를 담아 두는 Map. 같은 id를 다시 조회하면 DB에 가지 않는다.
- @Transactional
메서드 실행을 트랜잭션으로 감싸는 애너테이션. 프록시 기반이라 자기 호출(self-invocation)에는 적용되지 않는다.
- AOP
로깅·트랜잭션처럼 여러 곳에 흩어지는 관심사를 분리해 주입하는 기법. 스프링은 프록시로 구현한다.
- DI의존성 주입
필요한 협력 객체를 외부에서 넣어 주는 방식. 생성자 주입이 권장된다(불변·순환 조기 발견).
- DispatcherServlet
모든 요청을 받아 핸들러를 찾아 위임하는 스프링 MVC의 프론트 컨트롤러.
- Filter vs InterceptorInterceptor
Filter는 서블릿 컨테이너 단계, Interceptor는 스프링 MVC 단계에서 요청을 가로챈다.
- IoC제어의 역전
객체 생성·생명주기 제어를 프레임워크가 맡는 설계 원칙. 스프링에서는 컨테이너가 빈을 관리한다.
- JDBCJava Database Connectivity
자바가 관계형 DB와 통신하는 표준 API. JPA·MyBatis·jOOQ·JdbcTemplate이 전부 그 위에서 돈다.
- MyBatisSQL Mapper
SQL 을 직접 작성해 결과를 객체에 매핑하는 SQL 매퍼. ORM 과 달리 쿼리 생성을 프레임워크에 맡기지 않는다.
- Q 클래스QMember
QueryDSL 이 빌드 시점에 엔티티로부터 생성하는 메타모델 클래스. 쿼리 조건을 타입 있는 필드로 쓰게 해준다.
- QueryDSL
엔티티에서 생성한 Q 클래스로 쿼리를 자바 코드처럼 조립하는 라이브러리. 컴파일 시점 검증과 동적 쿼리가 목적이다.
- R2DBCReactive Relational Database Connectivity
관계형 DB를 논블로킹으로 접근하는 스펙. JDBC의 리액티브 버전이 아니라 별도 생태계이며, JPA가 존재하지 않는다.
- Spring Boot 4Spring Framework 7
2025-11 출시된 Spring Framework 7 기반 세대. 모듈화·API 버저닝·HTTP Service Client·JSpecify 널 안전성이 핵심이다.
- WebFluxSpring WebFlux · 리액티브
적은 이벤트 루프 스레드로 동시성을 처리하는 Spring의 논블로킹 웹 스택. 가상 스레드 등장 후 기본 선택지에서 내려왔다.
- fetch join
연관 엔티티를 한 번의 조인 쿼리로 함께 가져오는 JPQL 문법. N+1의 대표 해법이다.
- flush
쌓아 둔 변경을 SQL로 만들어 DB에 내보내는 동작. 영속성 컨텍스트를 비우지는 않는다.
- jOOQJava Object Oriented Querying
DB 스키마에서 자바 코드를 생성해 SQL을 타입 안전하게 작성하는 라이브러리. 컬럼명·타입 오류를 컴파일 시점에 잡는다.
- 백프레셔backpressure · 역압
소비자가 감당 가능한 만큼만 요청해 생산자 속도를 거꾸로 제어하는 흐름 제어. 리액티브 스트림의 핵심이자 가상 스레드가 대체 못 하는 지점.
- 변경 감지dirty checking
스냅샷과 비교해 바뀐 필드를 찾아 UPDATE를 자동 생성하는 기능. 그래서 setter만으로 반영된다.
- 스냅샷snapshot · loadedState
엔티티를 조회한 순간의 필드 값을 통째로 복사해 둔 배열. 변경 감지가 이것과 현재 값을 비교한다.
- 싱글톤 스코프singleton scope · 싱글톤
컨테이너당 빈 인스턴스를 하나만 두는 기본 스코프. 상태를 두면 스레드 안전 문제가 생긴다.
- 영속성 컨텍스트persistence context
엔티티를 관리하는 1차 캐시 공간. 동일성 보장·변경 감지·쓰기 지연·지연 로딩을 제공한다.
- 지연 로딩lazy loading
연관 엔티티를 실제 사용 시점까지 조회하지 않는 전략. 프록시로 구현되며 N+1의 원인이자 해법의 출발점.
- 트랜잭션 전파propagation
이미 트랜잭션이 있을 때 어떻게 처리할지 정하는 속성. REQUIRED가 기본이고 REQUIRES_NEW는 별도 트랜잭션을 만든다.
- 프로젝션Projections
조회 결과를 엔티티 전체가 아니라 필요한 칼럼만 골라 DTO 로 받는 것. select 대상 자체를 줄인다.
네트워크11
- 3-way handshake
SYN → SYN+ACK → ACK로 연결을 맺는 절차. 양쪽의 송수신 능력과 초기 시퀀스를 상호 확인한다.
- CLOSE_WAIT
FIN을 받고도 애플리케이션이 close()를 호출하지 않아 머무는 상태. 쌓이면 대개 앱의 버그다.
- HOL BlockingHead-of-Line Blocking
앞선 요청이 막혀 뒤가 함께 지연되는 현상. HTTP/2는 앱 계층만 해소하고 TCP 계층은 남아 HTTP/3가 QUIC를 쓴다.
- QUIC
UDP 위에서 동작하는 전송 프로토콜. 스트림별 독립 전송으로 TCP의 HOL Blocking을 없앤다.
- TCP
연결형·신뢰성 전송 프로토콜. 시퀀스 번호·ACK·재전송·흐름/혼잡 제어로 순서와 도달을 보장한다.
- TIME_WAIT
연결을 먼저 닫은 쪽이 2×MSL 동안 머무는 상태. 마지막 ACK 유실 대비와 늦은 패킷 혼입 방지 목적이다.
- TLSHTTPS · SSL
대칭키로 데이터를 암호화하고, 그 대칭키 교환과 서버 신원 확인에 공개키·인증서를 쓰는 보안 계층.
- UDP
비연결형·비신뢰 전송 프로토콜. 헤더가 8바이트로 가볍고 실시간성이 중요한 곳에 쓴다.
- 체크섬checksum
전송 오류를 검출하는 값. 정정은 못 하며 TCP는 재전송으로, UDP는 폐기로 대응한다.
- 혼잡 제어congestion control
네트워크 전체가 막히지 않게 송신량을 조절하는 것. slow start·AIMD 등으로 동작한다.
- 흐름 제어flow control
수신자의 버퍼가 넘치지 않게 송신량을 조절하는 것. 수신 윈도우 광고로 동작한다.
데이터베이스16
- ACID
트랜잭션의 네 성질 — 원자성·일관성·격리성·지속성.
- B+트리 인덱스인덱스 · index
정렬된 키를 균형 트리로 관리해 탐색·범위 조회를 로그 시간으로 만드는 자료구조. 대부분 RDBMS의 기본 인덱스.
- Dirty Read
커밋되지 않은 변경을 다른 트랜잭션이 읽는 이상현상. READ COMMITTED 이상에서 막힌다.
- MVCC
버전을 여러 개 유지해 읽기가 쓰기를 막지 않게 하는 동시성 제어 방식.
- N+1 문제
목록 1번 조회 뒤 각 행마다 추가 쿼리가 N번 나가는 현상. fetch join·batch size로 해결한다.
- Phantom Read
같은 조건의 범위 조회 결과에 없던 행이 나타나는 이상현상. 범위 락 또는 SERIALIZABLE로 막는다.
- 격리수준isolation level
동시 트랜잭션이 서로를 얼마나 볼 수 있는지 정하는 단계. READ UNCOMMITTED~SERIALIZABLE 네 수준.
- 낙관적 락optimistic lock
충돌이 드물다고 보고 버전 컬럼으로 커밋 시점에 검증하는 전략. 충돌 시 재시도가 필요하다.
- 반정규화denormalization
조회 성능을 위해 의도적으로 중복을 허용하는 설계. 정합성 유지 책임이 애플리케이션으로 넘어온다.
- 복제replication
같은 데이터를 여러 노드에 복사해 읽기 확장과 가용성을 얻는 기법. 복제 지연이 따라온다.
- 복합 인덱스composite index
여러 컬럼을 순서대로 묶은 인덱스. 선행 컬럼부터 조건이 주어져야 활용되는 좌측 접두 규칙이 있다.
- 비관적 락pessimistic lock
충돌을 가정해 미리 잠그는 전략.
SELECT … FOR UPDATE가 대표적이며 경쟁이 심할 때 유리하다. - 샤딩sharding
데이터를 여러 노드에 수평 분할해 쓰기까지 분산하는 기법. 크로스 샤드 조인·트랜잭션이 어려워진다.
- 실행계획EXPLAIN · execution plan
옵티마이저가 고른 접근 경로·조인 방식·예상 비용을 보여주는 출력. 인덱스 사용 여부 확인의 출발점.
- 정규화normalization
중복과 종속을 제거해 갱신 이상을 막는 설계 과정. 조인이 늘어 조회 비용이 커질 수 있다.
- 커버링 인덱스covering index
쿼리에 필요한 컬럼이 인덱스에 모두 있어 테이블 접근 없이 처리되는 경우.
메시지 큐21
- At-Least-Onceat-least-once
메시지가 최소 한 번 전달되는 보장. 중복이 생길 수 있어 소비자 멱등성이 필요하다.
- DLQDead Letter Queue
반복 실패한 메시지를 따로 모아 두는 큐. 원인 분석과 재처리의 출발점이다.
- Exactly-Once
정확히 한 번 처리되는 보장. 브로커만으로는 어렵고 멱등 처리나 트랜잭션과 결합해 달성한다.
- Exchange익스체인지 · exchange
RabbitMQ에서 발행자가 메시지를 보내는 대상. 어느 큐로 갈지는 바인딩 규칙이 정한다.
- ISRIn-Sync Replicas
리더와 동기화된 팔로워 집합.
acks=all은 ISR 전체 반영을 기다려 내구성을 높인다. - KRaftKafka Raft · KIP-500
Kafka가 ZooKeeper 없이 스스로 메타데이터를 관리하는 합의 방식. Kafka 4.0부터는 이 모드만 지원한다.
- Kafka
로그를 파티션에 append하고 오프셋으로 소비하는 분산 스트리밍 플랫폼. 높은 처리량과 재처리에 강하다.
- RabbitMQ
익스체인지·큐 기반의 메시지 브로커. 유연한 라우팅과 개별 메시지 제어에 강하다.
- Transactional OutboxOutbox 패턴
이벤트를 업무 트랜잭션과 같은 DB에 먼저 기록하고 별도 프로세스가 발행하는 패턴.
- acksmin.insync.replicas
프로듀서가 쓰기를 성공으로 인정받는 조건. all + min.insync.replicas=2 조합이 유실 방지의 표준이다.
- dual-write 문제
DB와 브로커에 각각 쓰다 한쪽만 성공해 불일치가 생기는 문제. Outbox 패턴으로 해결한다.
- prefetchQoS · basic.qos
RabbitMQ에서 소비자당 미리 밀어 줄 미확인 메시지 수의 상한. 처리량과 공평한 분배 사이의 손잡이다.
- 로그 컴팩션compaction · cleanup.policy
같은 키의 최신 값만 남기는 Kafka의 정리 방식. 토픽을 이벤트 기록이 아니라 현재 상태 스냅샷으로 만든다.
- 리텐션retention.ms · 보존 기간
Kafka가 메시지를 보관하는 기간·크기. 기본 7일이며, 이 값이 곧 재처리가 가능한 창이다.
- 메시지 큐message queue
생산자와 소비자를 시간·부하 측면에서 분리해 주는 비동기 통신 수단.
- 오프셋
파티션 안에서 메시지의 순번. 컨슈머의 진행 위치를 나타내며 커밋 시점이 중복·유실을 가른다.
- 컨슈머 그룹consumer group
같은 group.id를 공유하며 파티션을 나눠 소비하는 컨슈머 묶음. 그룹의 최대 병렬성은 파티션 수다.
- 컨슈머 랙consumer lag · 컨슈머 lag
쌓인 마지막 오프셋에서 그룹이 커밋한 오프셋을 뺀 값. 소비가 생산을 못 따라가는 정도를 나타내는 운영 1순위 지표.
- 컨슈머 리밸런싱rebalancing · 리밸런싱
컨슈머 그룹 구성이 변할 때 파티션을 재배분하는 과정. 그 동안 소비가 잠시 멈춘다.
- 쿼럼 큐quorum queue · delivery-limit
Raft 합의로 복제되는 RabbitMQ의 고가용성 큐. 4.0에서 classic mirrored queue가 제거되며 유일한 선택지가 됐다.
- 파티션 키partition key
메시지를 어느 파티션에 넣을지 정하는 값. 같은 키를 쓰면 그 키 안에서 순서가 보장된다.
면접 태도·시나리오4
설계2
시스템 설계11
- 2PC2단계 커밋
코디네이터가 준비·커밋 두 단계로 분산 트랜잭션을 맞추는 프로토콜. 코디네이터 장애에 취약하다.
- CAP 정리
네트워크 분단이 있을 때 일관성과 가용성 중 하나를 골라야 한다는 정리. 분단이 없을 때의 선택은 PACELC가 설명한다.
- PACELC
분단 시 A/C, 정상 시 지연(L)/일관성(C)의 선택을 함께 보는 확장 모델.
- Saga 패턴
여러 로컬 트랜잭션을 이어 붙이고 실패 시 보상 트랜잭션으로 되돌리는 분산 트랜잭션 방식.
- Snowflake ID분산 ID
타임스탬프·노드·시퀀스를 조합해 정렬 가능한 고유 ID를 만드는 방식.
- 낙관적 재시도OptimisticLockException · 재시도 로직
충돌 시 되돌리고 다시 시도하는 방식. 선착순·재고 차감 같은 짧은 경쟁에 쓰인다.
- 리버스 프록시reverse proxy
클라이언트 요청을 대신 받아 내부 서버로 넘기는 중개자. TLS 종료·로드밸런싱·캐싱을 맡는다.
- 벌크헤드bulkhead
자원 풀을 격리해 한 곳의 고갈이 전체로 번지지 않게 하는 패턴.
- 서킷 브레이커circuit breaker
실패가 임계치를 넘으면 호출을 차단해 장애 전파를 막는 패턴. Closed·Open·Half-Open 상태를 갖는다.
- 지수 백오프exponential backoff
재시도 간격을 점점 늘리는 전략. 지터를 섞어 동시 재시도가 몰리는 것을 막는다.
- 최종 일관성eventual consistency
시간이 지나면 모든 복제본이 같아지는 보장. 즉시 일관성을 포기해 가용성과 성능을 얻는다.
운영체제14
- LRU
가장 오래 참조되지 않은 페이지를 내보내는 교체 정책. 해시맵 + 이중 연결 리스트로 O(1) 구현한다.
- TLB
가상→물리 주소 변환 결과를 캐싱하는 하드웨어. 적중하면 페이지 테이블 접근을 건너뛴다.
- 가상 메모리virtual memory
물리 메모리보다 큰 주소 공간을 제공하는 기법. 페이지 단위로 필요한 부분만 올려 쓴다.
- 경쟁 조건race condition
공유 자원에 대한 접근 순서에 따라 결과가 달라지는 결함. 원자성이 깨질 때 발생한다.
- 기아 상태starvation · 기아
우선순위에 밀려 특정 주체가 자원을 계속 얻지 못하는 상태. 에이징으로 완화한다.
- 데드락교착 상태 · deadlock
서로가 쥔 자원을 기다려 아무도 진행하지 못하는 상태. 상호배제·점유대기·비선점·환형대기가 동시에 성립할 때 발생한다.
- 뮤텍스mutex
임계 구역을 한 스레드만 들어가게 하는 상호 배제 장치. 잠근 주체만 풀 수 있다(소유권 개념).
- 세마포어semaphore
카운터로 동시 진입 허용 수를 제어하는 동기화 장치. 소유권이 없어 다른 주체가 풀 수 있다.
- 스래싱thrashing
페이지 교체가 과도해 실제 작업보다 스왑에 시간을 더 쓰는 상태. 다중 프로그래밍 정도를 낮춰 해소한다.
- 스레드thread
프로세스 안의 실행 흐름 단위. 코드·데이터·힙을 공유하고 스택과 레지스터만 따로 갖는다.
- 스핀락spinlock
잠금이 풀릴 때까지 CPU를 붙잡고 반복 확인하는 락. 대기가 아주 짧을 때만 유리하다.
- 컨텍스트 스위칭context switch
CPU가 실행 주체를 바꿀 때 레지스터·PC 등 상태를 저장하고 복원하는 작업. 캐시·TLB 무효화 비용이 따른다.
- 페이지 폴트page fault
접근한 페이지가 물리 메모리에 없을 때 발생하는 예외. OS가 디스크에서 적재한 뒤 재실행한다.
- 프로세스process
실행 중인 프로그램의 독립된 주소 공간 단위. 서로 메모리를 공유하지 않아 통신에 IPC가 필요하다.
인증·인가11
- CSRF
로그인된 사용자의 브라우저를 이용해 의도치 않은 요청을 보내게 하는 공격. 토큰·SameSite로 막는다.
- HttpOnly
자바스크립트의 쿠키 접근을 막는 속성. XSS로 토큰이 탈취되는 것을 줄인다.
- JWT
헤더·페이로드·서명 세 부분으로 이루어진 자기 완결 토큰. 서버 저장이 없어 즉시 무효화가 어렵다.
- OAuth 2.0
제3자 앱에 자원 접근 권한을 위임하는 인가 프레임워크. 인증 규격은 그 위의 OIDC가 담당한다.
- OIDCOpenID Connect
OAuth 2.0 위에 ID 토큰을 얹어 인증까지 표준화한 규격.
- RBAC
권한을 역할에 묶고 사용자에게 역할을 부여하는 접근 제어 모델.
- Refresh Token
짧은 수명의 액세스 토큰을 재발급받기 위한 장수명 토큰. 저장 위치와 회전 전략이 보안 쟁점이다.
- XSS
검증되지 않은 입력이 스크립트로 실행되는 취약점. 출력 이스케이프와 CSP로 막는다.
- 세션session
서버가 로그인 상태를 저장하고 클라이언트에는 식별자만 주는 방식. 서버 확장 시 스토어 분리가 필요하다.
- 인가Authorization
확인된 주체가 그 행위를 할 권한이 있는지 판단하는 절차.
- 인증Authentication
요청 주체가 누구인지 확인하는 절차.
자료구조·알고리즘14
- BFS너비 우선 탐색
가까운 정점부터 층별로 넓혀 가는 탐색. 큐로 구현하며 가중치 없는 최단경로를 찾는다.
- Big-O 표기법시간복잡도 · 복잡도 · Big-O
입력 크기가 커질 때 연산 횟수의 증가 추세를 상수·계수를 떼고 나타낸 상한 표기.
- DFS깊이 우선 탐색
갈 수 있는 만큼 깊이 내려간 뒤 되돌아오는 그래프 탐색. 스택(또는 재귀)으로 구현한다.
- 개방 주소법open addressing · 선형 탐사 · 개방주소법
충돌 시 정해진 규칙으로 다음 빈 슬롯을 찾아 저장하는 방식. 삭제 시 tombstone 처리가 필요하다.
- 동적 계획법DP
겹치는 부분 문제의 답을 저장해 재계산을 없애는 기법. 메모이제이션·타뷸레이션으로 구현한다.
- 배열 vs 링크드리스트
배열은 연속 메모리로 임의 접근 O(1)·삽입 O(n), 링크드리스트는 포인터로 삽입 O(1)·접근 O(n).
- 분할 상환 분석amortized
개별 연산이 아니라 연속된 연산 전체의 평균 비용을 따지는 분석. 동적 배열 append가 평균 O(1)인 근거.
- 스택stack · LIFO
마지막에 넣은 것이 먼저 나오는(LIFO) 자료구조. 함수 호출·괄호 검사·DFS에 쓰인다.
- 안정 정렬stable sort
값이 같은 원소의 원래 순서를 보존하는 정렬. 병합 정렬은 안정, 퀵 정렬은 불안정하다.
- 이진 탐색 트리BST
왼쪽은 작고 오른쪽은 큰 규칙을 지키는 트리. 균형이 깨지면 최악 O(n)으로 퇴화한다.
- 체이닝separate chaining
충돌한 키들을 버킷마다 연결 리스트(또는 트리)로 매달아 두는 해시 충돌 해결 방식.
- 큐queue · FIFO
먼저 넣은 것이 먼저 나오는(FIFO) 자료구조. BFS·작업 대기열에 쓰인다.
- 해시 충돌collision
서로 다른 키가 같은 버킷에 배정되는 현상. 체이닝 또는 개방 주소법으로 해결한다.
- 힙heap · 우선순위 큐
부모가 자식보다 항상 크거나(작거나) 같은 완전 이진 트리. 최댓값·최솟값 추출이 O(log n).
장애 대응3
캐시·Redis8
- Cache-AsideLook-Aside
애플리케이션이 캐시를 먼저 보고 없으면 DB에서 읽어 캐시에 채우는 가장 흔한 캐시 전략.
- TTL
캐시 항목의 생존 시간. 만료 시각을 흩뜨리는 지터를 주면 동시 만료를 피할 수 있다.
- Write-Back
캐시에만 먼저 쓰고 나중에 DB에 반영하는 전략. 빠르지만 유실 위험이 있다.
- Write-Through
쓰기 시 캐시와 DB를 함께 갱신하는 전략. 일관성이 좋지만 쓰기 지연이 늘어난다.
- eviction축출
메모리가 한계에 이르렀을 때 항목을 골라 내보내는 동작. Redis는 LRU·LFU 등 정책을 제공한다.
- 분산 락distributed lock
여러 인스턴스 간 임계 구역을 지키는 락. Redis로 구현할 때 소유자 검증과 만료 처리가 필수다.
- 캐시 무효화invalidation
원본이 바뀔 때 캐시를 지우거나 갱신하는 일. 분산 환경에서 가장 어려운 문제로 꼽힌다.
- 캐시 스탬피드Thundering Herd
인기 키가 동시에 만료돼 요청이 한꺼번에 DB로 몰리는 현상. 락·조기 갱신·TTL 지터로 완화한다.