1차 프로젝트 : 프레시이지

이도운·2022년 2월 12일
0

회고록

목록 보기
2/2
post-thumbnail

[0] 들어가면서.

1차 프로젝트 : 프레시코드 클론 코딩

개발 기간 : 22.01.24 - 22.02.11
개발 인원 : 6명

  • 프론트엔드 : 곽승현, 박경원, 이주미, 정수진
  • 백엔드 : 이도운, 이동훈

기술 스택

  • 언어 : 파이썬
  • 웹 프레임워크 : Django
  • 데이터벵이스 : MySQL

위코드에 들어오고 1차 프로젝트가 끝났다. 지금부터 위코드 1차 프로젝트를 통해 나는 무엇을 경험했는가에 대해 써보려고 한다. 본격적으로 회고록에 들어가기 전에 1차 프로젝트 프레시이지를 구현하는데 정신적으로 그리고 업무적으로 많은 도움을 주었던 우리 프레시이지 팀동료 곽승현님, 박경원님, 이주미님, 정수진님, 이동훈님에게 깊은 감사를 표합니다. 작업을 진행하는 정말 꿈만 같던 시간이었습니다. 앞으로 개발자로 살아가면서 절대로 잊지 못 할 추억이 될겁니다.


[1] 진행하면서.

[1.1] 나는 준비가 되었는가.

1차 프로젝트 발표일 나는 불안했다. 확정된 팀원 때문에 불안했는가? 절대 아니다. 오히려 반대다. 내 자신이 프로젝트에 들어가도 될 정도 실력인가 불안했다. 평소에 주위 동기들로부터 백엔드 실력에 대해서 칭찬을 듣고는 했다. 때문에 이 글을 보는 동기들은 "도운님이 불안했다니 의외인데" 라고 생각하실지도 모르겠다. 그러나 나는 생각한다. 내가 남들보다 조금 잘 아는 부분은 일시적인 것이고 동기분들도 결국 알게 되는 부분이라는 것을. 때문에 나는 평소에 칭찬을 듣고는 하지만 스스로는 잘 동의하지 않는 편이다. 그렇기 때문에 나는 1차 프로젝트 발표일 불안했다.

[1.2] 1인분인가 원팀인가.

내가 고민했던 점은 결국 나는 팀에 들어가서 1인분 이상을 할 수 있는가이었다. 그러나 내 생각은 전제부터 틀렸다. 프로젝트는 6명이 6인분을 해서 결과를 내는 것이 아니었다. 결국 하나의 팀으로 움직이고 있는가가 중요한 것이었다. 그러나 프로젝트 초반에 나는 이러한 점을 몰랐고 밤을 새고 무리하기 일쑤였다. 이렇게 무리했던 것은 결국 엄청난 신체적 피곤으로 되돌아왔고 오히려 팀에 악영향을 끼칠 수도 있었다. 그리고 개인이 1인분을 하는 것보다 원팀으로 동작하는가가 더 중요하다는 것을 깨달은 것은 우리 위코드 퍼포먼스 코치 영은님과 상담 시간을 통해서였다. 한참 피곤하고 힘든 시간을 보내고 있을 때 영은님과 상담 시간에서 영은님에게 내가 고민하는 점을 모두 말씀 드렸다. 영은님은 나의 고민을 듣고 간결하고 직접적으로 조언을 주셨다. 1인분을 하는가는 중요한 것이 아니라는 것을. 그렇게 나는 마음을 비웠다. 그러자 보이지 않았던 것들이 보였다.

[1.3] 나는 몰랐다. 지금 팀원들은 무엇을 하는가.

매일 스탠드업 미팅을 진행한다. 전날 무엇을 했는가, 당일 무엇을 진행할 것인가 회의하는 시간이다. 그리고 팀원들은 트렐로에 자신이 담당하는 일을 달아놓는다. 그러나 이 모든 것이 제대로 진행되고 있었음에도 불구하고 나는 오로지 나 자신에게만 신경을 쓰고 있어서 정작 팀원들은 지금 무엇을 담당하고 있는가에 대해서 관심도 없었다. 그동안 나는 나에게만 모든 것을 집중했다면 영은님의 조언을 듣고 비로소 팀원들을 신경 쓰게 되었다. 같은 백엔드 팀원 동훈님은 무엇을 담당했고 어디서 힘들어 하시고 계신가. 프론트엔드 팀원들은 또한 어떠하신가. 스스로를 챙기려는 생각이 오히려 스스로와 팀원들을 놓치게 만들고 있다.

[1.4] 생각했는가. 동훈님의 폭발적인 성장을.

나는 각자 맡아야 할 분량을 숫자로 계산해서 산술적으로 내가 더 많은 파트를 맡았다. 그러나 이것은 하나의 실수였다. 내가 맡은 부분은 구독 시스템을 구현하는 부분이었다. 분명 어려운 부분이었고 그외 단품 상세 페이지, 구독 상품 상세 페이지 등을 맡으면서 내심 동훈님보다 많은 일을 한다고 생각했다. 그러나 동훈님에게 주어진 하나의 일이 문제였는데 그것은 상품 리스트 페이지였다. 상품 리스트 페이지를 보통 생각한다면 상품 리스트 정보를 프론트엔드에 전달하면 끝나는 페이지다. 필터링을 한다고 해도 오름차순, 내림차순, 가격순, 최신순 등 일반적인 필터를 적용하면 끝날 것 같은 페이지다. 그러나 동훈님에게 맡긴 상품 리스트 페이지는 보통의 그러한 상품 리스트 페이지가 아니었다. 동훈님이 맡으신 상품 리스트 페이지는 유저 로그인을 확인하고 유저 알러지를 확인하고 알러지에 맞게 상품을 한번 더 필터링 하는 기능이 있는 꽤나 복잡한 페이지이었던 것이다.

산술적으로 분배 계산했던 나의 잘못이 명확했다. 나는 혹시 동훈님이 구현을 못 했을 경우를 상정하여 알러지 관련 상품 리스트 페이지를 미리 구현할까 생각도 했다. 그러나 동훈님은 나의 걱정을 기우로 만들었다. 분명 동훈님은 힘들어 하셨다. 그러나 포기하지 않으셨다. 모르는 부분이 생기고 에러가 발생하면 바로 나에게 물어봐주셨다. 나는 즉시 답변을 드렸고 나도 모르는 부분이라면 시간이 오래 걸리더라도 같이 찾아드렸다. 왜냐하면 프로젝트는 나 혼자 1인분을 달성하는 일이 아니라는 것을 깨달았기 때문이다. 동훈님의 질문을 피할 수 있었다. 같이 찾지 않아도 됐다. 그러나 그렇게 나 혼자 맡은 파트를 달성한 프로젝트가 무슨 의미가 있을까? 그리고 그것이 서로에게 도움이 될까? 당연히 아니다. 때문에 나는 동훈님을 열과 성을 다해서 도와드렸다. 그리고 동훈님은 폭발적인 성장을 하셨다. 프로젝트 초반에 쿼리셋 기초에 대해서 물어보시던 동훈님은 결국 알러지 관련 상품 리스트 페이지를 스스로 구현하셨다. 내가 작성한 부분은 일절 없었다. 각자 맡은 부분은 각자가 해결하는 것 그것만은 물러설 수 없었다. 그럼에도 불구하고 최대한 팀원을 도와서 팀원이 해낼 수 있게 돕는 것. 그것을 나는 목표로 했다. 그리고 그것을 우리는 해냈다.

[1.4] 백엔드를 넘어서. 프론트엔드와 함께.

프로젝트는 프론트엔드와 백엔드가 함께한다. 1인분을 달성하는 것이 중요한 것이 아니듯이 백엔드가 백엔드가 맡은 일만 하는 것도 중요한 것이 아니다. 결국 원팀이 되는 것. 그것이 중요하다. 백엔드와 프론트엔드가 원팀이 되어 프로젝트를 진행하는 것 그일을 위해서 프론트엔드 분들의 엄청난 노고가 있었다.

우선 프론트엔드와 백엔드가 서로 정보를 공유하기 위해 따로 노션을 만들었다. 노션에는 백엔드에 프론트엔드를 위해 작성하는 Back-Room 페이지를 만들었고 반대로 프론트엔드가 백엔드를 위해 작성하는 Front-Room 페이지를 만들었다. 해당 페이지를 통해 서로 맡은 파트를 자세히 알 수 있었고 프론트엔드와 백엔드 통신에 있어서도 유용하게 활용할 수 있었다. 서로의 페이지를 최신화를 한다면 굳이 서로에게 매번 묻지 않아도 해당 노션 페이지를 보면 해결되는 일이 많았기 때문이었다.

결국 프로젝트는 혼자 하는 것이 아니다. 혼자가 아니라 같은 기술을 진행하는 팀원과 그리고 같은 기술이 아닌 팀원도 함께 진행하는 것이 프로젝트라는 것을 이번 프로젝트를 통해 절실히 느꼈다.

