redis 스터디 2번째로 각자
DB 를 Redis 를 이용하여 간단한 ToDo리스트 만들기로 했다.
주 목적이 Redis 를 이용해보자
라는 것이었기 때문에 FastAPI 를 사용해 간단하게 만들고 나머지는 지피티의 도움을 받아서 완성 시켰다.
먼저 Redis 를 다운을 받아야 했다.
다운을 받은후
$ redis-server
명령어를 통해 입력하였지만
환경변수 설정을 안해서 레디스가 있는 폴더로 경로변경을 해야만 실행이 가능했다.
이과정이 너무 귀찮아서 바로 저 명령어로만 실행되게 환경변수 설정을 해주었고
이렇게 6379 포트로 서버가 실행된걸 볼 수 있었다.
종료할거면 Ctrl + C 로 종료할 수 있다.
그후
$ redis-cli
명령어를 통해 서버에 연결할수 있었다.
- redis-server : 6379번 포트에서 Redis가 실행되고, 이포트가 외부에서 접속 가능하도록 열리게 됨
- redis-cli : 실행된 Redis 서버와 연결하여 명령을 실행할 수 있다.
- 기본적으로 로컬머신에서 6379 포트로 연결을 시도한다.
- 만약 Redis 서버가 다른 포트에서 실행 중이라면, -p 옵션을 사용하여 포트를 지정할 수 있다.
연결을 하고나선 잘 된건지 확인하기위해
ping 을 날리면
pong 이라고 답이 온다.
그후 FastAPI 를 이용해 간단한 ToDo리스트를 만들기인데 지피티의 도움을 받았다.
파일이름은 todo.py 이고 코드를 보자면
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import redis
import json
# FastAPI 앱 생성
app = FastAPI()
# Redis 클라이언트 연결
redis_client = redis.Redis(host="localhost", port=6379, decode_responses=True)
# Todo 모델 정의
class Todo(BaseModel):
id: str # 고유 ID
title: str
description: str = None
completed: bool = False
# Redis에 키 저장 형식
TODO_KEY_PREFIX = "todo:"
# Redis에서 모든 Todo 가져오기
@app.get("/todos")
def get_all_todos():
keys = redis_client.keys(f"{TODO_KEY_PREFIX}*")
todos = [json.loads(redis_client.get(key)) for key in keys]
return {"todos": todos}
# 특정 Todo 가져오기
@app.get("/todos/{todo_id}")
def get_todo(todo_id: str):
key = f"{TODO_KEY_PREFIX}{todo_id}"
todo = redis_client.get(key)
if not todo:
raise HTTPException(status_code=404, detail="Todo not found")
return json.loads(todo)
# Todo 생성
@app.post("/todos", status_code=201)
def create_todo(todo: Todo):
key = f"{TODO_KEY_PREFIX}{todo.id}"
if redis_client.exists(key):
raise HTTPException(status_code=400, detail="Todo with this ID already exists")
redis_client.set(key, json.dumps(todo.dict()))
return {"message": "Todo created successfully"}
# Todo 업데이트
@app.put("/todos/{todo_id}")
def update_todo(todo_id: str, todo: Todo):
key = f"{TODO_KEY_PREFIX}{todo_id}"
if not redis_client.exists(key):
raise HTTPException(status_code=404, detail="Todo not found")
redis_client.set(key, json.dumps(todo.dict()))
return {"message": "Todo updated successfully"}
# Todo 삭제
@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: str):
key = f"{TODO_KEY_PREFIX}{todo_id}"
if not redis_client.exists(key):
raise HTTPException(status_code=404, detail="Todo not found")
redis_client.delete(key)
return {"message": "Todo deleted successfully"}
이렇게 간단하게 구성되었다.
FastAPI 를 사용하여 터미널에서
$ uvicorn todo:app --reload
명령어를 통해 실행하면
이렇게 실행이된걸 볼수있다.
FastAPI 는 기본적으로 Swagger UI 와 ReDoc API 문서를 제공해준다
- Swagger UI : /docs
- ReDoc : /redoc
그래서 서버주소/docs 로 이동하면
이런식으로 스웨거를 사용할수있고
내가 잘 짠게 맞는지 포스트맨으로 확인하였다.
post 요청으로 ToDo 생성도 잘되고
get 요청으로 모든 ToDO 를 가져오는것도 잘 되는걸 확인하였다.
redis 명령어로 확인하기위해
$ redis-cli
명령어를 통해 연결한후
key값 todo:3 의 데이터를 조회하기위해 명령어를 보내봤다.
이런식으로 잘 들어오는걸 확인할 수 있었다.
나는 이 짧은시간내에 내가 해낼줄 몰랐는데
스터티 같이하시는분들이 워낙 실력이 좋으시고 친절히 알려주셔서 성공한것같다.
추후에 팀프로젝트를 같이 진행할수도 있으니 민폐가 되지않게 부단히 따라가도록 노력해야겠다.
'DB' 카테고리의 다른 글
[Redis] redis 스터디 - WebSocket 을 이용해 채팅기능을 구현하기 (3) | 2024.12.22 |
---|---|
[Redis] redis 스터디 - redis 맛보기 (3) | 2024.12.22 |