Web 개발 용도별 기술선택

간단하게 만들려면 js, python이 좋다??

로그인, 디비 정도만 딱 붙이고 추가기능이 전혀 없을 경우….

보안이나 벨리데이션 신경쓰지 않고 프로토타이핑을 하는 경우에 한해서는

js, py가 괜찮은 선택이다

완성된 프레임워크 Spring, RoR

조금 제대로된 뭔가를 만들려면 이런걸 쓸 수 밖에 없다.

python으로 뭐 하려면 멀티스레드 지원 때문에 엄청 불편하다

모든걸 편법으로 처리해야 하는데 Queue, multiprocess, Celery 등등.. 이것저것 하다보면

전혀 간단하지가 않다

메시지 기반 Akka 프레임워크

게시판 종류의 서비스 말고 좀 복잡한 서비스 만들 때 … 필요하다.
거래소, 쇼핑몰 등 실시간, 비동기성이 좀 필요한 경우

Storm, Flink, Kafka, Kafka Streams 정도는 써 봤는데

Flink, Storm은 지들이 알아서 분산형 데몬을 관리 해 줘야 할 것 같은데… 그런부분에서 상당히 기능이 부족하다. 디버깅도 힘들고…유닛테스트도 힘들다. 분산형 키값공유 aggregate가 될 줄 알았는데…. 안된다. kafka와 효율면에서 뛰어나지 않다. 별 수 없겟지.. scale out을 할 때 kafka보다 더 이상 효율적이기는 힘들 것 같기는 하다.

이런저런 이유로 복잡도를 털어내고 사용하려면
kafka streams를 docker 환경에서 배포하는게 더 괜찮은데…
메시지 처리나 시리얼라이저 등등 여러부분을 직접 관리 해 줘야하는게 문제다.
그럼에도 불구하고… 나쁘진 않다.
여러 언어 지원 안되는게 조금 약점..이라고 할 수도 있지만 잡언어 안쓰면 되지

elixir도 akka처럼 액터기반 프레임웤인데 언어가 생소하니 접근성이 떨어지고 만들어놔도 인력 구하기도 힘든 문제가…

Akka로 이런 부족함을 채울 수 있을지 모르겠다

-테스트 더 해서 추가-

Proceee Manager – python, node, ruby …

자바계열에서는 많이 쓸 일이 없는데.. 스레드로 해결하면 되니까

싱글스레드.스크립트 언어에서는 필수적이다

종류

  • PM2
  • Unicorn
  • Gunicorn
  • Uvicorn(ASGI)
  • uWSGI
  • Foreman
  • Supervisord
  • forever
  • honcho

PM2

node.js
ecosystem.config.js 파일로 설정 관리

사용편리 프로세스 관리 편리 백그라운드 포어그라운드 가능

Foreman

ruby
Procfile 파일로 설정관리

heroku, dokku 등등과 설정파일을 함께 사용

Gunicorn

python
ini 파일로 설정관리

설정파일 안쓰는편… docker에서 foreground로 돌릴 때 좀비가 되는 경우가 있음 주의


나머는 모르겠다. 장단점

SPA:SinglePageApplication과 SSR:ServerSideRendering

SSR을 하면 SPA가 필요없음

봇이 들어왔을 때 구분해서 SSR을 쏴주거나 한다면 모르겠는데
그렇게 되면 봇이 보는페이지랑 사용자가 보는 페이지가 달라질 가능성도 있겠고
복잡도 증가로 성능문제도 있겠고

SPA는

트위터, 페이스북처럼 완전개인화된 1회성 페이지에만 사용

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