원티드x위코드 프리온보딩 1주차 2차 과제 후기

유동헌·2021년 11월 7일
0

과제 내용

과제 Repository

https://github.com/wanted-InfinityLoop/fresh-code-InfinityLoop

내용

이번 과제는 freshcode라는 샐러드 정기구독 서비스를 제공하는 기업의 과제로, RDBMS+django를 사용하여 CRUD API를 작성하는 과제였다.

과제에 대한 세부 사항

  1. 먼저 현재 팀원 모두 python + django(물론 다른 언어에 익숙하신 분들도 계신다) 기반으로 취업을 준비하고 계셔서 이번에는 색다른 프레임 워크를 사용해 보려고 했었다. FAST API, flask 등이 후보로 올랐으나 시간 + 현실적인 가능성 등을 고려해 django + DRF를 사용해보기로 결정했다.
  2. 하지만 DRF 역시 쉽지 않았는데, 간단한 구현 사항은 가능했지만 DRF의 구조라던지 원리에 대해 충분히 공부할 시간이 없었다. 그래서 과제 종료 몇 시간 남기지 못하고 다시 django ORM, 기존에 진행하던 패턴으로 진행 방향을 선회하였다.
  3. 나는 상품 관리 페이지의 한 부분을 맡아 진행했다.

배운 점

makemigrations와 migrate의 차이

  • [migrate](https://docs.djangoproject.com/en/2.2/ref/django-admin/#django-admin-migrate), which is responsible for applying and unapplying migrations.
  • [makemigrations](https://docs.djangoproject.com/en/2.2/ref/django-admin/#django-admin-makemigrations), which is responsible for creating new migrations based on the changes you have made to your models.
  • [sqlmigrate](https://docs.djangoproject.com/en/2.2/ref/django-admin/#django-admin-sqlmigrate), which displays the SQL statements for a migration.
  • [showmigrations](https://docs.djangoproject.com/en/2.2/ref/django-admin/#django-admin-showmigrations), which lists a project’s migrations and their status.

git 관리 방법

  • 따로 포스팅하였다.

느낀 점

  1. 배포 과정에서 데이터가 꼬이는 경험을 했다. 여러 팀원들이 한 번에 하나을 작업하는 거라서 사소한 키값의 변화가 굉장히 번거로운 일로 번질 수 있다는 것을 다시 한 번 경험했다. 그 중 하나가 데이터를 구축하는 일이었는데, 이번 과제에서는 많은 데이터가 필요하지 않아 각자가 임의적으로 넣고 진행을 하였다. 이 과정에서 언제든 데이터를 공유할 수 있도록 cvs 파일을 만들어 주면 좋을 거 같다는 생각을 했다. 사실 과제 전 회의에서 관련 안건이 나왔으나 시간적인 문제로 인해 각자 진행을 하였는데, 배포 과정에서 이 문제가 붉어질 수도 있겠다는 느낌을 받았다. 사실 내가 실력이 더 있었으면 빨리 끝내고 해도 남을 시간이 있었지만..
  2. git rebase를 통해 진행을 하였는데 이 부분에서 많이 애를 먹었다. 내가 git 때문에 힘들어 할 때 마다 발벗고 나서 도와준 팀원들에게.. 마음 속 깊이 고마워하고 있다. rebase에 대한 기본적인 플로우는 익혔으나 수 많은 돌발 상황에 대해서는 아직 무지하다. 사실 위코드 때도 이 부분 때문에 굉장히 어려웠었는데, 이번 기회를 통해 다음 프로젝트 부터는 최대한 도움 없이 혼자 해결해 보도록 해야겠다.
  3. RESTful API 구현에 대해 더 자세하게 이해하게 되었다. RESTFul API란, HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것인데, 지금까지 어렴풋이 이해하고 있었던 것 같다. 한 함수 안에서 GET과 POST로 각각 실행하는 함수가 다르게 처리하는 것도 처음 알게 되었다. 예를 들어 views.MenuDetailView.as_view() 라는 함수를 사용하는 url을 만들면서 create와 detail을 구현할 수 있다. 하나는 아무 것도 없이, 왜냐하면 이미 POST라는 메서드에 그 메서드의 행위가 명시되어 있기 때문이다. 또한 GET으로 해당 게시물의 detail 사항이 필요할 때 인자만 넣어서 요청하면 된다. 이렇게 직관적으로 명시하는 것이 RESTFul API였다.
  4. unittest에 대해서. 사실 혼자서 프로젝트를 진행할 땐 시간의 제약이 약하고, 내 호흡대로 코드를 전개하고 unittest를 진행하면 된다. 하지만 협업에서는 시간 관리가 생명이라는 걸 다시 한 번 느꼈다. 이번 프로젝트 때 맡은 API를 작성하고 바로 테스트 코드를 작성해야 했는데, 시간적으로 여유가 배포까지 여유가 얼마 없어 팀원 분의 도움을 받았다(감사하다..). 다음 프로젝트 때도 이런 식을 흐른다면 매우 좋지 않으므로, 속도에 신경을 더 쓰도록 해야겠다.

전체 정리

프로그래머는 단순하게 코드를 치는 사람이 아니다, 라는 말을 다시 한 번 실감할 수 있었다. 프로젝트 전체의 방향, 발생하는 이슈에 대한 혜안을 제시하고 올바른 방향으로 이끌 수 있는 그런 능력... 계속 공부를 해야 가질 수 있는 능력이지만 그런 마음을 갖는 것이 중요한 듯 하다. 이런 마음을 가지고 내 팀원들과 공유하고 문제에 대해 이야기하며 풀어나가는 것 같다. 아쉬운 부분이 너무 많다. 부족한 부분에 대해서는 계속 공부, 블로그 포스팅을 통해 보충하고 2주차엔 조금 더 나은 모습이 되도록 노력해야겠다.

profile
지뢰찾기 개발자

0개의 댓글