프로젝트를 완성한후 좀더 발전시킬방법에 대해 학습중이다. 기능 관련해서는 물론 좀더 발전시킬부분이 있지만 내가 경험해보지 않은 부분은 어딜까? 생각하다 요즘은 선택이 아닌 거의 필수로 여겨지고 있는 TDD에 대해 알아보고 적용해보게 되었다.
TDD란?
테스트 주도개발(Test Driven Development)은 일종의 개발 방식 또는 개발 패턴을 말한다. 무언가를 개발할 때 바로 개발부터 하는 것이 아니라 개발하려는 항목에 대한 점검 사항을 테스트코드로 만들고 그 테스트를 통과시키는 방식으로 개발을 진행하는 방법이다.
-TDD 이전의 테스트 방법
API서버를 만들때 항상 그때그때마다 POSTMAN으로 API에 JSON형식으로 데이터를 전송하고 OK되면 바로 서버에 적용 하는 방법으로 테스트를 진행했다. 사실, 개인적 혹은 소규모의 팀프로젝트를 진행하는 나의 입장에서는 TDD가 그렇게 와닿지도 필요하지도 않았다. 그래서 테스트코드 작성이라는 귀찮은 개념을 다시학습하고 적용할 필요가 없었다.
하지만, 프로젝트 규모가 좀더 커지고 API가 다양해진다면? 말이 달라진다. 매번 POSTMAN으로 일일이 확인을 해야하고 복잡하게 얽혀있는 비즈니스 로직에 대해 하나하나 고려해가며 테스트 하기는 물론 쉽지 않고 누락하기 쉽다. 때문에 테스트코드를 작성함으로써 이런실수를 미연에 방지하고 추후 나아가 이걸기반으로 배포 자동화 즉, CI/CD를 적용할때의 기준점을 잡고 진행할수 있다. 물론, 다수의 개발자가 협업하는 회사에서의 TDD는 결국 필수라고 생각한다.
DRF에서의 TDD
사실 방법은 다양하다. 이미 파이썬 자체에서 제공하는 라이브러리도 있으며, 그밖의 다양한 방식또한 있겠지만 django라는 완벽한 프레임워크에는 자체적으로 test할수 있는 방법이있다. 매번 python manage.py startapp ~~를 통해 생성되는 test.py가 바로 그방법중 하나이다.
python manage.py test
Found 0 test(s).
System check identified no issues (0 silenced).
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
test.py를 전혀 건드리지 않고 위의 명령어를 입력한다면 당연히 아무런 에러가 뜨지 않는다.
하지만, 기존에 작성된 api에 잘못된 형식으로 데이터를 전송한다면? PTSD오는 수많은 에러창이 나온다.
대부분의 협업은 drf를 통해 api를 생성한후 클라이언트가 api를 이용하기 때문에 postman에서 테스트 하는것과 같은 방법으로 테스트 코드를 작성한다.
from django.test import TestCase
from rest_framework.test import APIRequestFactory
factory = APIRequestFactory()
request = factory.post('/api/board/', {
"title":"asdasdasd",
"category":"question",
"content":"asdasdasdasd",
"user":1,
"stack":["python", "java"],
"worker":["기획자","디자이너"]
})
위와 같은 방식으로 테스트 코드를 작성한후 python manage.py test를 통해 테스트 통과유무를 확인하고 에러가 없는걸 확인 했을때 배포하는 식으로 진행하는 방법이다.
api 서버를 개발하는 우리 입장에서는 각각의 api에 적합한 데이터를 넣었을때 데이터가 제대로 저장되는지 확인을 하면 되는 부분이므로 아래의 공식문서의 내용을 통해 인증을 포함한 여러 테스트 코드를 작성하면 된다.
Testing - Django REST framework
www.django-rest-framework.org
TDD라는 말만 들어봤지 실제로 어떻게 작성해야하고 무엇을 테스트 해야하는걸까?라는걸 모르고 있었던 나에겐 사실 꼭필요했던 정보라 짧게나마 기록을 해두게 되었다ㅎㅎ..
'기술 > Django' 카테고리의 다른 글
two scoops of django - django 코딩 스타일 맞춰보기 (0) | 2022.08.29 |
---|---|
drf -서버란? 그리고 drf란? (0) | 2022.03.24 |
drf nginx gunicorn https적용하기(react-drf certbot) (1) | 2021.12.15 |
django 초기 프로젝트 설정(secret감추기, database감추기) (0) | 2021.06.10 |
django 커뮤니티 만들기-(9)python anywhere배포 (0) | 2021.06.03 |