본문 바로가기

FastAPI

Multi-Worker Redis 연결 문제 해결(Claude Agent) 에러: TypeError: 'NoneType' object is not callable 원인: Dockerfile에 설정해 놓은 Gunicorn 9개 worker가 메인 프로세스에서 생성된 Redis 연결을 공유하면서 asyncio 이벤트 루프 충돌 발생✅ 해결 방법 1. Redis 연결 Lazy Initialization (app/core/redis.py)아래의 코드를 redis_pool = ConnectionPool( host=host, port=port, db=db, password=password, decode_responses=True, # 문자열 응답을 자동으로 디코딩 max_connections=10, socket_keepalive=True, so.. 더보기
로또 번호 맞추기(FastAPI) 1. 개요: 가장 최근까지 1등 당첨번호들을 수집하여, 가장 당첨번호에 많이 포함되었던 당첨 빈도수가 높은 번호들을 자기가 원하는 갯수만큼 지정하고(6개에서 45개까지 가능함), 그 중에서 당첨 예상번호 6개를 무작위로 추출하는 방식임(예를 들자면, 사용자가 가장 당첨빈도수가 높은 번호 10개를 지정했을때, 그 10개가 다음의 숫자가 가장 당첨빈도수가 높은 10개라고 한다면(예, 1,10,24,22,16, 32,18,21,16, 8), 이 10개의 숫자를 무작위로 돌려 6개의 당첨번호를 예측하는 프로그램 로직이다.) 2. 매주 당첨번호 업데이트: 가장 최근의 당첨번호를 업데이트 하는 것은 스케줄러를 등록하여, 매주 토요일 밤 자정에 업데이트하도록 하였다.# Project_folder/app/lotto.. 더보기
ArticleComment CURD(fastAPI+Javascript+Jinja) 1. Article에 대한 Comment와 그 Comment에 대한 Reply를 구현하였다. Comment와 Reply는 각각 모델을 만들지 않고, 하나의 ArticleComment를 이용하였고, Reply가 달린 Comment의 ID를 Reply에 paired_comment_id로 기입하여 ORM을 형성하게 하였다.2. 게시글에 질문이나 댓글, 질문이나 댓글에 답글(대댓글)을 달 때, quills 에디터의 최소 설정(Minimal settings)을 적용하였고, 자바스크립트로 quills에디터를 붙였다가 띠었다가 하는 과정(동시에 두개의 에디터카 열려있지 않도록)이 정확하게 구현되도록 하였다.3. vote(좋아요) 기능 구현: model로 구현하지 않고, many-to-many 테이블만 만들어 간단하게.. 더보기
Article CURD(fastAPI+Javascript+Jinja) 현재 해놓은 것들 1. User 가입관련인증코드로 회원가입인증코드로 비번분실시 비밀번호 재설정로그인 후 인증코드로 이메일 변경로그인 후 닉네임(username)변경로그인 후 프로필 이미지 변경로그인 후 비밀번호 변경회원탈퇴2. 자바스크립트로 fastAPI POST/PATCH/DELETE 공통함수 만들어 모듈화하고, User CURD에 적용하기위의 회원CURD 관련 된 것들을 바닐라 자바스크립트로 모두 만들기3. 사용자(User) 관련 자바스크립트 모듈화 하기custom/accounts/ authCodeFastAPI.jsauthCodeRequired.jslogin.jslogout.jsupdate.jsupdateFastAPI.jswithdraw.jsmain.jsfastapiClient.js4. 게시글(Art.. 더보기
User CURD(fastAPI+Javascript+Jinja) # Project_folder/main.pyfrom app.core.inits import initialize_appapp = initialize_app() # Project_folder/app/apis/accounts.pyimport osimport uuidfrom typing import Optionalfrom fastapi import APIRouter, status, Depends, Response, Request, HTTPException, Form, UploadFile, Filefrom fastapi.encoders import jsonable_encoderfrom fastapi.responses import JSONResponsefrom fastapi_mail import MessageSch.. 더보기
FastAPI + Jinja Template (DB, Redis Setting) # Project_folder/app/core/inits.py updatefrom contextlib import asynccontextmanagerimport redisfrom fastapi import FastAPIfrom fastapi.staticfiles import StaticFilesfrom fastapi.middleware.cors import CORSMiddlewarefrom fastapi_csrf_jinja.middleware import FastAPICSRFJinjaMiddlewarefrom app.core.settings import STATIC_DIR, MEDIA_DIR, CONFIG, templatesfrom app.core.database import ASYNC_ENGINEfro.. 더보기
FastAPI + Jinja Templates 기반 APP개발 시작 # Project_folder/main.pyfrom app.core.inits import initialize_appapp = initialize_app() # Project_folder/app/core/inits.pyfrom fastapi import FastAPIfrom fastapi.staticfiles import StaticFilesfrom fastapi.middleware.cors import CORSMiddlewarefrom fastapi_csrf_jinja.middleware import FastAPICSRFJinjaMiddlewarefrom app.core.settings import STATIC_DIR, MEDIA_DIR, CONFIGfrom app.views import indexde.. 더보기
alembic.ini파일과 migrations폴더를 삭제해도 되는가? 아니요, alembic.ini 파일과 migrations 폴더를 삭제해서는 안 됩니다. 이 파일들과 폴더는 Alembic을 사용한 데이터베이스 스키마 버전 관리의 핵심 구성 요소입니다. 삭제하면 안 되는 주된 이유는 다음과 같습니다.스키마 변경 이력 관리: migrations 폴더(또는 사용자가 지정한 이름의 마이그레이션 환경 폴더) 안의 versions 폴더에는 데이터베이스 스키마의 변경 내역이 파이썬 스크립트 파일 형태로 저장됩니다. 이 스크립트들은 애플리케이션의 모델 변경 사항을 실제 데이터베이스에 적용(upgrade)하거나 이전 상태로 되돌리는(downgrade) 데 사용됩니다.환경 간 일관성 유지: 개발, 스테이징, 프로덕션 등 여러 환경에서 데이터베이스 스키마의 일관성을 유지하기 위해서는 이 .. 더보기