개발자 기술면접 꼬리물기 질문
  • Welcome
  • 01 Java
    • 01-01. Generic
    • Garbage Collection
    • 자료형과 객체 비교
    • 힙(Heap)과 메모리(Memory)
    • JDK 버전과 JRE
    • 스레드(Thread)
    • 예외(Throwable)
    • Call By Value와 Call By Reference
    • String, equals, StringBuffer
    • Thread와 비동기
  • 02 Spring
    • 02-01. Spring 동작 방식
    • @Autowired, @RequiredArgsConstructor
    • 인증(Authentication)과 인가(Authorization)
    • 트랜잭션(Transaction)
    • QueryDSL과 SQL Injection
    • SecurityContextHolder
    • @EqualsAndHashCode
  • 알고리즘과 자료구조
    • Set 자료구조
    • 정렬 알고리즘
    • 우선순위 큐 (Priority Queue)
    • DFS와 BFS
    • 힙(Heap) 자료구조
    • 스택(Stack)과 큐(Queue)
    • 암호화 알고리즘
    • LinkedList
    • 자료구조 - 해시 테이블(HashTable)
    • 자료구조 - ConcurrentHashMap
  • 데이터베이스
    • 기본
    • 인덱스 (Index)
    • 정규화 (Normalization)
    • 파티셔닝과 샤딩(Partitioning & Sharding)
    • 트랜잭션(Transaction)과 락(Lock)
    • 덤프(Dump)
    • Redis
    • 격리 수준(MySQL)
  • 네트워크
    • 전송 계층 (Transport Layer)
    • 네트워크 계층 (Network Layer)
    • Http와 Https
    • IP(Internet Protocol)
    • 프록시 서버
    • Http Protocol
    • 소켓(Socket)
    • 로드 밸런싱(Load Balancing)
  • 디자인 패턴
    • 전략 패턴 (Strategy Pattern)
    • 싱글톤 패턴 (Singleton Pattern)
    • 템플릿 메서드 패턴과 전략 패턴
    • 데코레이터 패턴 (Decorator pattern)
  • 웹
    • CORS 정책
    • 동시성 제어
    • N+1 문제
    • 웹 브라우저 동작원리
    • URI, URL, URN
    • 채팅 아키텍처 설계
  • 개발자
    • 개발 방법론 TDD
  • 운영체제
    • JIT & AOT 컴파일
    • 컨텍스트 스위칭(Context Switching)
    • 프로세스와 스레드
    • 싱글 스레드와 멀티 스레드
  • 코딩테스트
    • Stack / Queue (스택 / 큐)
    • Heap(우선 순위 큐)
    • DP(동적 계획법)
    • DFS(깊이 우선 탐색)
    • BFS(너비 우선 탐색)
    • Greedy(그리디 알고리즘)
    • 해시(Hash)
    • 투 포인터 알고리즘
    • Shortest path
    • 수학적 사고
Powered by GitBook
On this page
  • Q. Redis에 대해서 설명해주세요.
  • Q. Redis의 Cache-Aside 전략은 무엇인가요?
  • Q. Redis의 Rate Limiting에 대해서 설명해주세요.
  1. 데이터베이스

Redis

Q. Redis에 대해서 설명해주세요.

Redis는 Remote Dictionary Server의 약자로, 메모리 기반의 NoSQL 데이터베이스입니다.

일반적으로 Key-Value 저장소로 사용되며, 빠른 속도를 제공하기 때문에, 캐싱, 세션 관리, 메시지 브로커 등의 용도로 많이 활용됩니다.

Redis의 주요 특징으로는 데이터의 인메모리 저장, 빠른 응답 속도, 그리고 다양한 자료구조 지원이 있습니다. 데이터가 메모리에 저장되므로 조회 및 수정 속도가 빠르고, String, List, Set 등 다양한 자료구조를 제공하여 유연한 데이터 처리가 가능합니다.

또한, AOF, RDB 등의 영속성 기능을 지원하여 데이터를 디스크에 저장할 수도 있으며, Replication을 통해 Master-Slave 구조로 운영 가능하고, Sentinel과 Cluster를 이용한 고가용성 및 확장성도 제공합니다.

하지만, 메모리 기반이기 때문에 데이터 용량이 제한적이고, 장애 발생 시 데이터 유실 가능성이 있어 이에 대한 대비가 필요합니다.

Q. Redis의 Cache-Aside 전략은 무엇인가요?

Cache-Aside 전략은 애플리케이션에서 캐시를 효율적으로 사용하여 DB의 부하를 줄이는 패턴 중 하나로, 데이터가 캐시에 없는 경우와 있는 경우의 흐름을 정의한 방식입니다.

애플리케이션이 데이터를 요청하면 먼저 Redis에서 해당 데이터를 조회합니다. 캐시에 데이터가 있으면 바로 반환하는데, 이를 Cache Hit라고 합니다.

캐시에 데이터가 없으면, 애플리케이션은 DB에서 데이터를 조회합니다. 조회된 데이터를 Redis에 저장하여 다음 요청 시 캐시를 활용할 수 있도록 합니다.

만약 DB의 데이터가 변경되었을 경우, 보통 캐시의 해당 데이터를 무효화(삭제)하여 최신 데이터가 반영되도록 합니다. 이후 다음 조회 요청에서 새로운 데이터가 DB에서 조회된 후 다시 캐시에 저장됩니다.

Q. Redis의 Rate Limiting에 대해서 설명해주세요.

Rate Limiting은 말그대로 특정 시간 동안 허용된 요청 수를 제한하여 API 남용 방지, DDoS 완화, 트래픽 관리 등의 목적을 달성하는 기법입니다. 대표적으로 4가지 방식이 있습니다.

첫번째, Fixed Window Counter는 1분 등의 일정한 시간 단위에 대해 요청 횟수를 제한하는 방식입니다. Redis에서 키(key)와 카운터 값을 사용하여 요청 횟수를 추적하고 윈도우가 갱신될 때마다 카운터를 초기화합니다.

두번째, Sliding Window Log는 요청 시간을 Sorted Set으로 저장하고, 특정 기간 내의 요청 수를 계산하는 방식입니다. 요청이 발생할 때 현재 시간의 타임스탬프를 저장하고, TTL이 지난 이천 요청들은 삭제합니다.

세번째, Token Bucket은 일정 속도로 토큰을 생성하고, 요청 시 토큰을 소비하는 방식입니다. 생성된 토큰의 갯수에 따라 짧은 시간 내 다량 요청 허용을 할 수 있습니다.

마지막으로 Leaky Bucket은 버킷에서 일정한 속도로 요청을 처리하는 방식입니다. Redis의 큐를 활용하여 FIFO 방식으로 요청을 저장하고 순차적으로 처리합니다. 트래픽이 순각적으로 몰려도 부드럽게 처리되며, 과부하를 방지할 수 있습니다.

Previous덤프(Dump)Next격리 수준(MySQL)

Last updated 3 months ago