파이썬 프레임워크에 대한 생각


Youngrok Pak at 2 years, 11 months ago.

django-rest-framework 쓰는데 mongodb 때문에 이것저것 튜닝이 들어가다보니 학습 비용도 커지고 수작업도 많아져서 프레임워크를 쓴 이유가 사라지는 중이다. 여기에 들인 시간을 그냥 합치면 지금 프로젝트의 요구사항을 수용할 만한 새로운 rest framework를 만들고도 남았을 듯.

그래서 든 생각인데, 파이썬이나 루비 같은 고급 언어의 프레임워크는 학습 비용이 매우 작아야 가치가 있는 것 같다. 예전부터 파이썬은 프레임워크가 발달하지 않고 필요한 건 그냥 자기가 직접 만들어 쓰는 문화가 강했는데, 그건 프레임워크 배우는 시간과 직접 만들어 쓰는 시간의 차이가 별로 없었기 때문이다. 그러다가 루비의 강력한 커뮤니티 문화와 github의 문화가 파이썬에도 유입되고, 자바의 프레임워크 주의자들도 유입되면서 파이썬도 프레임워크가 늘어가고 있는데, 예전보다 프레임워크들이 거대하면서도 의존성이 심해서 pythonic하지 않다는 느낌이다.

좋은 프레임워크는 프레임워크가 아니라 언어로 문제를 해결하게 만든다. 예전에 내가 Rails와 Django를 비교하면서 Rails는 문제를 Rails로 해결하고, Django는 Python으로 해결한다고 설명한 적이 있었다. 이건 Django의 coverage가 낮다는 뜻이기도 하지만, 더 유연하다는 뜻이기도 하다. Django도 풀 스택 프레임워크이긴 하지만 템플릿이나 모델은 아주 손쉽게 바꿔칠 수 있고, auth 같은 것도 안 쓰면 그만이었다. 하지만, Django와 관련 패키지들이 급속도로 성장하면서 Django의 세세한 기능에 의존하는 패키지들이 많아져서 이제 Django도 Django로 문제를 해결하는 프레임워크가 되었다. 그래서 그냥 갖다 쓰기 좋은 것들은 많아졌지만 조금만 튜닝해서 쓰려고 해도 복잡한 과정을 거쳐야 한다.

사실 다이나믹 언어는 일부러 확장점을 제공할 필요성이 별로 높지 않다. 언어 자체에서 확장할 수 있는 수단이 많기 때문이다. 그냥 low coupling, high cohesion의 설계 원칙만 잘 지키면 따로 확장점을 설계하지 않아도 쉽게 확장해서 쓸 수 있다. 그런데 django-rest-framework 같은 경우는 여러 가지 의존성이 매우 심하게 걸려 있어서, 매우 다양한 확장점을 제공함에도 불구하고 확장하기 몹시 귀찮다. GenericViewSet 같은 것도 다중 상속까지 적극적으로 활용해가면서 확장하기 쉬운 척 하고 있지만 실제로 해보면 ViewSet과 APIView의 관계가 이상하고 model에 의존성이 강해서 마음대로 확장할 수가 없다.

그래서, 파이썬 프레임워크를 만들 때 이런 원칙을 세워보면 어떨까 싶다.

  1. 핵심 기능을 5분 내에 충분히 깊이 설명할 수 있다.
  2. 열심히 리팩토링한다.
  3. 확장점을 제공할 때 class를 지정하는 방식은 피한다.

나도 이제 뭔가 오픈소스를 만들 때 이런 점을 염두에 두고 해보려고 한다.


Comments




Wiki at WikiNamu