{"id":28254480,"url":"https://github.com/hoonapps/redis-set-ttl","last_synced_at":"2025-06-15T06:30:49.741Z","repository":{"id":292074432,"uuid":"979210968","full_name":"hoonapps/redis-set-ttl","owner":"hoonapps","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-20T02:02:10.000Z","size":142,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-25T07:57:55.457Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hoonapps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-07T07:00:26.000Z","updated_at":"2025-05-20T02:02:14.000Z","dependencies_parsed_at":"2025-05-08T03:19:38.941Z","dependency_job_id":"0f4b1833-03b1-4467-8ae6-4cbb648b8e46","html_url":"https://github.com/hoonapps/redis-set-ttl","commit_stats":null,"previous_names":["hoonapps/redis-set-ttl"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hoonapps/redis-set-ttl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoonapps%2Fredis-set-ttl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoonapps%2Fredis-set-ttl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoonapps%2Fredis-set-ttl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoonapps%2Fredis-set-ttl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hoonapps","download_url":"https://codeload.github.com/hoonapps/redis-set-ttl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoonapps%2Fredis-set-ttl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259934313,"owners_count":22934307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-19T19:20:06.791Z","updated_at":"2025-06-15T06:30:49.734Z","avatar_url":"https://github.com/hoonapps.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Redis 캐시 TTL 분석 및 자동화 최적화 프로젝트\n\n## 🧠 프로젝트 개요\n\n이 프로젝트는 `NestJS` 기반 백엔드에서 Redis 캐시의 **HIT/MISS 로그를 수집**하고,  \n이를 기반으로 **사용자별 캐시 TTL을 동적으로 추천**하는 실험 환경입니다.\n\nElasticsearch + Kibana를 통해 로그를 시각화하고, TTL 조정이 실제 캐시 효율에 어떤 영향을 주는지를 측정합니다.\n\n---\n\n## 🛠 기술 스택\n\n| 구성 요소 | 기술                            |\n| --------- | ------------------------------- |\n| 백엔드    | NestJS + TypeORM                |\n| 캐시      | Redis (`cache-manager-ioredis`) |\n| DB        | PostgreSQL                      |\n| 로그 수집 | Winston + Elasticsearch         |\n| 시각화    | Kibana                          |\n| 컨테이너  | Docker Compose                  |\n\n---\n\n## 📦 실행 방법\n\n### 1. Docker 컨테이너 빌드 및 실행\n\n```bash\ndocker compose up --build -d\n```\n\n실행 후 아래 서비스들이 동시에 구동됩니다:\n\n- NestJS (`http://localhost:3000`)\n- Redis (`localhost:6379`)\n- PostgreSQL (`localhost:5432`)\n- Elasticsearch (`http://localhost:9200`)\n- Kibana (`http://localhost:5601`)\n\n---\n\n### 2. NestJS API 사용\n\n#### 사용자 생성\n\n```bash\ncurl -X POST http://localhost:3000/users \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"hoon\", \"email\":\"hoon@example.com\"}'\n```\n\n#### 사용자 조회 (캐시 테스트용)\n\n```bash\ncurl http://localhost:3000/users/1\n```\n\n- 첫 요청은 MISS → Redis에 저장\n- 이후 요청은 HIT → 캐시 반환\n\n---\n\n### 3. 트래픽 시뮬레이션 실행\n\n```bash\nyarn ts-node scripts/load-generator.ts\n```\n\n- 10명의 유저가 랜덤 시간 간격으로 API 호출 (10분 동안 반복)\n\n---\n\n### 4. TTL 추천 배치 실행\n\n```bash\nyarn ts-node cron/ttl-analyzer.ts\n```\n\n- Elasticsearch에서 최근 10~12분간 로그 조회\n- HIT/MISS 비율 기반 TTL 계산\n- PostgreSQL + Elasticsearch(`ttl-stats`)에 결과 저장\n\n---\n\n## 🔍 Kibana 사용법\n\n1. 접속: [http://localhost:5601](http://localhost:5601)\n2. Stack Management → Index Patterns → `ttl-stats` 등록\n3. Discover → `ttl-stats` 선택 → 로그 확인\n4. Visualize → Bar/Line Chart 생성\n   - 예: 사용자별 TTL 변화, HIT/MISS 비율 추이\n\n---\n\n## 📊 기대 효과\n\n| 목표            | 설명                                                |\n| --------------- | --------------------------------------------------- |\n| 캐시 효율 측정  | 실제 API 사용 패턴에서 TTL이 얼마나 적절했는지 확인 |\n| TTL 튜닝 자동화 | 일정 비율 이상 HIT이면 TTL 증가, 낮으면 감소        |\n| 시각적 인사이트 | Kibana로 사용자별 캐시 성능 가시화                  |\n\n---\n\n## 📁 디렉토리 구조 예시\n\n```\n├── src/\n│   ├── user/\n│   │   ├── user.service.ts\n│   │   └── entities/\n│   │       ├── user.entity.ts\n│   │       └── user-ttl-log.entity.ts\n├── scripts/\n│   └── load-generator.ts\n├── cron/\n│   └── ttl-analyzer.ts\n├── logger.ts\n├── Dockerfile\n├── docker-compose.yml\n└── README.md\n```\n\n---\n\n## 🙌 마무리\n\n이 프로젝트는 Redis를 사용할 때 TTL(Time To Live)을 단순히 1분, 30분, 150분처럼 고정값으로 설정하는 대신,\n**보다 의미 있는 방식으로 TTL을 설정했을 때 어떤 효과가 있을지 탐색**하는 데서 출발했습니다.\n\n물론 이런 접근에는 로그 수집과 분석이라는 비용이 따르지만, 자주 조회되는 데이터를 캐시에 오래 보존해 응답 속도 개선 할 수 있고, 불필요한 데이터를 오래 유지하지 않음으로써 메모리 낭비 감소\n, MISS를 줄여 DB 호출 빈도를 줄임으로써 비용 절감 및 안정성 확보 할 수 있는 기대되는 부분도 있습니다.\n\n추후에는 이처럼 수집된 HIT/MISS 로그 기반의 자동 TTL 분석 툴을 만들어,\nRedis가 필요한 다양한 서비스에 쉽게 적용할 수 있는 구조로 확장해보는 것도 의미 있을 것 같습니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoonapps%2Fredis-set-ttl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoonapps%2Fredis-set-ttl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoonapps%2Fredis-set-ttl/lists"}