1. 세 프레임워크 알아보기
Django
by MDN
1. django 정의 :
"Djano란 보안이 우수하고 유지보수가 편리한 웹사이트를 신속하게 개발하는 하도록 도움을 주는 파이썬 웹 프레임워크입니다. 훌륭한 개발자에 의해 만들어진 이 프레임워크는, 웹 개발을 하는데 많은 도움을 주기 때문에 새롭게 웹 개발을 시작할 필요없이 그저 프레임워크를 활용하여 앱 개발에만 집중할 수 있게되죠. 무료 오픈소스인데다가, 활발한 커뮤니티들이 있고, 좋은 참고자료와 무료 및 유료 지원을 하는 옵션들이 제공됩니다."
2. Django 특징
- 완결성 : 개발자가 하고 싶은 모든걸 할 수 있게 해준다
- 다용도 : 다양한 웹사이트 빌드 가능
- 안전성 : 보안 문제
- 확장성 : 컴포넌트 기반 shared-nothing 아키텍쳐 제공
- 유지보수 용이 : 유지보수, 재사용 쉬움(DRY 법칙), app화
- 포터블 : 파이썬 기반, 다양한 운영체제에서 작동 가능
3. Django 탄생 배경
"장고는 신문 웹사이트를 제작 및 관리하던 어떤 웹 팀에 의해 2003년에서 2005년 사이에 처음으로 개발이 시작되었습니다. 여러 사이트들을 만들면서 웹 팀은 많은 공통 코드와 설계 패턴을 뽑아내어 재사용하였습니다. 이 공통 코드는 일반 웹 개발 프레임워크로 발전했습니다. 그리고 2005년 7월 "장고" 프로젝트로서 오픈소스화 되었죠"
4. Django MVT
5. Django의 장단점
(장점)
- 파이썬 라이브러리 사용 가능
- 기본적인 기능들을 미리 만들어 제공해 쉽고 빠르게 개발
- FullStack 이 가능
(단점)
- 파이썬 기반이다보니 속도가 느리다
- 세세한 조정이 힘들다
- Django ORM만 사용할 수 있다는 점
- Full System 지식이 필요하다는 점
NodeJS
참고링크
참고링크
1. NodeJS 정의 :
" Node.JS 는 웹브라우저에 종속적인 자바스크립트에서 외부에서 실행할 수 있는 Runtime 환경을 Chrome V8 엔진을 제공하여 여러 OS 환경에서 실행할 수 있는 환경을 제공"
즉 웹브라우저에 갇혀있던 JS를 서버 등에서도 돌릴 수 있게 해준 것이라 볼 수 있다.
2. NodeJS 특징 : 휴게소 식당 생각해보기
- 싱글 스레드의 논블러킹 I/O 이벤트 기반 비동기식 방식으로 작동한다.
- 주문은 한 곳에서 받지만(싱글스레드) 호출은 따로 따로 부른다.(비동기방식)
- JS (V8엔진) 런타임이다
- 요청은 한 곳에서 받지만 작업은 실질적으로 멀티스레드로 운영하여 결과를 구현한다
아무리 일이 많아도 스레드가 1개이므로 메모리 사용과 시스템 리소스 사용에는 변화가 없다. -> 대규모 네트워크 프로그램 개발에 적합
but 스레드 하나가 무너지면 프로그램 전체에 문제가 발생할 가능성이 있다.
3. NodeJS의 장단점 + 잘 어울리는 웹 서비스
(장점)
- 자바스크립트를 사용한다는 점
- 비동기식이라 서버 무리가 적다는 점
- npm이 다양한 패키지, 모듈을 제공한다는 점
- C++ 기반 V8엔진이라 확장성이 좋다는 점
(단점)
- 비동기 방식이라 서버단 로직이 복잡해지면 콜백지옥에 빠질 위험 있다는 점
- 단일스레드이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스는 맞지 않다는 점
- 코드가 수행되어야 에러가 있는지 확인이 가능하다는 점.(에러 나면 프로세스 자체에 문제가 발생해버릴 수 있음) -> 모든 케이스에 대한 소스코드 검증이 필요하다는 점.
<그래서 잘 어울리는 서비스?>
- 간단한 로직.
- 대용량(동시에 여러 request를 처리)
- 빠른 응답시간 요구
- 빠른 개발 요구
- 비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)
NestJS
참고링크
참고링크
참고링크
1. NestJS 정의 :
- 노드js의 서버사이드 api를 구축하기 위한 웹프레임워크, 노드익스프레스, 페스티파이와 호환이 가능하다.
- 타입스크립트 기반, 기본적으로 객체지향프로그래밍, 함수형 프로그래밍, 함수 반응형 프로그래밍이 가능하다.
NodeJS의 무엇이 불편해서 나왔는지는 조금 더 고민해볼 것.
2. NestJS 특징 :
- Node 아키텍쳐 보완 : 통일성 있고 구조적인 작업이 가능
- 안정성 : TypeScript 지원, 모듈별 테스트 가능
- 확장성 : 모듈식 아키텍쳐의 특징
- 캡슐화 : 컨트롤러, 서비스 등을 묶어 모듈 파일 내에서 관리(OOP 가능)
3. NestJS 장/단점 :
(장점)
- Express, Fastify와 호환된다는 점
- TypeScript, OOP, FE 등이 지원된다는 점
- 좋은 아키텍쳐와 구조를 가지고 있어 처음부터 시작하지 않아도 된다는 점
(단점)
- 아키텍쳐로 인한 러닝커브
- NodeJS에 비해 strict한 구성(NodeJS의 철학 : 간결함과 실용주의)
2. 비교 :
- 명확히 딱 장단점이 구분이 안 된다. 아무래도 NodeJS는 실제로 사용해본 적이 없고 나머지 웹프레임워크도 많이 사용해 본 경험이 없어서 그런 것 같다.