오늘의 집 클론 프로젝트 후기 (백엔드)

강두연·2020년 11월 29일
5

프로젝트 소개

출처: 오늘의 집 공식 사이트

인테리어 관련 sns 기능과 상품 판매기능이 모두 갖추어진 요즘 핫한 웹 서비스 중 하나인 '오늘의 집' 을 클론하는 '팀!' 프로젝트를 진행하였다.

여러가지 소프트웨어 개발 방법론 중 많이 사용되는 Scrum 방법론을 채택하여 일주일 단위로 Sprint를 나누고, 주간 미팅과 데일리 스탠딩 미팅을 통해 각 팀원의 진행사항 및 계획에 대해 공유하며 진행하였다.

진행기간: 2020년 11월 16일 ~ 2020년 11월 27일

Tech Stack

  • Python
  • Regular Expression
  • Django
  • MySQL
  • JWT, Bcrpyt
  • Git & GitHub
  • AWS EC2, AWS RDS

팀 구성

🐶 Front-end

🐼 Back-end

역할

오늘의 집 사이트를 보면 크게 Community, User, Store, Order 세가지로 나눠져 있다. 따라서 우리는 각 3가지 메인 기능에 초첨을 두어 분업하였고 본인은 Community를 담당하게 되었다.

  • 강두연 : post
  • 김기용 : product (store)
  • 김민서 : user, order

Community에는 sns와 같은 기능들이 구현되어있는데, 아무래도 2주만에 완성을 해야하다보니 커뮤니티 탭에 있는 모든 것들을 구현하진 못하고 팀 회의를 통해 '사진'부분만 하기로 정해져서 이를 'post'라 칭하고 post와 관련된 부분을 구현하였다.
아래는 본인이 맡은 부분에 대해 이해를 돕기위한 오늘의 집 사진을 첨부하였다.

Modelling

구현 목록 (Implemented list)

* Bold 와 Italic이 적용된 것은 본인이 구현하였다.

  • 모델링 (팀) - Aquery Tool
  • 회원가입 엔드포인트 - bcrypt (DB에 암호화된 비밀번호 저장) | POST
  • 로그인 엔드포인트 - bcrpyt (비밀번호 대조), JWT(토큰 생성) | POST
  • 로그인 확인 데코레이터 - JWT(토큰 복호화)
  • 팔로우 & 언팔로우 엔드포인트 | POST
  • 좋아요 & 좋아요 취소 엔드포인트 | POST
  • 북마크 & 북마크 취소 엔드포인트 | POST
  • 마이페이지 엔드포인트 | GET
  • 장바구니 엔드포인트 | POST, GET
  • 상품 리스트 엔드포인트 - 정렬 및 검색 포함 | GET
  • 카테고리 별 상품 리스트 엔드포인트 | GET
  • 상품 상세페이지 엔드포인트 | GET
  • 포스트 리스트 엔드포인트 - 정렬 포함 | GET
  • 포스트 상세페이지 엔드포인트 | GET, PUT, DELETE
  • 댓글 엔드포인트 | GET, POST
  • 댓글 수정 엔드포인트 | PATCH, DELETE

후기

여기서 부터는 개인적인 이야기 이다.

오늘의 집 관계자 분이 혹시라도 십만.. 아니 백만분의 일 확률로라도 이 글을 본다면 제발 나에게 오늘의 집에서 사용하고 있는 DBMS에 대해 알려줬으면 좋겠다. 처음에 프로젝트를 진행하면서 다같이 모델링을 하는데 생각보다 순조로웠다. 하지만 개발자라면 가장 무서운 상황은 아마도... '너무 잘될 때'가 아닐까 싶다.
역시 예상대로 스토어 부분에서 상품에 관해 다시한번 자세히 살펴보니 엄청나게 복잡하게 되어있는걸 확인 할 수 있었다.

엄청나게 많은 카테고리가 있고 그 각 카테고리 별로 상품의 추가 사양이라 든지... 아니면 상품을 묶어서 판매하는 등 상품 관련 모델링을 하다가 도데체 무슨 DBMS를 사용하길래 이렇게 할 수 있는 걸까 라는 의문이 들었다. 적어도 RDBMS는 아닌거같다...

아무튼 개인적인 감정(?)이 담긴 후기는 그만 쓰고 좀 더 디테일하게 나누어서 후기를 남기도록 하겠다.

협업의 경험

나는 IT학부시절 팀 과제를 하는 경우가 있긴했었지만 개발자의 규모가 2명 혹은 3명 정도의 적은 수준이였고 Git 을 사용하긴 했지만... 사실 상 그냥 하나의 컴퓨터에서 Git을 통해 변화를 기록만 하고 소스는 로컬로 주고받는 그런 바람직하지 않은 방식으로 하곤 했었는데 이런 사소한 일탈(?)들이 졸업 후에는 엄청난 후회로 남았다. 그래서 정말 현업에서 일하는 것 처럼 협업을 하고 싶었고 최대한 이런 협업을 하는 방식을 체득해서 어떠한 기능을 구현하는 역량보단 협업에 관련된 역량을 키우는 것이 나의 목표였다.

따라서, 프로젝트를 진행하면서 엔드포인트에서 get, post 등 메소드 별로 브랜치를 나누어 푸쉬를 하고 컨플릭트를 해결하는 과정을 반복하여 연습했다.
학부시절에 그렇게 어려웠던 merge과정에서 나는 conflict가 침착하게 정보를 찾아보고 도전해보니 읭? 생각보다 쉬운데? 라고 느꼈다 (사실 git을 다루는 역량의 만점이 10점이라고 하면 1에서 1.111111 정도 된거겠지만..).

그리고 프론트와 백을 정확히 구분지어서 진행한 적은 처음이라, 이것또한 맞춰볼 때 현재 내가 구현한 api에 대해 설명하는 과정이 생각보다 힘들었다. 학부시절에 업신여겼던 api 문서화가 왜 중요한지 몸소 깨닫게 되는 순간들이 였다.

결론적으로, 좀 더 바람직하고 효율적이며 합리적인 협업의 방법에 대해 많이 생각하고 실천해보는 계기가 되어 좋았다.

아쉬운점

개발자의 특별한 문화중 하나인 '공유하는 문화'를 좀 더 제대로 실천하지 못한 것이 아쉽다.
어떠한 기능을 구현하는데 새로운 기술이나 라이브러리 등을 도입했을 때
좀 더 팀끼리 혹은 더 나아가 동기 모두와 공유하는 그런 자리를 마련해보고 싶었는데 아무래도 첫 프로젝트고 시간적인 제한이 크게 걸려있기때문에 실천해보지는 못했다.

2차 프로젝트 때는 기본적인 CRUD를 넘어 더욱 다양한 기능들을 구현할 예정인데 새로운 라이브러리나 기술 등의 활용이 불가피하다고 생각된다. 그래서 반드시 꼭 이러한 내용(예시.결제기능)에 대해 동기들끼리 공유하는 자리를 가졌으면 좋겠다.

또한, 1차 프로젝트 내에 구현과 관련하여 아쉬운 것이 있다.
오늘의 집 사이트를 보면 이미지 업로드 기능이 필수적인 요소인데 시간관계상 이것을 구현하지 못했다..(boto3 활용)
다음 프로젝트에서는 boto3 에 대해 팀원 및 동기들과 공유하고 실제로 적용해볼 것이다.

잘한 점

나는 오지랖이 넓은 편이다.
좀 더 자세하게 말하면 누군가에게 내가 알고있는 지식을 알려주는 것을 좋아하며 나로 인해 도움받은 이가 문제를 해결했다고 했을 때 희열감을 느낀다.
이번 프로젝트 때도 마찬가지였다.
프론트와 백, 그리고 팀 구분을 하지않고 특정 기능을 구현하는데 어려움을 느끼고 있는 사람들이 있으면 찾아가서 내가 알고 있는 지식들을 최대한 쉽게 설명하려고 노력하였다(물론, 틀릴 수도있다고 사전에 경고하였다).

운이 좋게도(?) 학부시절에 풀스텍으로 개발해 본 경험이 있어서 (AngularTS, NodeJS, Express 등) 프론트 분들이 사용하는 프론트앤드 라이브러리인 리액트 경험은 없지만 천천히 코드를 보니 어느정도 구조 파악하는데 크게 어렵지는 않았다.

이것이 내가 개발자가 되고싶은 이유중에 하나이다.
개발자는 '공유하는 문화'가 자리잡고 있기 때문에, 내가 어떠한 기능을 구현하는데에 있어서 어려움이 있으면 나를 도와줄 전 세계의 수십만 아니 수백만 개발자들이 인터넷상에 존재하고있다.
또한, 내가 남에게 도움을 줄 수 있는 사람이 될 수 있다는 사실도 개발자라는 직업의 엄청난 매력으로 다가온다.
그리고 다 할 줄 아는 개발자가 되고싶은 이유기도 하다.
좀 더 구체적으로 얘기하면, 경험해보지 못한 기술로 개발은 할 줄 몰라도 해당 기술을 다루는 개발자와 소통에 어려움이 없는 개발자가 되고싶다.

profile
Work hard, Play hard

1개의 댓글

comment-user-thumbnail
2020년 12월 3일

ㅋㅋㅋㅋ 많이 도와주셔서 감사해요 갓두연

답글 달기