해당 사진은 프론트엔드와 백엔드 서로 이해를 위해 진행된 장장 6시간 연속 피어 리뷰 시간 모습이다. 한 명씩 1시간씩 자신의 코드를 팀원에게 설명했다. 팀원과 소통을 통해서 필요한 부분과 현재 진행 중에 어려운 부분, 그리고 백엔드로서 프론트엔드로서 궁금한 점을 서로 이야기 할 수 있던 귀중한 시간이었다.

6시간 피어 리뷰라는 시간을 통해서 백엔드와 프론트엔드 서로 코드에 대해서 잘 이해할 수 있었다. 이렇듯 프로젝트가 진행되는 동안 우리팀은 단순히 각자 1인분을 하는 팀이 아니라 서로를 이해가고 서로를 챙겨주며 하나로 뭉쳐서 돌아가는 원팀이 되기 위해 부단히 노력했다.


[2] 프레시이지

[2.1] 구독 상품 페이지

내가 구현한 부분

  • Django를 통해서 구독 상품 정보 반환 View 작성

구독 상품 정보를 반환하는 뷰를 작성했다. 상품 정보를 반환하는 뷰이기 때문에 생각보다 어렵지 않았다.

소스코드 (SubscribeDetailView)

  • Django를 통해서 구독 옵션 정보 처리 View 작성

구독 옵션 정보 처리 View에 대해서 이야기 할 것이 많다. 해당 View는 프론트엔드에서 몇 주 동안 몇 끼를 먹을 것인지 정보를 받아온다. 사용자가 식단을 직접 작성할 수도 있고 시스템이 자동으로 식단을 추천할 수도 있다.

사용자가 식단을 직접 작성하고 정보를 받아오는 것을 포함해서 정보를 받아와서 처리하는 것은 비교적 쉬웠다. 그러나 시스템이 자동으로 식단을 추천하는 부분을 구현하는데 약간 어려웠다.

왜냐하면 자동 식단 추천 기준이 1번 상품부터 5번 상품까지 추천하는 형식이기 때문이다. 이렇게 말하면 쉬워보이지만 12개 상품 식단이라고 친다면 1번부터 5번 상품까지 2번 추천하고 1번, 2번 상품을 추천하도록 만들어야 한다. 이런 알고리즘은 기존 함수를 통해 당연히 제공되지 않으므로 스스로 로직을 짜야 했다.

그리고 소스코드를 보면 알 수 있듯이 자동 식단 추천 로직은 성공적으로 짰다.

소스코드 (SubscribeOptionView)

[2.2] 단일 상품 페이지

내가 구현한 부분

  • Django를 통해서 단일 상품 정보 반환 View 작성

단일 상품 정보를 반환하는 뷰를 작성했다. 상품 정보를 반환하는 뷰이기 때문에 생각보다 어렵지 않았다.

소스코드 (ProductDetailView)


[3] 개선할 부분.

객체 지향 프로그래밍

현재 코드는 절차 지향 프로그래밍에 가깝게 프로그래밍이 되어있다. 이를 어떻게 하면 OOP에 맞게 짤 수 있을지 생각해봐야 한다.

데이터베이스 통신

현재 코드는 정참조, 역참조 할 때마다 데이터베이스 통신이 한 번 더 가게 되어 있다. 이를 Django 함수를 통해서 개선할 수 있다.


[4] 글을 마치며.

앞으로 프로젝트가 하나 더 남았고 개발자로 취업한다면 더 많은 프로젝트를 진행하게 되겠지만 내 인생 첫번째 프로젝트였던 프레시이지 프로젝트는 평생 잊지 못 할 것 같다.

인생 첫 프로젝트였던 만큼 의미가 크기도 했지만 서로를 배려하는 정말 좋은 팀원들과 일할 수 있어서 영광이었고 앞으로 각자 좋은 기업에 취업해서 좋은 시니어 개발자로 성장해서 간간히 만났으면 좋겠다.

그리고 여기까지 제 글을 봐주신 분들! 좋지 않은 필력에도 불구하고 여기까지 읽어주신 분들에게 감사하다는 인사도 전하고 싶습니다. 모두 좋은 시니어 개발자가 되기 위해 파이팅 합시다.

profile
⌨️ 백엔드개발자 (컴퓨터공학과 졸업)

1개의 댓글

comment-user-thumbnail
2022년 2월 17일

프레시코드 모티브로 만들어내신건가요?! 잘만드셨네요!

답글 달기