Django vs Spring, 둘 다 사용해보면서 느낀 점
2023. 11. 17. 16:56
사용하면서 느낀 장단점
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 싱글스레드라서 성능이 꽤나 떨어질텐데