실전 프로젝트 1 - API 설계
https://www.notion.so/S-1-SA-4b46f3f1babc4d55a9072bc427ed09b2
S반 실전프로젝트 챌린지 1조 SA
5. Tasks
www.notion.so
<노션>
캠프 기간동안 고민되는 문제가 있으면 편하게 이야기하고 의견을 주고받을 수 있는 사람들과 같은 조가 되었다. 캠프 운영진도 이번 팀원들이 소규모로 스터디를 진행하는 것을 알았는지 같은 조에 배정되게끔 배려를 해준 것 같다. 모든 팀원 중에서 본인이 가장 부족하다고 느끼기에 많이 노력해야겠다는 생각도 들지만, 같이 공부하고 프로젝트를 진행하면서 옆에서 많이 보고 배울 수 있을 것 같다는 생각도 든다. 무엇보다 진짜 재미있고 성취감있는 프로젝트를 만들어 나가는 게 팀원들의 공통적인 목표이기 때문에 열심히 달려보고 싶다.
해결해보고자 하는 것
개인적으로 부가적인 기능과 DB에 대한 이해가 부족하다고 느끼고 있다. 인프라를 활용하는 방법들을 최대한 익혀보고 DB에서 발생할 수 있는 문제점들. 그리고 어떤 코드가 좋은 코드인지에 대한 토론을 많이 하면서 프로젝트가 진행되었으면 좋겠다. 아무래도 서비스적인 완성도보다는 기술적인 고민들이 필요한 팀이기에 동시성 문제, 대용량 트래픽, 캐싱, DB부하에 대해서 고민해보고 해결하는 프로젝트로 진행하고 싶다.
개인적으로 도전해보고 싶은 것
코드를 잘 작성하는 것과 좋은 프로그래밍은 꽤 다른 영역이라고 생각한다. 설계를 하고 이를 서비스하는 과정까지 진행해봄으로써 다양한 아키텍처들이 생겨난 이유와 그 원리에 대해서 가능하다면 익혀보고 싶다. 무엇보다 말로만 듣던 MSA에 대해서 직접 부딪혀보고 MSA가 가질 수 있는 이점들을 알아보고 이를 적용하는 시간이 되었으면 좋겠다.
고민 점
일반, 경매, 선착순에 따른 결제를 타입으로 분류하여 결제 테이블에 필드로 추가했었는데 해당 결제 API를 작성하면서 "/payment/type/{type}/product/{productId}" 인지, 아니면 "/payment/product/{productId}/type/{type}"인지에 대한 토론이 있었다. 한 팀원분은 어쨌든 상품에 대한 설명이니까 product가 먼저 적히고 이후에 type이 있어야한다고 의견을 제시하였고, 이에 대해 나는 type의 종속성이 product 자체에 있는 게 아니라 특정 이벤트를 타고 들어온 결제에 있기 때문에 type이 먼저 있어야하지 않을까 하는 의견을 제시하였다. 각자의 의견들에 대해 합리성을 이야기하는 과정에서 어쩌면 REST Api를 지향하는 현 프로젝트에서 product에 대한 추가적인 설명인 type이 URI에 적혀 있는게 미스가 아닐까 하는 의견이 나왔다. 해당 의견을 기반으로 설계에 문제가 있다는 점을 팀원들이 인지하였고 이를 바탕으로 결제 테이블의 타입 필드를 상품 테이블로 옮기는 과정이 발생하였다. 따라서 URI도 "/payment/product/{productId}"로 수정하여 API를 작성할 수 있었다. 이런 의사소통 과정에서 타인의 의견을 들어보고 그에 따라 내 의견을 제시하거나 동의하는 것은 꽤 재밌는 것 같다. 나와 다른 의견이 있을 때 그 의견의 합리성을 판단하고 설득되거나, 설득하는 과정은 논리성에도 큰 도움이 되는 듯 하다. 무엇보다 팀원들 간의 의견을 교환하는 데 있어 거부감 없이 열려있는 분위기인게 정말 마음에 든다.