✅ 90factory에서의 한달동안의 팀프로젝트를 끝내고 작성한 후기입니다.
주제 : 주식포트폴리오를 공유하는 커뮤니티 사이트
목표 : 서비스의 기획부터 설계 배포까지 해보는 프로젝트
인원
나는 Back-end를 각각의 도메인으로 나누어 그 도메인안에 Model과 Controller를 두어 클라이언트에서 요청한 데이터를 제어하고 Response하면 유지보수하기 쉬워질 것 같아서 이런 구조로 설계하였다.
도메인은 유저(account), 주식정보(company), 관리자(manager), 포트폴리오 게시판(portfolio)로 나누었고, 그 안에 Model(models.py), Controller(views.py)를 두었다.
유지보수와 추가확장이 용이하도록 Restful 하게 API 구현
보통 Django에서 Restful API를 만들 때 DRF(django rest framework)를 이용하는데, 나는 아직 Django의 순기능을 더 이용해보고 싶기도 했고, 기본에 충실하고자 pure django로 Restful API를 구현했다. (프로젝트 정리 하고 DRF로 리팩토링 할 예정)
엔드포인트를 각가의 도메인으로 계층구조를 만들었으며 클라이언트의 행동에 따라 HTTP Method를 구분했습니다.
보완해야될 부분
/(슬래시)
가 있음 -> URI는 계층형 구조를 표현하기 때문에 마지막에 있는 /
를 제거해야됨ORM을 이용하여 CRUD를 구현
클라이언트에 요청에 따라 DB를 조작해야 되는데 이를 위해 ORM을 이용, CRUD를 구현하였다.
ORM을 쓰니 SQL문을 쓰는 것보다 가독성이 좋고, 유지보수가 쉬웠다.
하지만, ORM 구문을 따로 익혀야되는 부분이 번거로웠다.
select_related()와 prefetch_realted()를 사용하여 쿼리를 최소화
DB 테이블 간의 관계에따라서 정참조 일떄와 역참조일 때가 있는데, 그 때 쓰는 것이 select_related(정참조 일때)
, prefetch_related(정참조/역참조 둘다 가능)
이다. (내부적으로는 SQL문의 INNER JOIN 하여 연결되어 있는 테이블을 가져온다.)
그래서 연관된 테이블을 두개의 ORM을 이용하여 최소한으로 DB에 쿼리를 날릴 수 있도록 하였다.
Bcrypt
: 단방향 해시함수를 통해 암호화된 Digest를 생성하여 DB에 저장하였다.
JWT
: Json Web Token을 사용하여 DB를 거치지 않고 유저의 상태를 알 수 있게하였다.
Decorator
: 유저검증 함수를 모듈화 시켜서, 유저를 검증해야되는 API가 호출될때마다 Decorator
를 이용하여 재사용이 가능하게 만들었다.
처음에 스프린트를 계획할때는 마지막에 배포를 할려했는데, API를 만들면서 동시에 프론트와 통신하는 것이 원활하지 않아 미리 배포를 하여 API개발 서버와 프론트와 통신하는 서버를 분리하였다.
Django
이번 프로젝트를 계기로 Django의 구조(MTV)와 MVC패턴에대해서 이해를 하게되었고, 테이블간의 관계에 따른 ORM을 어떻게 사용하면 될지 이해가 되었다.
배포
배포를 하고나서 끝이아니라, 배포된 서버를 관리하는 것과 자동화된 배포를 공부해야된 것을 깨달았다.
협업
프론트 두분과 팀프로젝트를 진행하면서 백엔드인 내가보는 관점 또는 생각과 프론트분들이 보는생각과 관점이 다르다는 것을 깨달았고, 어떻게하면 같은 시각에서 이해하고 생각하면서 논의해야될지 알게된 것 같다.
또한, 원활한 커뮤니케이션이 서로간의 일을 두번하지 않게하고 조금 더 편하게 할 수 있다는 것도 알게되었다.
아쉬운 점
조금 더 이야기를 팀원들과 많은 이야기를 했으면 더욱 즐거운 프로젝트가 되었을 것 같다. 조금 더 팀원들에게 다가가는 사람이 되어야겠다!
공부해야될 것 or 보완해야될 것
Docker
- 배포된 서버에서 가상환경부터 일일이 수동으로 배포하는 것이 번거로워 자동화 배포를 해봐야겠음DRF
- Django Rest Framework를 이용하여 간결하고 깔끔한 Restful API로 만들기