2023 Python 프로젝트 시작하기

1 minute read

서버개발 시장에서 사라질 줄 알았던 언어… 파이썬…
어차피 서버는 켜 놓는거고 접속자는 얼마 안되니
성능은 개나줘버려 편한게 장땡인 생산성의 시대를 맞아
그리고 AI시대 tensorflow의 언어로 한자리 차지하게 된 파이썬
ChatGPT가 가장 선호하는 언어 1위

좆같은 문법체계가 마음에 안들기도 하지만… 막상 쓰면 편하기도 한 언어

프로젝트 언어의 선택 기준

  • Kotlin-Spring - 대충 잘 모르겠을 때

  • Python - 계산이나 외부API호출이 많고 API호출이 많지 않을 때

  • Go - 별 기능 없고 API호출 많을 때

  • Rust - 본인이 햄스터라면

  • Clojure - 정신병 걸렸을 때

  • RubyOnRails - 쓰지마 병ㅅ니아

WebFramework - FASTAPI

Fastapi: 차세대 빠른속도 API
Django: Meta에서 만든 Theads가 Django로 되어 있다고 한다. 런타임 환경은 cinder라는 cpython3.8의 fork. 서버 비용이 중요한 대규모 서비스인데 왜 그런 선택을….???
cinder를 이용해서 성능개선을 이뤄낼 역량이 되니 다른 회사에서 감히 같은 선택을 하기는 힘들다.

Flask: 빠른속도를 내세웠는데 속도가 쳐지면… 사라질 때… 이제는 FastAPI를 쓴다

ORM - peewee

옛날 사람들은 SqlAlchemy를 떠올리겠지만…
https://github.com/coleifer/peewee 의 Stargazers 10.2k
SqlAlchemy는 7.5k
ponyorm/pyny 3.3k

코드만 보면 뭐가 특별히 좋아 보이진 않는다. 대표들이 데이나화이트랑 같이 만나서 한판뜨고 인터넷 생중계 한 다음에 이긴쪽으로 합쳐버리면 좋을 것 같다.

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)
  • prisma처럼 reverse로 디비 스키마를 가지고오는 기능
    http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#pwiz

  • activerecord, flyway처럼 쿼리로 하는 것 보다 migration_api가 지원되서 좋다.
    스크립트와 함께 작성하면 좋으니.. 마이그레이션이 단순히 디비 스키마만 변경하면 되는게 아니라서
    http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#schema-migrations
    https://github.com/klen/peewee_migrate
    ->
    1. 백업 후 마이그레이션
    2. 스냅샷 백업 후 백업 후 복원

실행 - unicorn

https://fastapi.tiangolo.com/deployment/docker/

docker에서 unicorn으로 실행

버전관리 - Poetry

파이썬에서 버전관리 툴로 거쳐간것들이 꽤 된다.

기본 패키지 관리툴: pip install -r requirements.txt
가상환경: conda, pipenv, venv
npm따라한거: poetry

생각 해 보니 이것들 특성이 제각각이라 분류를 하기 애매하다.
poetry에 와서야 노드 npm처럼 패키지가 관리된다. .lock파일도 있고

Lint - pylint

pylint, flake8, bandit, bandit

~

쓰는 사람이 많으니 계속 발전하는 것 같다.

대신 문법 자체가 바뀔 여지는 더 줄었다.

ChatGPT가 가장 잘 알려주는 언어라는 장점도