기술 스택 |
사용 언어 |
특징 |
프로젝트에 적용 장점 |
프로젝트에 적용 단점 |
총평 |
장고(Django) |
Python3 |
- 대표적인 파이썬 웹 프레임워크 |
|
|
|
- 데이터 베이스 쉽게 연동 가능
(+ models.py 에 디비 테이블을 클래스로 작성해서 가능)
- 강력한 라이브러리가 많아서, 로그인, 회원가입, 인증, data parsing 등 간단히 사용 가능
- MTV 패턴 사용 → 더 알아보기
- 하드웨어에 접근한다면, 그리고 data Science나 이미지 압축과 같은걸 한다면 장고
- Django ORM 만 사용 가능 | - 이미 익숙한 python
- 사용 가능한 기능들이 많아서 개발 시간이 크게 단축 | - 이미 만들어진 기능이 많아서 커스텀하기 어렵다.
- 언어 특성상 실행했을때 드러나는 오류가 많음
- python은 비동기 언어가 아니기 때문에 실시간 처리가 어려움
- highly based on Django ORM | - CRUD 기반 서비스에 적합하고, 간단한 로그인 시스템, 디비 연결이 간편함.
그런데 저희 프로젝트에서는 실시간 연동에 대한 문제가 많아서, 장고는 사용하기 어렵지 않을까 생각함. |
| Node.js
서버사이드 실행환경임
not 프레임워크. | JavaScript | - 유저들이 메세지 전송, 실시간 처리 같은 작업을 많이한다면 node.js
- 하드웨어에 접근 불가
- 비동기 이벤트 드리븐
- 싱글쓰레드 방식이지만, 이벤트루프모델, 논-블로킹 I/O를 사용해서 뛰어난 확장성을 가지고 있음 → 고도의 동시성지원, 일반적인 스레드 기반 구현 복잡성을 피할 수 있음.
- 하지만 CPU 집중적인 작업은 이벤트 루프를 차단하고 처리를 지연 시킬 수 있다. → 이런 경우 작업을 다른 스레드나 프로세스 또는 다른 기술로 오프로드 하는 것이 필요 할 수 있음.
- 자유도가 너무 높음, 스스로 구조를 짜야해 | - 다수의 유저의 I/O 작업을 처리하기에는 적합하다고 생각함.
| - 하지만 만약 알고리즘 채점 서버를 따로 구현해서, 연산에 대한 cpu 사용이 많을 때는 동시성에 강항 이점이 없어질 수 있음 → 해결하려는 방법이 필요 할 수 있다.
- 언어 특성상 실행했을때 드러나는 오류가 많음
- 비동기 방식이라 서버단에 로직이 복잡해지면 콜백지옥에 빠질 수 있음.
- js 를 배워야함 | - 대용량, 비동기 방식에 어울리는 서비스이기 때문에, 해당 프로젝트에서 사용하기에 적합함. 더불어 무거운 연산이 필요할 때는 c++ 기반 v8 엔진이라 확장성이 좋아서 해결 할 수 있는 방법을 강구 할 수 있을듯.
|
| NestJS | TypeScript | - node.js 기반의 웹 프레임워크
- TypeScript 기반 → 정적 타입 검사, 클래스 기반 객체지향 프로그래밍, 인터페이스 등 현대적인 개발 패턴과 안정성을 얻을 수 있음
- 코드의 재사용성과 테스트 용이성이 높아짐
- 테스팅 툴이 이미 존재
- express, fustily 사용 가능
- 다양한 플러그인 지원
| - @nestjs/websockets 웹소켓 지원 모듈이 제공됨
( room 개념 )
- 높은 수준의 구조화, 모듈화, 타입 안정성 ( 아마 타입스크립트의 | - typescript 도 배워야 함
- 초기 설정이 어렵다 | - |
| ExpressJS | JavaScript | - 타입스크립트 기반을 정식지원하지 않는다.
- 미니멀 API
- 유연성이 좋아서, 애플리케이션 구조를 자신의 방식대로 구성 가능. | - 미니멀해서 nestJS보다 배우기는 쉬움
- 웹소켓 io 같은 라이브러리 사용해서 구현 가능함.
- 작은 프로젝트에서 활용하기 좋음. | - 확장성을 고려하면 규모있는 프로젝트에서는 사용하기 어려움. 왜냐하면 자유도가 높고, nestjs보다 지원하는 기능들이 적음. | |
| Fastify | | 애초에 자료가 많지 않아서 고려하지 않도록. | | | |
| | | | | | |
TypeScript 와 JavaScript

프로젝트를 진행함에 있어서, 빠른 코딩이 분명 중요하긴하다. 하지만 우리는 숙련자가 아니기 때문에 분명 많은 에러를 발생시킬거고, 그럴경우 디버그하는 과정들이 생길텐데, 그럴때, javascript를 사용하면 디버깅에 많은 시간을 더 투자 할 수도 있을 것 같다는 생각을 한다.
더불어 내가 어떠한 타입을 쓰는지 지정하면서 코딩을 하는게, 비숙련자에게는 더 도움 되는 방향이라고 생각한다.
SQL과 NOSQL
SQL :
relational
테이블 정규화해야함
정확도가 중요하다면 SQL
mysql, postgreSQL, SQLite ..
NOSQL : not only sql
-
document DB - mongoDB
collection 안에 도큐먼트 만들고 json 형태로 저장.
입출력이 편해! 대부분 분산처리가 좋음(게임같은데)
-
key value DB -
- cassandraDB : 진짜 빠름, 애플, 넷플릭스,인스타그램, 우버..또는 검색엔진!일때
- dynaminDB : 서버리스, 아마존이 만듬,
아무래도 키벨류 형식이다보니까, 가져다쓰는게 빠르기 때문에, 애초에 저장하기 전에 미리 어떻게 할건지 고민해야됨.
-
graphDB
아키텍처 설계 논의 사항
-
애플리케이션 확장에 대한 고민해보기, 수평확장 VS 수직확장
-
인프라와 배포 전략 :
개발서버 분리 방법, 운영서버 분리방법 → 도커 사용 할지 안할지 고민
개발 서버 : 단순히 프론트 백엔드만 나누는게 맞을지? 쉡서
-
시스템 보안 보장 관련하여 고민 - 회원정보 관리나, 데이터 암호화, 비밀번호 관리 등?
-
프론트엔드와 벡엔드 연결 방법에 대한 고민