JavaScript기반 web application framework
JAVASCRIPT + V8엔진 + 오픈소스 프레임웍 및 라이브러리
1. Front-end와 Back-end를 같은 개발 언어로 개발하게 된다.
- 서비스 로직을 재활용할 수 있는 범위가 (Front-end + Back-end)로 넓어지는 장점이 있는데,
가끔 다른 프레임웍에서는 누릴 수 없는 굉장한 유용함을 선사할 때가 있다.
2. 단일 쓰레드 모델 + Non-blocking I/O (Event driven)
- 동시요청 처리능력은 제일 좋다고 보여준다.
3. WebSocket이나 socket.io로 실시간 소켓 통신을 쉽게 구현할 수 있다.
4. C++로 필요한 모듈 작성 가능.
단점:
1. 코딩에 제약이 덜하기는 하지만, 소스코드에 개발자의 개성이 너무 녹아들 수 있다는 문제가 있다.
2. NodeJS 로 개발된 소스코드는 확실히 가독성 측면에서 약하다.
3. Event driven 방식이라 서비스 로직을 수행하는 부분에서 예외사항에 대한 처리(try catch)를 확실하게 해야한다는 부담이 있다. 워커쓰레드가 로직 수행 중에 잡지 못한 예외가 발생하여 죽게되면, 해당 요청에 대해 클라이언트는 timeout이 걸릴때까지 기다리는 수밖에 없다.
비동기와 동기 네트워킹 I/O에 대한 성능 차이:
CPU 사용량 차이 거의 없음.
메모리 사용량 차이 심함. (비동기 승)
응답 빨리 해주는 차이 별로 없음.
얼마나 많은 처리를 할 수 있나 - 큰 차이 없음.
메모리를 적극적으로 사용해도 문제가 없다면 그냥 동기를 쓰는게 좋음.
Django
장점:
Python기반 web application framework
PYTHON + MVC 패턴 + 관습 지향 + ORM + 라이브러리
- Nginx(or Apache) + Gunicorn(or uWsgi) + Django + Postgresql(or Mysql)
1. MVC 기반 패턴대로 개발할 수 있도록 이미 구조화
2. ORM 기능 내장
- MySQL, PostgreSQL, Oracle 등 다양한 DBMS를 손쉽게 붙일 수 있다.
3. Viewing 또한 template 엔진을 제공
4. 웹 개발에 필요한 session 관리도 지원.
5. 그 외 추가 기능 또한 plugin 형태로 손쉽게 설치 후 사용 지원.
- restframework : Web API 서버를 개발하기 위한 ToolKit
6. Community도 가장 큼.
7. 디버깅 수월
- 스크립트 언어인 파이썬의 장점에, 프레임웍에서 제공하는 강력한 기능들이 더해져 디버깅이 굉장히 수월하다. 특히 장고의 Debug Toolbar 와 Admin 기능은 굉장히 인상적이다.
단점:
1. 강력한 기능을 제공해 주는 대신, Framework 자체적으로 설계한 개발 패턴에서 크게 벗어날 수 없는 구조.
2. 동시요청 처리능력은 좋지 않다.
- 긴 요청에 대해서는 상당한 약점
Flask
Python기반 web application framework
1. 매우 가볍고 심플한 Framework를 지향
2. 자유도가 아주 높다.
- 원하는 라이브러리와 패키지로 내가 필요한 것만 붙여서 만들어 나갈 수 있다.
ex) Flask에는 DB ORM 구조가 따로 존재하지 않는다.
3. Community 활성화