묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
강의자료 관련 질문
강의자료 받으려 하는데 현대자동차 직원은 수강자 계정인을 어떤 이메일로 받으면 되나요?
-
미해결FastAPI 완벽 가이드
signed cookie 와 jwt 토큰
안녕하십니까 강사님! 자세하게 좋은 정보 알려주심에 항상 감사드립니다!!제 짧은 지식으로 궁금한 점이 생겨 질문드립니다.사용자 인증을 구현할때 jwt토큰을 사용하는 방법도 있는 걸로 압니다. jwt토큰도 마찬가지로 signed cookie처럼 암호화(인코딩)해서 헤더에 같이 보내는걸로 알고 있습니다.두 방식이 비슷하다고 생각하는데 jwt토큰과 signed cookie로 인증하는 차이가 무엇인지 궁금합니다. 짧은 경험상 모든 기술간의 트레이드 오프가 존재했던 거 같은데 jwt토큰과 signed cookie에도 그러한 부분이 있는지 궁금합니다 !항상 감사드립니다~
-
해결됨FastAPI 완벽 가이드
비동기처리와 멀티스레드
안녕하십니까 강사님! 오늘도 감사히 강의를 듣고 있습니다.fastapi는 비동기처리로 효율적으로 처리한다해서 자바쪽은 어떻게 할까 궁금해서 조사만 해봤는데 멀티스레드로 병렬처리로써 효율적으로 처리한다고 알게되었습니다.그러나 궁금한 점이 생겼습니다. fastapi에서 io작업같이 오래 걸리는 부분에 비동기 처리를 하는건 이해했는데 왜 단순 서비스로직 같은 경우에서는 비동기처리를 사용안하는지 궁금합니다.제 생각에는 단순히 생각해서 모든 처리를 비동기처리 해도 될 거 같은데 왜 그렇게 안하는지 어떠한 부분에서 문제가 발생할 수 있는지 궁금합니다.또한 만약에 비동기처리를 안하고 동기처리로 할때 멀티스레드로 하는지도 궁금합니다.아니면 혹시 서비스 로직같은 단순 cpu연산을 사용할때는 워낙 연산 속도가 빠르니 비동기처리와 동기처리가 속도차이가 없어서 그러한 부분들을 고려하지 않아도 되는지 이런 차이들이 궁금합니다! 항상 좋은 강의 감사드리며 정말 저에겐 소중한 강의입니다!
-
미해결실전! FastAPI 입문
FasAPI Swagger UI에서 단일조회 todo_id 를 사용했는데, 입력값에 1을 넣으니 오류가 뜹니다 ㅠ
현재 GET 단일 조회 API 강의를 듣고있는데, 강의 마지막에 FastAPI로 들어가서 Swagger UI를 사용해 해보는 것에서 입력값에 1을 넣었더니 반환값이 오지 않네요 ㅠ 어떤 것이 문제인지 모르겠습니다 .
-
해결됨FastAPI 완벽 가이드
fastapi의 가능성에 대해 궁금합니다.
안녕하십니까 강사님! fastapi강의를 정말 유익하게 보고 있습니다. 정말 감사드립니다.다름이 아니라 저는 현재 학생으로써 백엔드 개발을 빠르게 이해하고 싶어서 개발 속도가 빠른 fastapi를 선택하여 공부중입니다. fastapi의 기술 스택을 익히면 어느 방향성에서 강점을 보일까요?물론 하고자 하는 목표를 정하고 그에 맞는 기술을 배우는 것이 훨씬 더 좋은 방향이라고 생각하나 수업을 듣던중에 그럼 이렇게 장점을 가진 fastapi기술은 어디에서 사용할까? 단순 백엔드 개발로써는 자바가 많이 보편화 되어있으니 국내에서는 자바가 훨씬 유리할 거 같은데 국내에서는 어떤 방식으로 이 프레임워크를 다룰까? 이런 부분들이 궁금해졌고 이런 부분들을 알아야 조금 더 fastapi의 강점을 생각하면서 공부에 도움이 될 거 같아서 질문드립니다.강사님이 생각하시기에 fastapi는 어떤 분야에서 강점을 보이고 어떤 분야에서 이 프레임워크를 사용해 확장할 지 궁금합니다. 학생의 관점에서 보면 시야를 넓게 보는게 한계가 있어서 도움을 청합니다. 실례가 안된다면 뛰어난 경력을 가지신 강사님께 여쭙고 싶습니다!만약에 바쁘시다면 키워드라도 주시면 제가 직접 자료 조사를 해서 알아가도록 하겠습니다. 다시 한번 좋은 강의를 제공해주심에 감사를 표합니다! 강의 관련 제 생각은 강의를 다 본 후에 강의평에 남기도록 하겠습니다!
-
해결됨FastAPI 완벽 가이드
어디가 필요없는 코드인지 알아내려면....
제가 아래의 사이트를 자체 서버를 만들어 구동을 해보았습니다. 물론 테스트 및 학습용으로....http://112.166.186.238/사용한 것들App서버: FastAPI로 백엔드 api와 간단한 프론트 엔드DB 서버: MySQLRedis 서버Nginx 서버Portainer.io를 이용해, Dockerfile로 이미지 생성하고 4개의 컨테이너를 만들어, 구동시켰습니다. 서버는 제가 쓰던 오래된 개인 PC(아마도 족히 15년가까이된 구닥다리 컴퓨터)에 우분투 22.04.5 LTS를 설치해서 서버 구동을 시켰습니다.제가 전공자는 아니고, 완전히 다른 직업군에 있는 사람이라... 몇년전에 장고, 플라스크로 웹어플리케이션 공부를 한적이 있는데 그때 웹프레임워크만 제외하고 똑같은 방식으로 서버구동을 시켜본 적이 있는데... 이번에 FastAPI로 한번 더 공부하면서 구축해보았습니다.아직, docker-compose.yml로 docker swarm 구축을 해보지는 못했구요... 그런데 여기까지 오면서 궁금해진것이 바로 직전에 질문하신 분처럼 nginx서버 설정을 하다보면, FastAPI코드에서 굳이 없어도 될 부분의 설정부분이 있을 것 같은데.... 그게 어떤것인지 궁금해지더라구요... 예를 들면,정적파일 처리를 nginx에서 처리하는 경우 app.mount()가 필요없을 것 같은데... 답변이 그렇게 되어 있어, 예상했던 데로 였습니다. app.mount()가 설정이 있어도 무방한 것인지 궁금합니다. 또한 저는 정적파일 css. js 파일들은 nginx에서 처리하지 않도록 했는데... 바뀔수가 있을 것 같아서... 여기서 궁금한것: 이렇게 해도 무방한 것인지 궁금합니다. (참고로,저는 static/media폴더 안에 user_images, user_videos폴더를 만들어 user가 업로드하는 파일들을 그 폴더안에 저장하게 로직을 작성했습니다. nginx에서 이 디렉토리를 찾아갈 수 있게 해 놓았고, volume mount를 해서 컨테이너가 삭제되더라도 사용자가 올린 실제 이미지들이 삭제되지 않게 했놨습니다. )MySQL서버와 Redis 서버를 찾아가는 FastAPI코드가 있고, yml파일로 컨테이너를 만드는 코드를 작성할 때, network로 서로를 연결하게 될텐데.... 이때 MySQL서버와 Redis 서버를 찾아가는 FastAPI코드가 없어야만 되는지, 아니면, 있더라도 상관이 없는 것인지... 그것도 궁금합니다.이 두가지 말고도 yml작성시에 들어가는 내용때문에 FastAPI코드에서 굳이 없어도 부분이 있는지 궁금합니다.감사합니다.
-
미해결FastAPI 완벽 가이드
nginx를 사용하고 static 설정을 하는 경우도 app.mount 설정을 해야 하나요?
nginx에 static 설정을 하여 nginx 서빙을 할 수 있게 만들 수 있는 것으로 알고 있습니다.이때 app 서버와 동일한, 동기화된 폴더를 유지해야 하는 것으로 알고 있습니다.이미지도 처리를 하는 경우에는 그렇게 이해하고 있습니다. 이렇게 설정하는 경우에도 app.mount로 static 설정을 해줘야 하는 것인가요? 렌더링 문제가 아니라면, fastapi에서 mount를 유지할 필요가 없을거 같아 질문을 드려봅니다.
-
미해결FastAPI 완벽 가이드
logout 태그 관련 질문
navbar.html에서 로그아웃 버튼을 생성 할 때 기존에 {% if session_user % }... (1){% else %}... (2){% endif %}하고 이 아래 쪽에 다시 if session_user를 해서 로그아웃을 하는 이유가 무엇일까요? 그냥 (1) 위치에 a태그 달아서 로그아웃을 만들면 안될까요?
-
해결됨FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기
github 소스코드
제공되는 github 소스코드는 없는건가요?
-
미해결FastAPI 완벽 가이드
81강 한 건도 못찾았을 경우 질문
강의 잘 듣고 있습니다. 한 가지 의문이 생겨서 질문을 남깁니다.한 건도 못찾은 겅우 HTTPException으로 try문을 벗어나게 되는데 이미 생성된 result(커서?)가 닫히는 부분은 없는 것 같아서요. conn.execute를 해서 커서를 열었으면 닫아줘야 하는 것 아닌가요?
-
미해결FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기
강의자료 링크로 들어가면 페이지를 찾지못한다고 나와요
💡 질문하기 전에 먼저 확인해보세요! 답변을 기다리는 동안, 아래 항목들을 먼저 확인해보시면 문제가 해결될 수도 있어요.강의 내용 다시 보기: 혹시 놓친 부분이 없는지 해당 챕터의 강의를 한 번 더 돌려보셨나요?오타 및 들여쓰기 확인: 파이썬은 특히 들여쓰기에 민감해요. 코드에 오타나 잘못된 들여쓰기는 없는지 꼼꼼히 확인해주세요.에러 메시지 검색: 빨간색 에러 메시지가 떴다면, 메시지 전체를 복사해서 구글에 그대로 붙여넣기 해보세요. 전 세계 개발자들이 비슷한 문제를 겪고 해결책을 공유해두었을 확률이 높습니다.Q&A 게시판 검색: 혹시 다른 분이 먼저 비슷한 질문을 올렸는지 게시판을 한번 살펴보는 것도 좋은 방법이에요.
-
미해결FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기
CRUD관련: async def get_db() 관련
강의에서는 비동기적으로 engine을 만들때, 아래 처럼engine = create_async_engine( DATABASE_URL, echo=True, future=True, # SQLAlchemy 2.0 # encoding="utf-8" )했는데.... poolclass=QueuePool를 사용하여, DB 연결을 풀링하여 재사용하는 것이 도움이 될 듯한데... 강의에서는 언급이 없으셔서, AI에게 물어봤더니..."FastAPI에서 create_async_engine과 함께 QueuePool을 사용하는 것은 비동기 데이터베이스 연결을 효율적으로 관리하기 위함입니다. QueuePool은 데이터베이스 연결을 풀링하여 재사용함으로써, 매번 새로운 연결을 생성하고 종료하는 오버헤드를 줄여줍니다. 특히 FastAPI와 같이 비동기 요청을 처리하는 환경에서는 여러 연결을 동시에 관리해야 하므로, 풀링은 성능 향상에 큰 도움이 됩니다."이렇게 답을 주고...from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy.pool import QueuePool DATABASE_URL = "your_database_url" # 예: postgresql+asyncpg://user:password@host:port/database engine = create_async_engine( DATABASE_URL, poolclass=QueuePool, pool_size=10, # 풀에 유지할 연결 수 max_overflow=20, # 풀 크기가 초과될 때 허용할 추가 연결 수 pool_recycle=3600, # 초 단위로 연결을 재활용할 시간 (초과 시 재연결) echo=True # SQL 실행 로그 출력 (디버깅용) ) # 이후 엔진을 사용하여 데이터베이스 작업 수행예시코드로 이렇게 주던데...실제로, 비동기적으로 engine을 만들때에 AI의 답변처럼 도움이 되나요?저희 강의의 코드는 아래와 같은 흐름을 타고 있던데...from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker, declarative_base from typing import AsyncGenerator from sqlalchemy.orm import configure_mappers configure_mappers() DATABASE_URL = "sqlite+aiosqlite:///./sql_app.db?charset=utf8" engine = create_async_engine( DATABASE_URL, echo=True, future=True, # SQLAlchemy 2.0 # encoding="utf-8" ) from sqlalchemy.ext.asyncio import async_sessionmaker AsyncSessionLocal = async_sessionmaker( engine, class_=AsyncSession, # add expire_on_commit=False, autocommit=False, autoflush=False ) Base = declarative_base() async def get_db() -> AsyncGenerator[AsyncSession, None]: session: AsyncSession = AsyncSessionLocal() print(f"async def get_db(): Session created: {session}") try: yield session except Exception as e: print(f"Session rollback triggered due to exception: {e}") await session.rollback() raise finally: print(f"async def get_db(): Closing session: {session}") await session.close()
-
해결됨FastAPI 완벽 가이드
64강: mysql-connector-python 버전 관련
mysql-connector-python=9.4.0으로 2025.8.17일 현재의 최신 버전을 설치했더니, engine.connect() 부터 적용이 안되던데... 이유가 궁금합니다. 왠만해서는 안될 이유가 없을 것 같은데...희한하게 안되더라구요... 궁금해서 질문 남깁니다. 감사합니다.
-
미해결FastAPI 완벽 가이드
152번 강의에서 질문이있습니다.
router 계층에서 service계층의 get_all_blogs를 직접 호출하지않고 Depends로 넣어주는 이유가 뭔지 궁금합니다.
-
해결됨처음하는 파이썬 백엔드 FastAPI 입문 (FastAPI부터 비동기 SQLAlchemy까지) [풀스택 Part1-2]
16강에 원래 있어야 할 강의 내용이 없고 23강 내용이 그대로 업로드 되어 있습니다.
16강에서 http 메서드에 대한 설명을 이어 나가야 하는데 실행하면 23강의 내용이 똑같이 나옵니다.
-
해결됨FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기
34강 강의 마지막에 나오는 35강 websocket 관련 강의 관련 질문
34강 마지막에 35강 강의는 websocket과 관련된 강의라고 하는데 해당 내용에 대한 강의도 있는 건가요? 아니면 35강 부터 Docket 컨테이너화와 AWS 배포 실습에 관한 강의 인가요?
-
해결됨실전! FastAPI 입문
DB 질문
내용 관련된 질문은 아니지만 궁금해서 여쭤봅니다. 혹시 MSSQL을 사용해도 이후의 내용을 동일하게 진행할 수 있을까요?
-
해결됨FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기
Docker와 AWS 배포 강의 관련
강의 소개에 안내된 "Docker를 이용해 애플리케이션을 컨테이너화하고, AWS 클라우드 환경에 직접 배포하고 운영"에 관한 강의는 언제 올라오나요? 어디엔가 답변에 지난 주말에 올라 올 거라는 내용이 있었던 것 같은데.... 아직 업로드가 되지 않아서 문의 남깁니다.
-
미해결FastAPI 완벽 가이드
import 자동완성
아래와 사진과 같이 import가 되어 있지 않은 경우 에러가 발생하게 됩니다.다른 언어들은 특정 버튼을 눌러서 import가 자동완성 되는 경우가 많은데 fastapi는 안되는 걸까요?
-
해결됨FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기
15강 수정 요청: DOWNLOAD_DIR 확인 구문 부분
아래의 엔드포인트 두개의 함수 부분에서async def download_basic(file_name: str):async def download_custom(file_name: str):if not file_path.startswith(os.path.abspath(DOWNLOAD_DIR)): 이 부부의 file_path를 full_file_path를 아래처럼 할당한 후에if not full_file_path.startswith(os.path.abspath(DOWNLOAD_DIR)): 으로 수정해야 할 듯 합니다.@app.get("/download/basic/{file_name}") async def download_basic(file_name: str): safe_base_filename = os.path.basename(file_name) file_path = os.path.join(DOWNLOAD_DIR, safe_base_filename) full_file_path = os.path.abspath(file_path) . ' ' if not full_file_path.startswith(os.path.abspath(DOWNLOAD_DIR)): # if not file_path.startswith(os.path.abspath(DOWNLOAD_DIR)): @app.get("/download/custom/{file_name}") async def download_custom(file_name: str): safe_base_filename = os.path.basename(file_name) file_path = os.path.join(DOWNLOAD_DIR, safe_base_filename) full_file_path = os.path.abspath(file_path) . ' ' if not full_file_path.startswith(os.path.abspath(DOWNLOAD_DIR)): # if not file_path.startswith(os.path.abspath(DOWNLOAD_DIR)):그렇지 않으면 검증이 되지 않습니다. 아래 참고file_path: ./downloadables/스크린샷_3.pngfull_file_path: D:\Python_FastAPI\Inflearn_Master\File_API\downloadables\스크린샷_3.pngos.path.abspath(DOWNLOAD_DIR): D:\Python_FastAPI\Inflearn_Master\File_API\downloadables