Chapter 4-3 MySQL로 Meeting 생성하기 - FastAPI & Tortoise ORM
·
Fastapi
📌 MySQL로 Meeting 생성하기 - FastAPI & Tortoise ORM1. Docker로 MySQL 8 설치docker run --name mydb -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 mysql:8기본 포트 3306 사용root 비밀번호: 1234 설정lsof -i:3306 으로 포트 점유 여부 확인 가능2. PyCharm에서 DB 연결 테스트SELECT VERSION();버전이 8.x이면 성공적으로 연결된 것3. 패키지 설치 및 환경 설정poetry add "tortoise-orm[asyncmy]==0.23.0"poetry add cryptography==44.0.0poetry add aerich==0.8.1 tomlkit==0.13.2poetr..
Chapter 4-1 📌 EdgeDB 소개 및 설치 가이드
·
Fastapi
📌 EdgeDB 소개 및 설치 가이드1. EdgeDB란 무엇인가요?💡 EdgeDB는 PostgreSQL 기반의 차세대 객체지향 데이터베이스입니다.유명한 Python 핵심 컨트리뷰터들이 만든 MagicStack에서 개발ORM 없이도 객체 지향 방식으로 데이터 처리 가능SQL을 대체하는 EdgeQL이라는 강력하고 유연한 쿼리 언어 제공성능 면에서도 뛰어나며, 코드 자동 생성, 공식 유튜브와 오픈 채팅 등 지원 커뮤니티도 활발👉 실무에선 아직 흔하진 않지만, 다양한 데이터베이스 기술을 접하고 싶은 분들에게 강력 추천됩니다.2. EdgeDB CLI 설치 방법💡 버전 명시 설치는 권장되지 않으며, 공식 방법 사용을 권장합니다.공식 설치 페이지: https://www.edgedb.com/install기본 c..
Chapter 3-3 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식
·
Fastapi
✅ 고유하고 짧은 alphanumeric 식별자 만들기 – Base62 접근 방식1. 🎯 목표: 어떤 식별자가 필요한가?우리는 다음과 같은 조건을 만족하는 **식별자(ID)**가 필요합니다:✅ 고유(unique) 해야 한다✅ 충분히 짧아야 한다 (uuid4는 너무 김)✅ alphanumeric 문자로 구성되어야 한다 (URL-safe)❌ 특수문자 포함된 ID는 URL에 적합하지 않음 → 사용 금지2. ❌ uuid4가 부적절한 이유UUID는 고유성을 보장하지만 너무 깁니다 → 550e8400-e29b-41d4-a716-446655440000길고 특수문자가 포함되어 URL에 바로 쓰기 불편합니다3. ✅ 해결책: uuid + Base62 인코딩uuid 값 같은 큰 숫자 → 짧고 고유한 문자열로 변환!4. ?..
Chapter 3-4 Base62 디버깅과 디버깅 스킬의 중요성
·
Fastapi
🧪 Base62 디버깅과 디버깅 스킬의 중요성1. 🎯 Base62 디버깅 개요Base62는 고유한 식별자를 짧고 URL-safe하게 만들기 위한 인코딩 방식입니다.디버깅을 통해 그 내부 동작 원리를 확인하고 이해도를 높일 수 있습니다.2. ⚠️ PyCharm 디버깅 에러 주의AttributeError: '_MainThread' object has no attribute 'isAlive'. Did you mean: 'is_alive'?PyCharm에서 Python 3.13 이상을 사용할 경우 발생 가능해결법: PyCharm 최신 버전으로 업데이트 필요참고: https://youtrack.jetbrains.com/issue/PY-730473. 💡 디버깅의 중요성"개발자는 코딩보다 디버깅이다" — 김포프..
Chapter 3-1 미팅 생성 API 스펙 만들기
·
Fastapi
✅ 미팅 생성 API 스펙 만들기1. 🎯 목표: "미팅 생성" API 스펙 정의 및 더미 응답 제공프론트엔드가 빠르게 연동할 수 있도록 먼저 API 스펙 + 더미 데이터 반환부터 구성합니다.실무에서는 실제 로직 구현보다 먼저 스펙 정의가 중요합니다.2. 🧱 기본 FastAPI 앱 구조 세팅📁 디렉터리 구성app/ __init__.py apis/v1/meeting_router.py dtos/create_meeting_response.py dtos/frozen_config.pyasgi.py📌 app/init.pyfrom fastapi import FastAPIfrom fastapi.responses import ORJSONResponsefrom app.apis.v1.meeting_router ..
Chapter 2-6 Github Action 설정 및 캐싱 가이드
·
Fastapi
⚙️ Github Action 설정 및 캐싱 가이드🚀 Github Action으로 자동 테스트 실행📄 .github/workflows/ci.yml 생성name: CIon: push:jobs: static-analysis: # mypy, black, ruff등 정적 분석 runs-on: ubuntu-22.04 # 실제 프로덕션에서는 모든버전을 고정하는 것이좋다. 예기치못한 장애방지 steps: - name: Check out the codes uses: actions/checkout@v2 - name: Setup python environment id: setup-python uses: actions/setup-python@v2 ..
Chapter 2-5 테스트 스크립트 작성 가이드
·
Fastapi
🧪 테스트 스크립트 작성 가이드🧰 pytest-asyncio 설치 및 설정📦 설치 명령어:poetry add --group=dev pytest-asyncio==0.25.0📄 pyproject.toml 설정:[tool.pytest.ini_options]asyncio_mode = "auto"asyncio_default_fixture_loop_scope = "session"pytest는 기본적으로 async def로 작성된 테스트를 실행하지 않음pytest-asyncio 플러그인을 사용하면 비동기 테스트도 지원 가능지금은 사용하지 않더라도 미리 설정해두는 것이 좋음async/await는 추후 강의에서 별도로 다룰 예정⚙️ test.sh 생성 (리눅스/맥 유저용)📄 test.sh 파일 내용:#!/bin..
Chapter 2-4 자동화 테스트가 필요한 이유
·
Fastapi
🤖 자동화 테스트가 필요한 이유🧱 테스트는 기술 "자산"이다자동화 테스트는 단순한 기능 확인을 넘어서 프로젝트를 지탱하는 기술 자산입니다.💣 기술 부채와의 전쟁기술부채란? 나쁜 의사결정이 쌓여 나중에 큰 문제로 폭발하는 것대규모 프로젝트에서 일부분만 수정해도 전체 시스템에 영향을 줄 수 있음자동화 테스트는 수정에 대한 두려움을 없애는 방패입니다마틴 파울러 (『리팩터링 2판』 中)“테스트 슈트가 없으면 개발자는 자신이 수정한 코드가 제대로 도는지 확인할 방법이 없다.테스트 슈트가 없으면 시스템 이쪽을 수정해도 저쪽이 안전하다는 사실을 검증하지 못한다.”🧪 경험에서 나온 교훈스타트업 근무 당시, 자동화 테스트 없이 수동 테스트로 배포를 진행직원들이 결제를 해보고 직접 환불까지 하며 테스트 → 점점 대..