Today I Learned/기술

pycon 2021 | python & django 샌드버드 발표영상 시청 및 기록

하나719 2023. 10. 11. 20:39
반응형

https://www.youtube.com/watch?v=r6c9Us0vgRg&t=103 

2021년 발표영상이라 2년정도 지나긴 했지만, 장고를 가지고 현업에서 어떤 고민을가지고 어떻게 개발하는지 궁금해서 시청하게 됐고 

기록으로 남겨둘만한 포인트들이 있어서 블로그를 작성하게 되었습니다.

 

1. DRF 를 통한 viewset과 serializer 

*주요내용

고민: ticket list API 를 어떤 방식으로 만들어야할까?

고민 이유: 티켓을 원하는 사용자는 크게 상담을 원하는 고객과, 상담사, 관리자, 분석가로 각각 필요한 ticket list가 달랐습니다.

방안1) ticket list API를 하나로 만들고 조건에 따른 분기를 로직내에 구현

방안2) 일정 기준에 따라 ticket list API를 여러개 생성 

선택 -> 방안2

요청하는 채널(인증방식)에 따라 분류하기로 했다고 합니다. 

- 고객: GET /sdk_api/tickets

- 상담사, 관리자: GET/dashboard_api/tickets

- 개발자, 분석가: GET/plaform_api/tickets 

 

이렇게 선택한 이유는 API가 여러개 관리되어야 하지만 조건문이 적고 커스터마이징이 쉬운 장점이 있습니다. 

API별로 인증과 퍼미션 관리가 용이해집니다. 

 

*느낀점

최근에 프로젝트를 진행하면서 list view 내에서 오늘 날짜를 기준으로 지난 데이터 리스트와 앞으로 다가올 리스트를 분류해서 로직을짜면서 굉장히 복잡해졌다고 느꼈고 이번엔 분기가 2개이지만 분기가 더 늘어나게 되면 코드 관리가 복잡해지겠다고 생각했는데, 이렇게 같은 뷰더라도 분류될수있는 특징을 하나 잡아서 한번 더 분기를 나눠 깔끔하게 구현할 수 있다는 점을 배웠습니다. 

 

2. Python과 Python package 버전 관리

  • requirements.txt -> pipenv로 관리 

현재 프로젝트를 requirements.txt 로만 관리해서 패키지 버전을 항상 명시해주었는데 Pipenv라는 것을 처음 알게 되었습니다. 

 pip와 virtualenv가 합쳐진 것이라고 하는데, 직접 사용해봐야지 알 것 같다. 

다음 프로젝트에 한번 사용해봐야겠다.

 

3.  Test Code 작성과 coverage 

테스트코드는 서비스 안정성을 높여주기 때문에 모든 api 구현 시 테스트 코드를 작성하고 있다고 합니다. 

coverage는 90~92% 정도 유지하고 있다고 합니다.

-> 프로젝트 테스트할 때 coverage를 어느정도로 목표로 할지에 참고 할 수 있을 것 같습니다. 

 

pytest를 중심으로 pytest-django(장고테스트), pytest-flake8(스타일체크), pytest-cov(커버리지 체크) 사용 

 

4. 코딩 스타일

코딩스타일이 팀원간에 차이가 크면 디버깅을 하거나 코드 작성 시 비즈니스 로직에 집중하지 못하는 경우가 생김

일정한 규칙안에 코드를 작성하면 코드 짤때는 비즈니스 로직에만 집중할 수 있음

-> flake8으로 coding style 체크 

-> black이라는 자동 formatter 도입 논의 -> flake8 에 이미 스타일이 익숙해져 있어 이득보다 손실이 크다고 판단하여 도입하지 않았음 

 

이번 팀프로젝트에서 Black을 사용했는데 커밋하기전에 black . 만 터미널 명령해주면 자동으로 전체 파일에대해 스타일을 통일해주었습니다. 처음엔 자꾸 깜박깜박하게 되어 다시 푸시하곤 했는데 이번 영상을 통해서 스타일 통일의 중요성을 다시 한번 더 느끼게 된것 같습니다. 

 

5. API 문서화

- 사내 개발을 위한 api문서 공유시는  django-rest-swagger 로 docs site 운영 -> drf-yasg로 전체 변경됨 (2019년 6월)

 

 

 


영상을 보니 그동안 공부한것들이 하나하나 현업에서 사용되고 있고 중요하구나 느껴져서 동기부여가 많이 되었습니다. 가장 인상깊었던 부분은 1번 항목이었는데요. 최근에 view클래스 내에 로직을 구현하면서 점점 함수하나가 커져가는 고민을 가지고 있었습니다. 함수 내에서 분기하는 방식이 아닌 요청환경에 따라 분기하고 관리할 수 있다는 점을 알게되어 인상 깊었습니다. 

반응형