2025/10/28 miniproject - 1

김기훈·2025년 10월 28일

TIL

목록 보기
44/191

오늘 학습한 내용

  • git 명령어 정리
  • 데이터 베이스 연결 및 설정
  • 전체적으로 다듬기
    • 회원가입 / 로그인은 작동하는데 오류 없고 DB에도 잘 들어감

어려운 내용(추가 학습 필요)

오늘 발생한 문제(발생 했다면)

  • 로그아웃에서 지속적인 문제

오늘의 공부 정리

FastAPI 인증(Authorization) 흐름의 구조 이해

login → JWT 발급 → Authorization 헤더로 전달 → Depends(oauth2_scheme) 
				→ get_current_user → 보호된 API 실행
  • “요청이 들어올 때마다 Depends(oauth2_scheme)를 통해 토큰을 해석한다”
    • 즉,
        1. Authorization: Bearer <token>
        1. FastAPI가 토큰만 추출
        1. get_current_user() 에서 디코딩
        1. DB로 사용자 조회.

JWT의 동작 원리 (FastAPI + jose + passlib)

  • header: 암호화 알고리즘 정보 (HS256)
  • payload: 실제 데이터 (sub, exp, user_id)
  • signature: header + payload + SECRET_KEY 로 해시한 값
    • 즉, 서버는 JWT를 “저장”하지 않고 “검증만” 함
    • 로그아웃을 구현하려면 “서버가 기억해야 하므로” blacklist DB가 필요

Tortoise ORM의 ORM 패턴과 비동기 흐름

await User.get_or_none(username=username)
await User.create(**data)
await User.filter(email=email).update(...)
  • get_or_none() : 존재하지 않으면 None 반환 (try/except 필요 X)
  • filter().update() : SQL UPDATE 직접 수행 (성능 좋음)
  • Prefetch 나 select_related() : 관계 데이터 미리 불러오기 (JOIN)
    • Tortoise는 “비동기 ORM”이기 때문에, await를 잊으면 작동은 하지만 결과가 틀릴 수 있음

PostgreSQL과 ORM의 관계

  • Tortoise ORM은 결국 PostgreSQL 쿼리를 자동 생성하는 도구
개념ORM 표현SQL 표현
SELECTUser.all()SELECT * FROM user;
WHEREUser.filter(username="kihoon")WHERE username='kihoon'
JOINselect_related("profile")JOIN profile ON ...

실제 서비스 기준 인증 확장 포인트

  • JWT + Blacklist 구조는 "학습용"
    • 실무에서는 여러가지 개념이 추가됨
개념역할
Access Token / Refresh Token짧은 만료시간 + 자동 재발급
CSRF브라우저 환경 보호 (JWT 쿠키 보관 시)
OAuth2 Social LoginGoogle, Kakao 등 외부 로그인
Dependency Override테스트 시 가짜 사용자 주입
profile
안녕하세요.

0개의 댓글