에이모 기업협업 과제

jinatra·2021년 11월 4일
0
post-thumbnail

에이모 기업협업 과제


위코드x원티드 프리온보딩을 통해 다양한 기업들과 협업할 기회를 가지게 되었고, 이번 과제는 딥러닝 데이터 가공 회사 에이모와 진행을 하게 되었다.


요구사항 및 진행사항

  • 회원가입, 로그인
  • 게시판 CRUD
  • 게시글 카테고리
  • 게시글 검색
  • 대댓글(1 depth)
    • 대댓글 pagination
  • 게시글 읽힘 수
    • 같은 User가 게시글을 읽는 경우 count 수 증가하면 안 됨
  • Rest API 설계
  • Unit Test
  • 1000만건 이상의 데이터를 넣고 성능테스트 진행 결과 필요

프로젝트

팀원

이정우 (GitHub Link)


초기 세팅

적은 인원과 촉박한 시간(약 3~40시간의 개발시간)으로 인해 회원가입, 로그인, 인증/인가 및 게시판 CRUD 등은 기존에 제출했던 사전과제에 기반하기로 합의를 하였다.

나는 Django를, 정우님은 Django Rest Framework를 사용하였지만, Rest API 설계를 위해서는 DRF(Django Rest Framework)를 사용하는 것이 옳다고 판단하여 정우님의 과제를 기반으로 진행하게 되었다.


모델링

모델링의 경우, 너무 많은 테이블을 만들면 되려 꼬일 수가 있을 듯 하여

  • 간단한 User 세팅
  • Board 테이블의 조회수 추가
  • 대댓글을 위한 댓글/대댓글 테이블 별도 구현

정도로 간단하게 제작을 하였다.


회원가입, 로그인 (인증/인가)

기본적인 인증, 인가 절차의 경우 drf에서 자체적으로 제공하는 라이브러리(django-allauth,django-rest-auth) 등을 이용하여 구현을 하였다.


대댓글 기능 (정우님 담당)

정우님이 구현하셨던 대댓글 기능이다.
DRF에서 제공하는 LimitOffsetPaginationserializer 등을 사용한게 우선 눈에 띈다.


검색 기능 (내 담당)

Django로 구현해본적 있던 검색 기능을 맡게 되었다.
DRF에서 제공하는 query_params 메소드를 이용하여 request되는 검색어를 가져오고,
Django의 필터링 기능 중 하나인 icontains를 이용하여 Board 객체의 title에 접근하여 객체를 가져오는 기능을 구현하였다.


(참고) Filtering Keywords in Django


Unit Test1000만 데이터 성능테스트

API 구현 후 Unit Test 및 데이터 성능 테스트를 진행하려고 하였으나, DRF에 익숙하지 못해 끝내 해당 기능은 완성하지 못하였다.





Take Away

Django Rest Framework

DRF에 관해 어렴풋이만 접해오다가, 정우님을 통한 좋은 기회로 직접 DRF를 사용할 수 있게 되었다.
Django와 비슷한 틀을 가지고 있으면서도 내부를 뜯어보니 다른 것들이 많아 간단한 API 하나를 구현하는 데에도 애를 먹었었던 프로젝트였다.
가급적이면 앞으로 진행될 프로젝트들에도 DRF를 적용시키고자 하는데, 제한된 적은 시간 내에 잘 적응할 수 있을 지 약간은 걱정이 된다.


DRF - Serializer

Serializer은 DRF에서 처음 접한 기능으로,
쿼리셋들 및 모델 인스턴스와 같은 복잡한 데이터를 JSON, XML 또는 기타 컨텐트 유형으로 쉽게 렌더링 할 수 있는 Python 기본 데이터 유형으로 변환해 주는 기능이라고 한다.
아직은 조금 생소한 개념이라 써먹지 못했는데, 검색을 하니 아래와 같은 좋은 글이 있어 참고할 부분이 있었다.

필독링크


제한된 시간 내의 프로젝트

두 손에 담을 수 없을 만큼의 프로젝트를 진행한 경험은 없지만, 이번처럼 시간에 쫓기며 밤을 샜던 프로젝트는 처음이었던 것 같다.
기획부터 배포, 즉 초기 세팅, 모델링, API 구현, DB 연결 및 배포에 이르르는 모든 과정을 약 하루 반나절(?) 정도의 시간 안에 해내려니 여간 어려운게 아니었다.
결국 이 과정에서 MongoDB와의 연결을 실패하기도 했고, Framework 이해도 미숙으로 TDD 방법론을 적용하지 못한 채 배포를 해야했다.
앞으로도 개발자 생활을 하게 될 때 이런 일이 많을까? 싶기도 했고
만약 이런 일이 닥쳤을 때 나는 무엇을 우선순위에 두어야하나? 라는 고민을 하게 만드는, 개인적으론 의미가 깊었던 첫 프로젝트였다.





참고
https://www.django-rest-framework.org/api-guide/testing/
https://kimdoky.github.io/django/2018/07/11/drf-Serializers/
https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

profile
으악

0개의 댓글