Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save YangSiJun528/3978a33fac695169d432f66b01f40d6a to your computer and use it in GitHub Desktop.

Select an option

Save YangSiJun528/3978a33fac695169d432f66b01f40d6a to your computer and use it in GitHub Desktop.
[Jungle My Note | W03] Mini-Redis 준비 자료.md

Mini-Redis 준비 자료

수요코딩회 Mini-Redis의 구현에 필요한 학습이나 기술적 선택을 정리한 문서입니다.
실제로 채택되진 않더라도 생각하는 과정에서 더 잘 이해할 수 있다고 생각합니다.

Redis 이론

꼭 Redis 뿐만 아니라 In-Memory Database 전반에 해당되는 내용도 포함되어있어요.

거의 대부분의 기술은 트레이드 오프(Trade-off)입니다. 어떤 선택이 어떤 장/단점을 가지는지 생각하면서 찾아보세요.

AI를 활용하되, 최대한 공식문서나 공신력 있는 자료를 찾아 올바른 내용인지 검증하세요.

In-Memory Database 핵심 개념

TODO

  1. 메모리 계층 구조에서 In-Memory DB는 어디에 위치하는가?
  2. Disk 기반 DB와 비교했을 때 장점 2가지, 단점 1가지 정리
  3. 어떤 상황에서 In-Memory DB를 사용하는 것이 적절한가?

체크 포인트

  • 트레이드오프 관계를 설명할 수 있어야 함.

Redis의 특징

TODO

  1. Redis는 왜 싱글 스레드 구조를 선택했는가?
  2. 어떤 기능을 제공하는가? (key-value 외 최소 2개)
  3. TTL은 어떻게 처리되는가? (관련 공식문서)

체크포인트

  • Redis의 싱글 스레드 채택 이유, 구조와 동작 방식에 대해 간단하게 설명할 수 있어야 함.

Redis의 사용 예시

TODO

  1. 여러 기술 블로그/유튜브 등 매체를 찾아보고 실제 서비스에서 어떤 용도로 쓰이는지 정리 (최대한 다른 요구사항을 처리하는 예시를 찾아보세요.)

Mini-Redis 구현

최소 요구사항

기능

  1. 키-값 저장
  2. 키로 값 조회
  3. 키 삭제
  4. TTL 설정 가능
  5. TTL이 지난 값은 조회 시 무효 처리
  6. 외부 프로그램이 API로 접근 가능

테스트/품질/시연

  • 단위/통합 테스트를 통해서 검증
  • 여러 엣지 케이스를 다루고 있는가?
  • 사용 여부의 성능 차이를 비교
  • 시연에서 핵심 구현/이유/결과를 잘 보여주기
  • README에서 시연이나 테스트를 재현 가능한가?

협업

  • 모든 팀원이 핵심 로직의 구현/동작 방식/필요성을 이해하기
  • 시간 내에 동작하는 프로젝트를 구현
  • 협업을 통해서 높은 효율을 보여주기

기술 선택하기

다음 요구사항을 고려하여 선택하고 평가하기. 이 선택으로 인한 트레이드 오프(장/단점을 설명할 수 있어야 함.)

요구사항

  1. 하루 안에 끝낼 수 있는가
  2. 구조가 간단한가
  3. 협업에 유리한가 (모듈화)
  4. 테스트/시현이 가능한가
  5. 핵심 로직을 설명 가능한가

질문

  1. 어떤 API를 사용할 것인가? (TCP,UDP,HTTP 등)
  2. 어떤 프레임워크를 사용할 것인가? 또는 사용하지 않는다면 그 이유는? (언어는 파이썬 고정)
  3. 동시성 문제를 어떻게 해결할 것인가?
  4. key-value 기능은 어떻게 구현할 것인가? (해시, 데이터 저장 방식)
  5. 추가/삭제/조회 기능은 어떻게 구현할 것인가?
  6. TTL 기능은 어떻게 구현할 것인가?
  7. 시연 시 어떤 방식으로 사용 전/후 성능을 비교할 것인가?
  8. 어떤 방식으로 테스트하고 검증할 것인가? 그 검증이 올바른지는 어떻게 확인하는가?
  9. 업무 분담은 어떤 식으로 진행할 것인가?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment