[Django]

[Django] Django 시작하기전 ... 다양한 백엔드 프레임워크 정리

dyk98 2024. 12. 27. 19:48

어플이나 웹에서 기능들은 어떻게 처리할까?

요즘 어떠한 서비스를 만들거나 구축할때 물론 어떤 기능들과 어떤 서비스들에 대한 생각과 아이디어가 있음에 구체화시키는 것에 재미를 느꼈다. 그리고 그 서비스를 구축 및 만들때 필요에 의해 API 라는 걸 구축해야하는데, 전에 Springboot 를 사용해 본적이 있지만 이번엔 python이라는 언어로 할수 있는 Django 프래임워크를 사용해 API 를 구축해보려고 한다. 그전에! 일단 이 백엔드 프레임 워크에 대해 오늘은 공부할까 한다.

우선 JS, python, Java나 kotlin 을 사용할때, 생각나는 프래임워크들을 정리해보도록 하겠다.

Backend를 Python 으로 할경우

우선 Python으로 API 나 백엔드를 구축시, 대표적으로 3가지가 있다.

  • Flask
  • FastAPI
  • Django

Flask

장점:

  • 경량 프레임워크: 최소한의 구성으로 시작 가능, 필요한 기능만 추가하여 확장 가능.
  • 유연성: 제한 없이 다양한 방식으로 애플리케이션을 설계할 수 있음.
  • 커뮤니티: 배우기 쉽고, Python 생태계와 잘 통합됨.
  • 빠른 프로토타이핑: 단순한 웹 애플리케이션이나 API를 빠르게 구축할 수 있음.

단점:

  • 확장성 부족: 큰 규모의 프로젝트에는 부적합. 많은 기능을 수작업으로 추가해야 함.

  • 기본 제공 기능 부족: 인증, ORM, 관리 패널 등 많은 기능이 기본적으로 포함되어 있지 않음.

  • Flask 정말로 간단한 데모나 프로토타입 정도? 정말 간단한 기술을 적용시 하는게 적합한거 같음.

응용 사례:

  • 소규모 웹 애플리케이션
  • RESTful API 서버
  • 프로토타입 개발

FastAPI

장점:

  • 빠른 성능: Starlette와 Pydantic 기반으로 비동기 API 처리 속도가 빠름.
  • 자동 문서화: OpenAPI 및 Swagger UI로 API 문서를 자동 생성.
  • 타입 힌트 지원: Python의 타입 힌트를 사용하여 코드 품질과 생산성 향상.
  • 비동기 지원: 비동기 코드를 쉽게 작성 가능.

단점:

  • 학습 곡선: 타입 힌트를 잘 활용하려면 Python 고급 지식이 필요.
  • 제한된 대규모 프로젝트 경험: Django나 SpringBoot에 비해 대규모 프로젝트 적용 사례가 적음.

응용 사례:

  • 데이터 과학용 API 서버
  • 고성능 RESTful 및 GraphQL API
  • 머신러닝 모델 배포
  • FastAPI 는 아직 만들어진지 그렇게 되지 않았나? 실제 사례가 적다는 면에서 디메트리는 있지만 리서치용으로 많이 사용될듯? 그리고 비동기 처리 속도가 빠르다는거에서 좋은듯?

Django

장점:

  • 배터리 포함 철학: 인증, ORM, 관리자 인터페이스 등 많은 기능이 기본 포함.
  • 커뮤니티: 풍부한 문서와 확장 가능한 플러그인 생태계.
  • 보안: CSRF, SQL Injection 방지 등 기본 보안 기능 제공.
  • 대규모 프로젝트 지원: 복잡한 애플리케이션 개발에 적합.

단점:

  • 무거움: 단순한 애플리케이션에 비해 오버헤드가 클 수 있음.
  • 유연성 부족: 프레임워크의 규칙과 구조를 따라야 함.
  • 비동기 처리 한계: FastAPI만큼 비동기 작업에 최적화되지 않음.

응용 사례:

  • 전자상거래 플랫폼

  • 소셜 네트워크

  • 콘텐츠 관리 시스템(CMS)

  • *실제 서비스를 구축할때 많이 사용되기도 하기도 하고 좀 복잡한거 제외 잘만 커스터마이즈하면 괜찮은듯? 그리고 보안성 좋아서 굿 *

그리고 일단 Python기반의 프레임워크는 Maven 이나 Grandle 저럼 빌드 파일이 필요 없다는거에 수월한것 같음. (물론 프로젝트 규모에 따라 다른 작업이 필요하다고 듣긴함)

Backend를 Java 로 할경우

Java로 API 나 백엔드를 사용되는 SpringBoot

