사용하면서 느낀 장단점

Django의 장점

  • 기본 어드민 페이지 제공
    • 데이터베이스 관리 용이
  • 기본 CRUD를 빠르게 개발할 수 있는 viewset 제공
    • 기본 viewset 상속받고 사용법만 익히면 너무나도 쉽게 CRUD 구현 가능
  • 다양한 파이썬 라이브러리 사용 가능(Pandas, selenium 등)
  • 기본 ORM 제공
  • Django 템플릿을 활용하면 손쉽게 풀스택 개발 가능
    • 초반 학습할 때 FE 지식도 자연스럽게 학습 가능!
  • 러닝커브가 적은 언어 python으로 이루어짐
  • 개발 서버의 자동 감지 및 재시작
    • 코드의 변경을 감지하여 개발서버 자동으로 재부팅해줌
  • 빠른 build 가능
    • Serverless 아키텍처로 구현 시 매우 유리(Spring으로는 꿈도 못 꿀 아키텍쳐...)
  • django 한번 익히면 fast api, flask 등 다른 python framework를 사용하기에 매우 용이

Django의 단점

  • 레이어의 분리X, 코드 재사용성이 떨어진다.
    • service 레이어와 repository layer가 혼재하여 이를 의도적으로 분리하지 않는 이상 코드 재사용이 용이하지 않다.
  • 객체 지향을 학습하기에는 효과적이지 못함
    • python 자체에 interface 없음(abstract class 사용해서 구현해야함)
    • 의존성 주입/상속 같은 개념들을 다루기 쉽지 않음
  • ORM 성능이 다소 떨어짐
    • custom 할 수 있는 영역이 적음
    • 예기치 못한 쿼리가 나갈(N+1) 확률 多
  • 가상환경 키고 끄고.. 귀찮
    • Spring 쓰면 JVM 원툴로 해결가능한데.. python의 단점
  • 배포 시에 웹서버 이외에 wsgi 설치해야함
    • gunicorn을 주로 사용하는데 여기서 오류 발생해서 삽질해본 경험 있음

Spring의 장점

  • 역할과 레이어의 분리가 제대로 이루어짐
    • DI 개념으로 의존 주입 자동화 관리
    • 테스트할 때 mocking하여 사용하기 용이함
  • 객체 지향 프로그래밍에 최적화 되어있음
    • Annotation 기반의 편리한 IoC 및 Dependency Injection
  • 스프링 관련 다양한 오픈소스
    • Security, JPA, Cloud 등 존재스프링의 장점
  • 현재 한국 backend 개발 장악 중
    • 한국 블로그 및 참고 사이트의 딥한 개발 영역들은 모두 spring을 기반으로 제공됨
    • 따라서 백엔드 학습에 매우매우 용이!
  • 내장 톰캣을 바로 배포 시에 사용 가능
    • build한 jar 파일로 바로 배포 가능!

Spring의 단점

  • 초반 러닝커브 존재
    • DI? Bean? 처음 들을 때 뇌절한 경험 有
  • build 시에 오랜 시간 걸림
    • gradle에 dependency를 추가할수록 높아지는 build 시간..
    • serverless 불가 인프라 비용 많이듬

결론

쓰다보니 django 편애하는 사람처럼 보이는데, 각각의 장단점이 뚜렷한 것 같다.
backend 개발 시에 성능, 안정성을 생각한다면 spring을, 해커톤 같은데나 코테에서 빠르게 개발해야 할 때에는 django 및 python 프레임워크들이 압도적으로 유리할 듯하다.

instagram이 아직도 django를 서버로 쓴다는데 성능 이슈 어떻게 해결하는지 궁금.. django 싱글스레드라서 성능이 꽤나 떨어질텐데