팀 프로젝트 후기

Daehwi Kim·2021년 5월 17일
2
post-thumbnail

✅   90factory에서의 한달동안의 팀프로젝트를 끝내고 작성한 후기입니다.


🗝 개요


주제 : 주식포트폴리오를 공유하는 커뮤니티 사이트

목표 : 서비스의 기획부터 설계 배포까지 해보는 프로젝트

인원

  • Front-end : 2명
  • Back-end. : 1명(본인)

⭐️ 기술


공통

  • Notion : 프로젝트 문서화(팀 노션페이지)
  • Slack : 커뮤니케이션
  • Git & Github : 버전 컨트롤 및 협업(프로젝트 레포)
  • 진행 : Agile 방식으로 한주의 하나의 SPRINT로 하여 4번의 SPRINT 진행

Back-end

  • Python, Django : 로직 설계 및 웹 서버 구현
  • MySQL : DB 구축
  • AWS의 EC2, RDS : Back-end 배포

💼 프로젝트 문서



에자일 스크럼을 통한 한주단위의 스프린트 진행



구조


나는 Back-end를 각각의 도메인으로 나누어 그 도메인안에 Model과 Controller를 두어 클라이언트에서 요청한 데이터를 제어하고 Response하면 유지보수하기 쉬워질 것 같아서 이런 구조로 설계하였다.

도메인은 유저(account), 주식정보(company), 관리자(manager), 포트폴리오 게시판(portfolio)로 나누었고, 그 안에 Model(models.py), Controller(views.py)를 두었다.


특징


Restful API

유지보수와 추가확장이 용이하도록 Restful 하게 API 구현

  • 보통 Django에서 Restful API를 만들 때 DRF(django rest framework)를 이용하는데, 나는 아직 Django의 순기능을 더 이용해보고 싶기도 했고, 기본에 충실하고자 pure django로 Restful API를 구현했다. (프로젝트 정리 하고 DRF로 리팩토링 할 예정)

  • 엔드포인트를 각가의 도메인으로 계층구조를 만들었으며 클라이언트의 행동에 따라 HTTP Method를 구분했습니다.

    • GET : 데이터 요청
    • POST : 데이터 생성
    • DELETE : 데이터 생성
    • PUT : 데이터 수정
  • 보완해야될 부분

    • URI에 동사가 있는 API가 있음 -> 명사로 바꿔야됨
    • URI 마지막 부분에 /(슬래시) 가 있음 -> URI는 계층형 구조를 표현하기 때문에 마지막에 있는 /를 제거해야됨

ORM

ORM을 이용하여 CRUD를 구현

  • 클라이언트에 요청에 따라 DB를 조작해야 되는데 이를 위해 ORM을 이용, CRUD를 구현하였다.

  • ORM을 쓰니 SQL문을 쓰는 것보다 가독성이 좋고, 유지보수가 쉬웠다.

  • 하지만, ORM 구문을 따로 익혀야되는 부분이 번거로웠다.

select_related()와 prefetch_realted()를 사용하여 쿼리를 최소화

  • DB 테이블 간의 관계에따라서 정참조 일떄와 역참조일 때가 있는데, 그 때 쓰는 것이 select_related(정참조 일때), prefetch_related(정참조/역참조 둘다 가능) 이다. (내부적으로는 SQL문의 INNER JOIN 하여 연결되어 있는 테이블을 가져온다.)

  • 그래서 연관된 테이블을 두개의 ORM을 이용하여 최소한으로 DB에 쿼리를 날릴 수 있도록 하였다.


JWT/Bcrypt 를 이용한 인증/인가

  • Bcrypt : 단방향 해시함수를 통해 암호화된 Digest를 생성하여 DB에 저장하였다.

  • JWT : Json Web Token을 사용하여 DB를 거치지 않고 유저의 상태를 알 수 있게하였다.

  • Decorator : 유저검증 함수를 모듈화 시켜서, 유저를 검증해야되는 API가 호출될때마다 Decorator를 이용하여 재사용이 가능하게 만들었다.

  • Code

배포

처음에 스프린트를 계획할때는 마지막에 배포를 할려했는데, API를 만들면서 동시에 프론트와 통신하는 것이 원활하지 않아 미리 배포를 하여 API개발 서버와 프론트와 통신하는 서버를 분리하였다.


후기


  • Django
    이번 프로젝트를 계기로 Django의 구조(MTV)와 MVC패턴에대해서 이해를 하게되었고, 테이블간의 관계에 따른 ORM을 어떻게 사용하면 될지 이해가 되었다.

  • 배포
    배포를 하고나서 끝이아니라, 배포된 서버를 관리하는 것과 자동화된 배포를 공부해야된 것을 깨달았다.

  • 협업
    프론트 두분과 팀프로젝트를 진행하면서 백엔드인 내가보는 관점 또는 생각과 프론트분들이 보는생각과 관점이 다르다는 것을 깨달았고, 어떻게하면 같은 시각에서 이해하고 생각하면서 논의해야될지 알게된 것 같다.
    또한, 원활한 커뮤니케이션이 서로간의 일을 두번하지 않게하고 조금 더 편하게 할 수 있다는 것도 알게되었다.

  • 아쉬운 점
    조금 더 이야기를 팀원들과 많은 이야기를 했으면 더욱 즐거운 프로젝트가 되었을 것 같다. 조금 더 팀원들에게 다가가는 사람이 되어야겠다!

  • 공부해야될 것 or 보완해야될 것

    • Docker - 배포된 서버에서 가상환경부터 일일이 수동으로 배포하는 것이 번거로워 자동화 배포를 해봐야겠음
    • DRF - Django Rest Framework를 이용하여 간결하고 깔끔한 Restful API로 만들기
profile
게으른 개발자

0개의 댓글