<What is the Django?>
Django는 Flask와 함께 대표적인 python으로 작성된 Web Application Framework이다
둘의 차이점은 Flask가 더 가볍다는 것인데, 이건 여기서 다루려는 내용은 아니고.
웹 애플리케이션 프로젝트를 맡게되어서 Django를 언급하게 됐다
<Why use the Django?>
개발툴을 고를 때 Node.js(Network Application Development S/W Platform)를 사용하려고 했었는데
이전 버전인 Django를 재개발하는 것이었기 때문에, 기한의 압박을 덜기위해 Django를 사용하게 됐다
Django를 며칠 다뤄보니 알게된 것이 있다
예전에 이미 Flask, Django, Spring, Node.js(얘는 플랫폼) 등 여러 프레임워크들의 기본 기능(라우팅, 뷰 등의 구성)들은 살펴보았지만, 이제 생각해보니 제대로 개발해본 경험이 없었다.
웹보다는 네이티브에 더 흥미가 있었기 때문이다
왜 그랬을까?
<Web 개발의 특징>
이제서야 깨달았는데, 나는 코드레벨 성능/구조 최적화에 가장 흥미가 있다
그러나 Web 개발은 그런 점에서 반대에 있다고 생각한다 (그래서 흥미가 안생겼었는데, 자세한 이유는 잘 못 느꼈다)
Web은 특성상, 성능 최적화보다는 다양한 클라이언트에 대한 Compatibility(호환성)에 더 포커싱되어있다
사용상의 속도이슈 이전에, 사용 가능성 자체의 문제이기 때문이다
그래서 jQuery 라이브러리가 나왔다.
HTML/CSS/JS의 IE, Chrome, Firefox 등 다양한 브라우저를 더 편리하게 지원하기 위해서. (그 외에도 충분히 편리한 기능은 많다)
Client-side의 Static page에는 jQuery가 나온 반면,
Server-side의 Dynamic Page, 즉 Web Application은 PHP, JSP, ASP와 같은 Script Language부터 시작되었다 (그전에 있었던 native binary와 CGI는 스킵하자)
이 언어들은 View와 Data Logic이 분리되어있지 않아서 유지보수에 어려움이 있었다
그래서 MVC 패턴과 함께 Spring과 같은 웹 애플리케이션 프레임워크가 등장하게 되었다
(위 내용들은 오피셜이 아니고 모두 필자의 개인적인 생각들이므로 오해 없기를)
웹 앱 프레임워크는 MVC 패턴을 이용하여 Data Logic과 View를 분리함으로써 유지보수 문제를 해결해주었다
이후 다양한 웹 애플리케이션 프레임워크들의 발전과 함께 Angular, React, Vue와 같은 프론트엔드 프레임워크들도 등장했다
웹 앱 프레임워크 -> 추상화를 통해 웹앱을 점점더 쉽개 개발할수 있도록 발전하였고
프론트엔드 프레임워크 -> 이젠 멀티브라우저보다는 수많은 모바일 디바이스들의 호환성에 포커싱하였다
필자가 생각하는 웹 개발의 역사는 이러한데, 핵심은 이것이다
백엔드/프론트엔드 프레임워크들은 추상화를 통해 웹개발을 더 쉽게 만들고 / 성능보다는 클라이언트 호환성에 포커싱되어있다는 것이다
Django는 심지어 SQL을 몰라도 ORM을 통해 Table을 만들고 데이터 SELECT/INSERT/DELETE까지 할수있는 걸 보고 꽤많이 놀랐다
더 나아가서, 이것은 웹앱 아키텍처를 몰라도 웹앱을 개발할수있게 해주었고, 부정적으로 말하면 프레임워크의 의존성이 너무 커졌다
결국 하고싶은 말은 이것이었다. 프레임워크를 공부해봐야, 다른 프레임워크에 적응하는데에는 거의 도움이 안된다 (2020.05 수정)
서비스 개발관점에서는 최고지만 공부 관점에서는 장점이 하나도 없었다. 그래서 흥미가 없었다
(그리고 심각한 추상화로 인해 프레임워크 구조로부터 실제 동작을 이해/파악하기가 어렵다는 점이 매우 끔찍함. (2020.05 수정)
웹앱 아키텍처를 알아도 프레임워크를 새로 공부해야함)
그리고 계속 말해왔듯이 클라이언트 호환성, 이 외에도 잡다하게 신경쓸 부분들이 너무 많았다 (데이터 로직보다는 뷰의 중요성이 더 큰 느낌)
이것도 필자의 흥미를 저해하는 이유 중 하나였다
<이와중에 Node.js>
Node.js는 Framework가 아니라 Platform이라고 wiki에 설명되어있다. 플랫폼이라고 하는것보다는 프로그래밍 언어라고 하는것이 더 와닿을 것이다.
언어도 하나의 플랫폼이기 때문.
처음에는 Async I/O라는 점 때문에 흥미가 생겼지만 중요한 것은 그것이 아니었다
PLATFORM. 이것은 심각하게 추상화되어있지 않다. 웹앱 아키텍처를 이해하고있다면 Node.js에 굉장히 빠르게 적응할수 있다 (2020.05 수정)
그래서 프레임워크는 서비스 개발자에게, Node.js는 프로그래머에게 더 잘맞는다고 생각한다
Node.js는 공부하는 의미가 있다! 그래서 매우 흥미롭다.
게다가 웹 한정이 아니라 네트워크 애플리케이션 개발을 위한 플랫폼이므로, 사용범위가 더 넓다
그래서 다음에는 꼭 Node.js 프로젝트를 해보려고 한다
<Conclusion>
Django를 사용해보면서, 웹앱 프레임워크의 굉장한 추상화와 불편함을 느끼게 되었다
그래서 왜 그동안 웹개발에 흥미가 없었는지, Node.js에는 왜 흥미가 생겼는지 생각하게 되었고
이 외에 Django, ORM의 목적/기능에 대해서도 생각해보게 되었다 (이것은 기회가되면 나중에 작성하기로)
그래서 그런 주저리 생각들을 서술해보았다
(원래는 Django 사용법에 대해서 정리해놓으려했는데 삼천포로 샜다. 이건 다음 포스팅에.
그리고 글쓸 시간여유좀 있었으면 좋겠다)
---
(2020.05 수정)
대략 2년 반전에 쓴 글을 다시 읽어보니, 좁은 시각으로 Django는 너무 부정적으로 Node.js는 너무 긍정적으로 써놓았었습니다 ㅋㅋ
글 읽으시는 분들은 이 점 감안해서 읽어주시고 오해 없으시면 합니다.
Django도 좋은 프레임워크이며, 개발 생산성을 높이는 데에 큰 도움을 줍니다. 추상화가 많이 되어있지만 공부를 해보면 어떻게 동작하는지도 알 수 있습니다.
Node.js에도 (아직 사용해보지는 않았지만) Django와 같이 ORM 등을 제공해주는 웹 프레임워크가 있습니다. Node.js를 사용하신다면 ORM같은 부분보다는 싱글 스레드 기반 비동기 아키텍처를 잘 이해하는 것이 중요할 것입니다
글 읽어주셔서 감사합니다
'Language > python' 카테고리의 다른 글
[python] WSGI, Middleware (flask, django) (0) | 2017.12.29 |
---|---|
[python] Django란? (0) | 2017.12.29 |
[python] 추상클래스(abstract class) - abc module (0) | 2017.12.16 |
[python] logging example (0) | 2017.12.16 |
[python] unittest library - simple example (0) | 2017.12.15 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/