Python Flask 관련기술

파이썬 전반적인 부분과는 별개로 Flask 사용할 때 필요한 부분들

파이썬으로 복잡한 API 는 만들지 말자. 금지기술

역겨운 부분

app.py에는 db(Flask-Sqlalchemy), flask_app(Flask), jwt(Flask-JWT)
server.py에서 app.py를 본다. server.py는 models.module을 본다. server.py에는 jwt custom이 들어간다.
routes.module에서 app.py를 본다
models.module에서 app.py를 본다

jwt custom decorator는 어디다 넣어야되나
파이썬은 규모있는 API를 만든건 처음이긴한데
파이썬은 그냥 한개파일에 쑤셔넣을 정도 사이즈로만 사용해야 하는거 아닐까

로그인

  • Flask-JWT
    업데이트 안됨. extended와 pyjwt 의존성 버전충돌
    개인적으로는 아래것들도 안쓰고 코드를 퍼다가 프로젝트에 넣고 사용함
  • Flask-JWT-Extended
  • Flask-JWT-Simple
  • flask-bcrypt
  • Flask-Login
  • Flask-User
  • Flask-Security

API

  • Flask-CORS
  • Flask-Restful
  • Flask-Restplus
  • Flask-RESTX
    위에 두는 폐기.. 해야하겠지만 의존성 문제가 있으려나

Validation

  • cerberus
  • Flask-Validator

Doc

Test

  • unittest
  • pytest

StarterKit

  • https://github.com/lingthio/Flask-User-starter-app.git

Independent Package manager – for all Linux distributions

기술적인 특성을 다 파악하지는 못했다
돌아가는걸 봤을 때 도커처럼 컨테이너 기술을 사용한 것으로 추정

Flatpak(star 2.5k)

개인적으로 가장 좋은데
자동설치는 잘 지원이 되지 않는다

https://www.flatpak.org

자동설치는 잘 안되는데 수동설치 후에 desktop 파일을 수동으로 만들어 주면 된다.

Snapd(star 1.4k)

https://github.com/snapcore/snapd

우분투에서 패키지 관리자를 사용하면 이걸로 설치 해 버린다
vscode의 경우엔 컨테이너 권한 문제 때문에 파일조회시 문제가 발생하거나
한글입력이 잘 안되는 문제가 발생한다

설명생략

Appimage(star 6.1k)

https://appimage.org

https://github.com/AppImage/AppImageKit

https://github.com/AppImageCrafters/appimage-manager

맥과 비슷한 형태로 만들어놓은 툴
사용률이 가장 낮은것으로 알고 있는데 star는 1위??

Ref

  • https://linuxhint.com/snap_vs_flatpak_vs_appimage/
  • https://fossbytes.com/what-is-flatpak-how-to-install-flatpak-apps-ubuntu-linux/
  • https://ostechnix.com/linux-package-managers-compared-appimage-vs-snap-vs-flatpak/

인증(로긔인)서비스

프로토콜

  • OAuth
  • SAML
  • CAS
  • LDAP
  • Kerberos

ddd

  • AmazonCognito
  • CAS https://github.com/apereo/cas
  • simplePHPSAML
  • Shibboleth
  • WSO2 identity server
  • OpenAM https://github.com/OpenIdentityPlatform/OpenAM

참고

  • https://en.wikipedia.org/wiki/Single_sign-on
  • SAML : https://bcho.tistory.com/755
  • https://www.baeldung.com/spring-security-cas-sso

Deno 서버기술

Deno

node의 창시자가 node가 쓰레기(좋게말하면 장난감)이라는 것을 알리기 위해 native TypeScript로 돌아가는 언어를 만들었다.

  • https://github.com/denoland/deno

웹프레임웤

  • https://github.com/oakserver/oak
  • https://github.com/keroxp/servest
  • https://github.com/drashland/deno-drash
  • https://github.com/zhmushan/abc
  • https://github.com/sholladay/pogo

참고

  • https://dev.to/craigmorten/what-is-the-best-deno-web-framework-2k69

파이썬 서버기술

파이썬으로 제대로된 서버개발을 한 적은 없어서 몇 가지 조사하다가 발견한것들

WebFramework

  • Django
  • Flask
  • Bottle https://bottlepy.org/docs/dev/
  • Pylons
  • Pyramit https://trypyramid.com/
  • Falcon
  • Eve https://github.com/pyeve/eve
  • CherryPy
  • FastAPI https://github.com/tiangolo/fastapi
    https://towardsdatascience.com/why-we-switched-from-flask-to-fastapi-for-production-machine-learning-765aab9b3679
  • https://github.com/juancarlospaco/faster-than-requests

엄청많다

ORM

  • SqlAlchemy
  • https://github.com/python-gino/gino
  • PonyORM
    https://ponyorm.org/
  • DjangoORM

SQL

  • PyPika
    https://pypika.readthedocs.io/en/latest/
  • https://github.com/tmuzzin/PythonSQLGenerator
  • https://github.com/hhyo/mybatis-mapper2sql
  • PyDAL
    https://github.com/web2py/pydal

비동기 기술

  • celery
  • faust
  • async
  • PyKafka
    https://pykafka.readthedocs.io/en/latest/
  • kafka-python
    https://github.com/dpkp/kafka-python
  • Winton Kafka Streams
    https://github.com/wintoncode/winton-kafka-streams

개발환경

  • anaconda
  • miniconda
  • virtualenv
    https://virtualenv.pypa.io/en/latest/
  • virtualenv wrapper
    https://virtualenvwrapper.readthedocs.io/en/latest/
  • pew
    https://github.com/berdario/pew
  • tox
    https://tox.readthedocs.io/en/latest/
  • nox
    https://nox.thea.codes/en/stable/
  • pipenv
    https://pipenv.pypa.io/en/latest/advanced/
    package.json처럼 실행환경을 지정할 수 있게 하는게 낫지 않을까? 커스텀 환경을 사용하려면 sh를 별도로 만드는게 나을 것 같다.
  • poetry
    https://python-poetry.org/docs/

실행환경

  • Gunicorn
  • uWSGI
  • Uvicorn(ASGI)
    https://www.uvicorn.org
  • supervisord
    http://supervisord.org/
  • honcho
    https://github.com/nickstenning/honcho
  • forever
  • pm2
  • unicorn

배포환경

  • zappa – aws lambda (반푼이)
  • serverless – aws lambda
  • https://github.com/GoogleCloudPlatform/functions-framework-python
  • https://github.com/tiangolo/uwsgi-nginx-flask-docker
  • https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker

기타 참고

  • https://dev.to/sm0ke/flask-dashboard-simple-open-source-starters-4noc

프로젝트 용어사전

프로젝트 시작할 때 하는 일

  1. 프로젝트의 목적과 목표 정의
  2. 혼용되서 사용하는 용어 통일
  3. 도메인 모델 설계

이 중에서 1번도 잘 안되는 경우가 많은게 문제인데…
그래서 2번은 엄두도 못 내는…

그래도 최소한 1,2번이 진행되야 제대로 된
완성도 있는 디비설계가 되서
프로젝트가 원활하게 진행된다

기존 프로젝트에 쓰던걸 그대로 가져와서 (은행권이나 공공기관 프로젝트…등등) 들이미는 경우도 많은데.. .
프로젝트마다 특성이 달라서 같은 용어도 다르게 불리는 경우가 많아 그냥 적용하기는 힘들다.

사례를 쓰고싶은데 여백이 부족하다.. 어쨌든 많다

실행방법

나주에

REF