장점:

  • 엔터프라이즈 지원: 대규모 프로젝트와 복잡한 비즈니스 로직에 적합.
  • 강력한 에코시스템: Spring Framework와의 완벽한 통합.
  • 보안: OAuth, JWT, ACL 등 다양한 보안 옵션 지원.
  • 확장성: 마이크로서비스 및 클라우드 환경에서 확장 가능.

단점:

  • 학습 곡선: Java와 Spring 자체의 복잡성으로 인해 배우기가 어려움.
  • 무거움: 초기 설정과 런타임 메모리 사용량이 많음.
  • 비교적 느림: Python/Node.js와 비교하여 속도가 느릴 수 있음.

응용 사례:

  • 금융 및 보험 시스템
  • 대규모 엔터프라이즈 애플리케이션
  • 마이크로서비스 아키텍처

MVC기반의 백엔드시 자주 사용되는걸로 알고 있는데 아마 Java와 비슷한 Kotlin을 이용할때 더 다양한 프레임워크가 있음.
하지만 일단 Java 의 스프링부트 ... 그리고 Maven과 Grandle 이 생각이 남.

Backend를 Javascript 혹은 Typescript 로 할경우

Node.js (JS)

장점:

  • 비동기 처리: 이벤트 기반으로 고성능 비동기 처리 가능.
  • 경량: 단일 스레드로 많은 요청을 처리.
  • JavaScript 기반: 프론트엔드와 같은 언어 사용으로 일관성 제공.
  • 에코시스템: NPM을 통해 풍부한 라이브러리 사용 가능.

단점:

  • 싱글 스레드 한계: CPU 집약적인 작업에 적합하지 않음.
  • 콜백 헬: 비동기 코드가 복잡해질 경우 유지보수가 어려워질 수 있음.
  • 성숙도 부족: 엔터프라이즈 애플리케이션에서는 Java/SpringBoot에 비해 성숙도가 낮음.

응용 사례:

  • 채팅 애플리케이션

  • 실시간 데이터 처리 (예: 실시간 대시보드)

  • RESTful API 서버

  • 유툽에 가장 많이 나와있는 프레임워크 인듯, 하지만 그대로 하면 에러 많이 뜸... 그래서 그때 버전체크나 dependency 체크해서 구현해보며 많이 배웠던 기억이 있었는데 나름 실시간 면에서 괜찮았음.

    Express.js (with typescript 가능)

특징:

  • Node.js 기반 경량 프레임워크: RESTful API 구축을 위해 설계.

장점:

  • 심플하고 직관적: 최소한의 설정으로 빠른 개발 가능.
  • 확장성: 미들웨어를 통해 애플리케이션 기능 확장.
  • 유연성: 필요에 따라 구성 가능.

단점:

  • 구조 없음: 대규모 프로젝트에서는 명확한 구조를 따르기 어려움.
  • 직접적인 설정: 많은 기능을 수동으로 설정해야 함.

주요 사례:

  • 소규모 RESTful API 서버

  • 프로토타이핑 및 MVP 개발

  • 웹 애플리케이션의 백엔드

  • **Express.js 는 은근 많이 사용되는듯, 아무래도 Javascript 와 Typescript를 사용할수 있기 때문인건가? 그래도 소규모 프로젝트나 간단한 API 구축시

    NestJS (약간 Node.js 의 typescript 버전)

특징:

  • Angular에서 영감을 받은 모듈 기반 아키텍처.

  • TypeScript를 기본으로 설계된 Node.js 백엔드 프레임워크.

장점:

  • 완전한 TypeScript 지원: 정적 타입 검사로 안정적이고 유지보수 가능한 코드 작성 가능.
  • 구조화된 설계: 대규모 애플리케이션 개발에 적합.
  • Dependency Injection: 객체 의존성 관리가 용이.
  • 유연한 통합: 다양한 라이브러리 및 데이터베이스와 쉽게 통합.
  • 테스트 용이성: 유닛 테스트와 통합 테스트를 지원하는 강력한 구조.

단점:

  • 학습 곡선: Angular 스타일 설계에 익숙하지 않다면 적응하는 데 시간이 걸림.
  • 초기 설정: Express.js보다 초기 구성 작업이 많음.

주요 사례:

  • 대규모 엔터프라이즈 애플리케이션

  • 마이크로서비스 아키텍처

  • GraphQL 기반 API 서버

  • 대규모프로젝트에 좋다니, 어쩐지 공고에서 은근 Express.js, Node.js 다음으로 많이나오는긴 한듯

오늘은 이렇게 간단히 정리 및 숙지를 했고 이번엔 정말로 Django로 한번 백엔드구축 및 구현 그리고 가능하면 유지보수도 할수 있도록 만들어봐야겠다.
일단 API에 무엇을 넣고 어떤기능이 먼저 필요한지 적어서 CRUD방식으로 생각해봐야겠다.