2023 Python FastAPI 프로젝트 시작하기
느려서 사라질 줄 알았는데 속도가 중요한게 아니었다. 쉽고 생산성이 뛰어나서 메이저가 돼 버렸다.
프로젝트 시작시 기술선택
- Kotlin-Spring - 사람이 많이 필요할 때
- Python - 프로토타이핑, 쉽고 빠르게 기능구현, 조금 느려도 됨
- Go - 성능좋고 적당히 쉽게 만들고 싶을 때
- Rust - 본인이 햄스터라면
- Clojure - 정신병 걸렸을 때
- RubyOnRails - 쓰지마 병ㅅ니아
WebFramework - FASTAPI
Fastapi: ASGI를 사용해서 Python치고는 빠르다
Django: Meta에서 만든 Theads가 Django로 되어 있다고 한다. 런타임 환경은 cinder라는 cpython3.8의 fork. 서버 비용이 중요한 대규모 서비스인데 왜 그런 선택을….???
cinder를 이용해서 성능개선을 이뤄낼 역량이 되니 다른 회사에서 감히 같은 선택을 하기는 힘들다.
Flask: 빠른속도를 내세웠는데 속도가 쳐지면… 사라질 때… 이제는 FastAPI를 쓴다
ORM - sqlalchemy,tortoiseORM은
옛날 사람들은 SqlAlchemy를 떠올리겠지만… 다른게 많이 생겼다. 2023-07 -> 2024-03
Peewee https://github.com/coleifer/peewee 10.2k -> 10.7k SqlAlchemy https://github.com/sqlalchemy/sqlalchemy 7.5k -> 8.5k Pony https://github.com/ponyorm/pony 3.3k -> 3.5k tortoiseORM https://github.com/tortoise/tortoise-orm ? -> 4.1k
코드만 보면 서로 차별점은 크지 않다. 내부동작도 비슷하지 않을까? async를 위해 태어난 tortoiseORM를 제외하고는…
class Customer(db.Entity):
email = Required(str, unique=True)
password = Required(str)
name = Required(str)
country = Required(str)
address = Required(str)
cart_items = Set("CartItem")
orders = Set("Order")
class Address(Base):
__tablename__ = "address"
id = Column(Integer, primary_key=True)
email_address = Column(String, nullable=False)
user_id = Column(Integer, ForeignKey("user_account.id"), nullable=False)
user = relationship("User", back_populates="addresses")
def __repr__(self):
return f"Address(id={self.id!r}, email_address={self.email_address!r})"
class Tweet(BaseModel):
user = ForeignKeyField(User, backref='tweets')
message = TextField()
created_date = DateTimeField(default=datetime.datetime.now)
is_published = BooleanField(default=True)
지원기능
- DB를 리버싱해서 코드 생성 - prisma에서되는 그거… peewee, tortoiseorm, sqlalchemy(https://pypi.org/project/sqlacodegen/)
- 마이그레이션 기능
실행 - uvicorn(ASGI)
https://fastapi.tiangolo.com/deployment/docker/
docker에서 unicorn으로 실행
버전관리 - Poetry
레거시
- 기본 패키지 관리툴: pip install -r requirements.txt
- 가상환경: conda, pipenv, venv
poetry는 다른 언어 수준만큼 패키지 관리 수준이 올라왔다.
UI
FastUI https://github.com/pydantic/FastUI https://github.com/vega/vega
Lint, Format - ruff
pylint, flake8, bandit
https://github.com/astral-sh/ruff
~
파이썬은 항상 뭔가 좀 모자랐는데 쓰는 사람이 많으니 계속 발전하는 것 같다. 언어 자체 성능 빼고는 탑티어인듯 ChatGPT가 가장 잘 알려주는 언어라는 장점도
사용자가 많아져서 구린문법 자체가 개선될 여지는 사라진 듯?