1 minute read

느려서 사라질 줄 알았는데 속도가 중요한게 아니었다. 쉽고 생산성이 뛰어나서 메이저가 돼 버렸다.

프로젝트 시작시 기술선택

  • 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가 가장 잘 알려주는 언어라는 장점도

사용자가 많아져서 구린문법 자체가 개선될 여지는 사라진 듯?