장바구니 조회 GET API 작성
장바구니 수량 수정 PATCH API 작성
장바구니 상품 추가 POST API 작성
장바구니 상품 삭제 DELETE API 작성
주문서 POST API 작성
가장 어려웠던 단계는 역시 실제 코드를 작성하기 전 pseudo code 를 작성하는 단계였다. '장바구니' 라는 페이지에 crud가 모두 포함되어 있는데다 장바구니를 사용하는 기능을 한번도 구현해본 적이 없었다. '장바구니는 대체 어떻게 만들어야 하나요?' 라고 아무에게라도 물어보고 싶은 막막한 심정이었다.
그렇기에 각각의 함수에서 무엇을 input하고 무엇을 output 해야 하는지, 그렇게 하기 위해서 필요한 로직이 무엇인지를 고민하는 데 많은 시간이 들었다. 장바구니 뿐만 아니라 주문서 작성 역시 input할 데이터와 output할 데이터, 그 사이의 로직을 생각하는 데 꼬박 하루가 들어갔다.
장바구니를 담당한 프론트엔드 팀원과 필요한 정보들을 논의해서 대략적인 input과 output 요소를 구상하고, 도저히 생각나지 않는 부분들을 참고하기 위해 모티브 사이트인 배민문방구를 켜두고 개발자 도구의 network 탭에서 fetch하는 request와 response를 계속 확인해 보면서 사이트 내 요청/응답 데이터의 내용과 이동 과정을 대략적으로 확인하였다. 이 과정에서 다른 사이트들도 개발자 도구를 통해 대략적인 request와 response 내용을 확인해 보며 아, 이 사이트는 이런 식으로 요청과 응답을 설계했구나! 라는 깨달음을 얻기도 했다.
의사 코드를 작성한 뒤 실제 코드를 작성하는 단계에서는 큰 걸림 없이 작성해나갔지만, 짜놓고 보니 더 효율적인 코드가 떠올라 다 짜놓은 코드를 지워버리기도 했다. 이런 과정에서 시간이 많이 소요되어 예상했던 대로 시간 관리가 되지 않고 프로젝트 막바지에 시간이 부족했던 점이 아쉬웠다.
프론트엔드에서 필요하다고 요청한 데이터들을 응답해주는 데에 중점을 두고, 작동하는 코드를 어떻게라도 만들어내는 데 가장 높은 우선순위를 두었다. 그렇다 보니 반복문을 사용해 쿼리문을 지나치게 여러 번 호출하는 비효율적인 함수나, get으로 처리해야 하는 api를 post로 설계해 restful 하지 않은 api 설계가 되는 등 만족스럽지 않은 부분들이 눈에 보였다.
심지어 만들고 보니 같은 로직을 프론트엔드에서도 이미-더 효율적으로-구현해 놓아서, 굳이 백엔드에서 리소스를 들여 한번 더 조회할 필요가 없는 데이터들을 응답해주는 함수도 있었다.
api 작성 전 프론트엔드와 협의해 요청과 응답의 데이터 구조와 key를 정했지만, 서로 이해한 바가 달라 막상 통신을 할 때가 되자 요청하거나 응답하는 데이터의 key 이름 차이가 생겼다. 더 나아가서는 데이터 구조까지도 달라져서 급하게 함수 구조를 수정해야 하는 문제가 생기기도 했다.
이는 소통이 부족해서 생긴 문제이기도 하지만, 프론트엔드와 백엔드가 서로 상대방이 작업하고 있는 내용, 구현할 수 있는 내용에 대한 지식의 부재에서 온 것도 있다는 점을 느꼈다. 백엔드에서는 api에 요청이 오면 데이터를 응답해주고 끝나지만, 프론트엔드에서는 그 응답으로 받은 데이터를 다시 분해해 페이지에 렌더링하는 과정이 필요하다. 내 코드만 구현하면 끝이 아니라 웹 페이지의 흐름 전체를 고려하고, 왜 이런 데이터와 과정이 필요한지 서로의 작업 과정을 이해하고, 통신 과정을 적극적으로 확인하는 자세를 가져야 더 수월한 통신이 가능하겠구나 하는 깨달음을 얻었다.
또 백엔드와 프론트엔드가 동일한 기능을 구현해두어야 미리 기능별로 통신을 하며 완성도를 높일 수 있는데, 프로젝트 전체적으로 각각 작업 순서가 맞지 않아 프로젝트 도중에 통신을 충분히 해보지 못한 점도 아쉬웠다. 다음 프로젝트에서는 전체적인 프로젝트의 흐름을 고려하여 프론트-백의 작업 순서를 맞추는 과정이 꼭 필요하다고 느꼈다.
팀원들과 planning meeting 을 통해 프로젝트의 내용과 구현할 기능, 담당자를 정한 뒤, 처음부터 끝까지 협업을 통해 프로젝트를 진행하였다.
매일 오전 30분 정도의 daily standup meeting으로 각자 한 일, 오늘 할 일, blocker와 기타 건의 사항을 공유하였으며 서로의 진행 상황을 확인할 수 있도록 trello의 칸반 보드와 notion 회의록을 공유했다.
팀 프로젝트이기에 내 파트만 구현하면 끝이 아니었다. 누군가의 진행상황에 blocker가 있으면 의견을 내고, 다른 팀원의 blocker를 해결하기 위해 적극적으로 나서는 자세를 가지고 프로젝트에 임했다.
팀원들의 blocker를 해결하려고 노력하면서 타인의 코드를 읽는 경험도 자연스레 많이 하게 되어 나 자신의 성장에도 도움이 되었고, 함께 에러의 원인을 찾아 해결하거나 혼자 작성하기 복잡한 서브쿼리를 함께 작성하는 등 팀원의 코드에서 막혀있던 부분을 함께 해결한 일들이 정말 뿌듯한 경험과 성취감으로 남았다.
postman의 api 명세화 도구를 이용해 제작한 api의 request-response 명세를 팀원들과 공유하였다.
또, postman의 team workspace 기능을 이용해 백엔드 팀원들이 각자 작성한 api 예시를 한 곳에 모아 팀원 모두가 확인하고 테스트할 수 있도록 하였다.
팀 워크스페이스가 없었을 때에는 다른 팀원이 작성한 api를 테스트할 필요가 있을 때 일일이 코드를 확인하거나 api 작성자에게 "회원가입에 필요한 key가 뭐예요?" 하고 물어보는 등 비효율적인 절차를 거쳐야 했는데, 팀 워크스페이스를 사용해 보니 내가 작성한 api마냥 간단히 테스트해 볼 수 있어서 대단히 편리했다. 협업에 필요한 툴을 유용하게 사용할수록 생산성이 높아진다는 걸 뼈저리게 느꼈다.
짧은 프로젝트 기간 동안 정말 많은 것을 느꼈다. 더 깔끔하고 오류 없는 코드를 작성하고 싶었고, 더 효율적인 데이터 구조를 설계하고 싶었으나 아직 목표에 비해 내 역량이 부족하다는 것을 여실히 느낀 프로젝트였다.
2주간 프로젝트에 몰입하며 내 스스로 무언가를 만들어가는 과정에서 기능 하나하나가 구현될 때마다 즐거움과 짜릿함을 느끼기도 했고, 팀 차원에서 더 효율적인 코드, clean code를 작성해야 하는 필요성을 누가 가르쳐주지 않아도 깨닫게 되었다. 또한 코드를 작성하는 것 이상으로 팀원들과의 협업과 시간 관리가 정말 중요하다는 걸 몸으로 체감했기에, 다음 프로젝트에서는 project manager 역할에 자원해서 팀원들간의 작업내용을 조율해보고 싶기도 하다.
다음 2차 프로젝트에는 또 얼마나 힘들고 뿌듯한 순간들이 기다리고 있을지 벌써 기대된다. 화이팅!!