DRF + VUE.JS + CircleCI?
DRF(django rest framework)를 선택한 이유
일단 가장 큰 이유는 python이 쓰고 싶어서이다. python은 기본적으로 배우기도 쉽지만 코드의 가독성을 높이기 쉽고 프로그래머들의 실수를 줄이기 위한 적절한 제약사항, 그리고 최근 가장 뜨고 있는 언어이기도 해서다.
python을 사용한 대표적인 프레임워크인 django는 flask보다 러닝커브는 좀 높지만 큰 프로젝트를 다루기에 좀 더 모듈화 하기 좋은 것이 장점이다. 그리고 django는 기능들이 워낙에 많고 잘되어 있어서 초보자들이나 고수들이나 같은 기능을 구현했을 때 코드가 크게 차이나지 않는다는 것도 장점인듯하다.
Django rest framework는 api를 restful하게 쨔기 좋게 하려는 목적으로 만든 프레임워크이고, 난 api를 restful하게 만들 것이기 때문에, 굳이 django를 사용하는것보다 DRF를 쓰는 것이 더 효율적이라 판단했다. 그리고 무엇보다 SW마에스트로에서 해봤었던 기술스택인데 더 깊게 공부하고 싶은 마음도 커서 선택했다.
VUE.JS를 선택한 이유
먼저 react.js는 널리 알려져 있다시피 component 단위의 프로그래밍이 가능하고 virtual DOM을 사용해서 렌더링을 효율적으로 하기 때문에 선택해서 여러 프로젝트를 진행했었다. 하지만 워낙 작은 라이브러리다 보니 webpack 설정 등 복잡한 환경설정이 뒤따르게 되고, 배포할 때도 여간 귀찮은 것이 아니다. 그래서 나는 create-react-app을 사용해서 react 프로젝트를 생성, 관리 했었는데, 이것 또한 패키지 이다보니 여러 한계점들이 보이기 시작했었다. 또한 react는 서버사이드 렌더링에 최적화 된 언어이기 때문에, 서버사이드 렌더링을 하려면 또 아주 복잡한 과정을 거쳐야한다. 그래서 react의 장점을 그대로 가져가면서 성능 개선 및 어려운 러닝커브들을 낮춰줄 수 있다는 vue.js에 대해서 알아보고, 적용해 보기로 했다.
그리고 react가 아닌 vue를 선택하는 자세한 이유는 Angular 2 대신에 Vue.js를 선택한 이유 (그리고 React를 선택하지 않은 이유) 라는 글을 보면 더 잘 와닿을 수 있다.
CircleCI를 선택한 이유
CI(Continuous Integration)은 단위테스트 및 기능테스트를 실행시켜줘서 TDD(Test Driven Development)에서 필수적인 항목이고, 코드 변화에 따른 자동배포 등 여러 장점을 가지고 있기 때문에 CI를 사용하기로 했다. 테스트가 잘 이루어지는지 codecov도 가능하면 쓸 예정이다.
유명한 CI 툴에는(사실 내가 알고있는) 크게 3가지가 있다.
- Jenkins : 다양한 기능들을 제공하지만 러닝커브가 높고, 환경설정이 매우 복잡하다.
- CircleCI : 동시에 여러개의 빌드를 실행 시키는 것이 유료지만, private 저장소가 무료이다.
- TravisCI : 동시에 여러개의 빌드를 실행 시킬 수 있지만, private 저장소는 유료라서 오픈소스 프로젝트에서 주로 쓰인다.
러닝커브도 쉽고, 난 그다지 많은 프로젝트를 동시에 돌리지 않고 있기 때문에, 혹시 모를 private 저장소로 전환할 경우를 대비해서 circleCI를 사용하기로 결정했다.
TDD(Test Driven Development)
앞으로 TDD 방식으로 개발을 하는데, TDD 방식으로 개발을 하면 사용자의 모든 행위에 따라서 소프트웨어가 제대로 작동하는 지 테스트를 하고, 테스트가 통과해야만 실제 서버에 배포되기 때문에, 좀 더 안정적인 서비스를 만들 수 있다. 그래서 백엔드는 pytest-django를 사용하고, 프론트 엔드는 vue.js 테스트러너를 사용한다. 그리고 functional test는 selenium을 사용해 진행할 것이다.
django의 테스트를 사용하는 것이 아니라 pytest-django를 사용하는 이유는 왜 pytest를 써야할까? 라는 글을 참고하고,
pytest의 구체적인 사용은 다음의 글들을 참고하자.
git-flow를 사용한 브랜치 전략
형상관리는 git을 사용하고, 브랜치 관리는 git-flow를 사용해서 작업할 것이다. 자세한 사항은 git flow를 사용한 브랜치 전략 포스트를 참고하자.
또한 저장소에 바로 커밋하지 않고, Pull Request를 통해서 코드 리뷰와 테스트가 통과된 브랜치만 merge될 수 있도록 할 것이다.