항해99 7주차 WIL - MVP

Ming-Gry·2022년 11월 8일
1

항해99 WIL

목록 보기
7/12
post-thumbnail

역시나 내 블로그는 한발 늦게 작성 됐다... 항해 과정 중에는 정말이지 너무 바빠서 내 입맛에 맞도록 블로그를 작성할 수가 없다. 내가 충분히 이해가 된 상태에서 최대한 심도있게 남이 볼 수 있을만큼 작성해야된다고 생각하기 때문이다.

어쨌든 클론 프로젝트를 하며 느낀 점을 얘기해보고자 한다.

이번 프로젝트는 클론 프로젝트로, 뜻하지 않게 팀장을 맡게 되었다...... 왜 내가 팀장이 된지는 잘 모르겠지만 근데 진짜 이상하다 대학교때도 난 조장을 놓친 적이 한 번도 없다 팀장으로서 그리고 팀원으로서 잘한 점과 못한 점에 대해 얘기해보고자 한다.

잘했던 점

먼저 조원으로서 잘했던 점에 대해 얘기해보고자 한다. 사실 이런 프로젝트도 경험이 적은데 개발자로서의 팀장은 처음이라 잘했던 점보다는 아쉬웠던 점이 더 크게 와닿았고 팀원들에게 정말 미안했다.

카카오 로그인과 카카오 페이 기능

Oauth2 를 이용한 카카오 로그인 기능은 항해 측에서 제공하는 기본 강의에 들어있었으나 이에 성공한 팀이 단 한 팀도 없었다. 그러나 일주일 내내 이 기능에 메달린 결과, 프론트 부조장과 내가 힘을 합쳐 카카오 로그인 기능에 성공할 수 있었다.

카카오 페이 또한 카카오 로그인 기능에서 일부만 고쳐서 백엔드에서는 이에 성공할 수 있었다. Postman 테스트에서는 아주 정상적으로 작동했다. 그러나 과정 자체가 카카오 로그인 보다는 조금 더 복잡했기 때문에 시간 상의 문제로 프론트엔드 와의 통신에는 실패할 수밖에 없었다.

카카오 로그인은 최대한 서버에서 프론트엔드의 손이 덜 가도록 만들 수 있었으나, 카카오 페이는 그게 쉽지 않았다. 물론 실전 프로젝트에서는 그 문제를 일부 해결했으나, 역시나 시간 문제로 프론트엔드와 연결을 해보지는 못했다.

카카오 페이 API 의 대략적인 도식은 아래와 같다.

빨간 색으로 처리된 부분이 프론트엔드에서 해줬어야 하는 부분인데 충분히 서버에서도 해줄 수 있는 부분이라고 생각됐기 때문이다. 나의 최종적인 목표는 아래와 같았다. 결국엔 시간 부족 문제로 실패했지만, 실전 프로젝트에서는 백엔드 쪽에선 아래의 최종 목표에는 성공했다. 역시나 프론트엔드에서 처리가 되진 않았지만ㅠㅠ

백엔드에서 프론트엔드에 url 을 전달하면 브라우저에 그 url 로 리다이렉트를 시켜주는 것이 아니라 백엔드에서 리다이렉트를 바로 띄워주어 서버로 바로 정보를 전달받도록 하는 것이다. 그렇게 되면 프론트엔드에서 처리해줘야 할 지점이 굉장히 줄어들 수 있다. 어쨌든 그 부분은 구현하지 못했다.

최종 목표에는 도달하지 못했지만 어찌됐든 백엔드에서 굴러가기는 하는 카카오 페이 기능을 만들고 Postman 테스트에는 성공하긴 했다. 하지만 프론트엔드와의 연결을 하지 못해 정말 아쉬웠다. 그럼에도 불구하고 카카오 로그인에는 성공했기 때문에 그 선에서 팀원들 모두 만족할 수 있었다.

코드를 남기자니 너무 복잡해서 이에 대한 설명은 다른 포스팅으로 남기도록 하고, 깃허브 주소를 남기도록 하겠다.

코딩 갤럭시 클론 프로젝트 : https://github.com/HangHae99-Clone-Coding-Galaxy/BE

예외처리

이에 대한 자세한 포스팅은 나중에 하겠지만, 어쨌든 다른 팀에서는 소홀했던 예외처리에 대한 부분을 챙길 수 있었던 점이 잘한 점이라 할 수 있겠다. 특히나 예외처리를 할 수 있는 방법이 꽤나 여러가지가 있을 수 있다는 점은 배울 수 있었다.

우리가 배웠던 예외처리는 각 예외 별 Class 를 만들고 그 Class 들을 하나의 패키지로 묶어서 정리하는 방법이었는데, 나는 이 방법이 패키지를 열어서 Class 하나 하나 다 뜯어봐야 한다는 점이 굉장히 맘에 안들었다. 그래서 InnerClass 를 사용해 하나의 Exception Class 를 만들고 그 안에 Custom Class 를 사용해 예외 처리를 사용했다.

어쨌든 이에 대한 포스팅도 최종 실전 프로젝트에 대한 포스팅을 하면서 남겨놓도록 하겠다. 자세한 코드는 위의 깃허브 링크에 나와있다.

아쉬웠던 점

사실 이번 프로젝트 WIL 에서 가장 하고 싶었던 포스팅은 바로 MVP 에 대한 내용이다. 물론 나도 이에 대한 중요성은 익히 들어 알고는 있었지만 어떻게 실행하는 지에 대한 내용은 사실 잘 몰랐다. 그러나 이번 프로젝트를 하며 정말 뼈저리게 느끼고 후회했다. 물론 내가 하고 싶어 한 팀장은 아니었으나, 어쨌든 팀장이라는 직책을 맡은 자로서 팀원들에게 제대로 된 길을 제시해주지 못했다는게 정말 후회스럽고 미안했다. 그래서 이에 대한 내용을 적어보고자 한다.

MVP

구글에 MVP 라는 키워드를 검색해보면 Most Valuable Player 가 가장 상단에 뜰 것 같지만 의외로 Minimum Viable Product 가 가장 먼저 나온다. 한글로는 최소 기능 제품이라는 뜻인데, 검색 결과를 보면 이에 대해 정말 많고 다양한 방법론들이 나온다.

그 방법론들 모두 뛰어난 사람들이 오랫동안 집약시켜 놓은 방법이겠지만, 사실 와닿지가 않는다. 내가 느끼기에 개발 프로젝트에 필요한 MVP 라 함은 처음부터 어렵고 복잡한 기능에 초점을 맞추기 보단 일단 굴러가게 만들어야 한다 라고 생각한다.

우리가 만들고자 했던 클론 프로젝트의 주제는 코딩 강좌 사이트인 '코딩 애플' 이었다. 그래서 우리가 만들고자 했던 기능은 아래와 같다.

클론코딩 SA - 코딩갤럭시 : https://time-helicona-5e0.notion.site/6-SA-c02a0e2736ed42128c530350b1c4d153

프로젝트 당시에 썼던 노션 페이지 그대로 가져왔다. 지금보니 저게 기본 CRUD 인가? 라는 생각이 들 정도로 MVP 에 무지했던 것 같다. 이제 와서 저 기능들을 MVP 로 순으로 개발에 들어갈꺼라고 하면 다음과 같을 것이다. 가장 위에 있는 것부터 개발하는 것으로 나열하겠다.

  • 기본 기능
  1. SpringSecurity 기본 로그인
  2. 마이 페이지 - 닉네임 변경
  3. 강의 게시판
  4. 리뷰 및 별점

  • 추가 기능
  1. 마이 페이지 - 프로필 사진 변경, 내 리뷰 보기
  2. 강의 게시판 - 썸네일 및 영상 업로드
  3. 리뷰 및 별점 - Pagination
  4. 강의 검색 기능

  • Challenge 기능
  1. 카카오 로그인
  2. 카카오 페이 결제 기능 (Mock-up API 사용)
  3. 강의 게시판 - 결제 여부에 따라 강의 Open / Close

조금은 MVP 스러운 개발을 할 수 있을 것처럼 보이지 않는가? 기본 기능만으로도 영상은 없지만 줄글 형태로 강의를 볼 수 있으며, 리뷰 및 별점까지 쓸 수 있는 강의 게시판 형태의 사이트가 완성될 것이다.

그 이후 추가 기능으로 보면 내 리뷰 보기와 Pagination, 강의 검색 기능을 추가해 사용자 편의성을 높일 수 있도록 한 것을 볼 수 있다. 특히 단순 게시판 형태에서 사진과 영상까지 포함된 게시판으로 업그레이드 된 것을 확인할 수 있을 것이다.

그리고 나서야 최종적으로 카카오 로그인 기능과 Mock-up API 를 활용한 카카오 페이 결제 기능을 통해 결제 여부에 따라 유료 강의가 Open 되는 형식으로 기능이 업그레이드 되는 것을 볼 수 있다.

위의 사진처럼 로그인 기능, 마이 페이지, 강의, 결제 기능을 모두 완성시킨 뒤 이어 붙이는게 아니라 조금씩 기능을 향상시켜 나가는 것이다. 바퀴, 차체, 구동부를 모두 완성 시킨 하나의 자동차를 만드는게 아니라 처음엔 킥보드, 자전거, 자동차의 형태로 진화시켜 나가는 것처럼 말이다.

이것이 내가 깨달은 MVP 이며, 실전 프로젝트에서 조장을 맡게된 이유와도 같다. 이번 프로젝트에서는 타의로 조장이 되었으나, 덕분에 내가 깨달은 바가 있고 이에 다음 프로젝트에서는 똑같은 실수를 반복하지 않고 프로젝트를 충분히 잘 이끌 수 있다는 자신감이 생겼기 때문이다.

프론트엔드의 고충

이번 프로젝트를 하면서 깨닫게 된 것이 또 있다면 프론트엔드가 정말 개발하기 어렵다는 것을 깨달았다. 난 물론 백엔드 개발자 이지만, 왜 이렇게 개발 속도가 더딘가를 생각할 겨를이 없을 정도로 그냥 옆에서 보기만 해도 그들의 고충이 느껴진다.

가뜩이나 디자이너도 없는 상태에서 와이어프레임과 CSS 를 잡고 기능 개발까지 해야되는 상황에 깊이 공감할 수 있었다. 솔직히 백엔드 코드야 한 번 잘 짜놓으면 다른 프로젝트에서도 얼마든지 활용이 가능한데, 프론트엔드는 그게 힘들다는 생각이 들었다. 서비스 별로, 하다 못해 같은 서비스의 페이지 하나도 서로 다르기 때문이다.

물론 백엔드도 SQL, AWS, CI/CD, SSL, NginX 등 할 것도 많고 러닝 커브도 높지만 정말 한 번 제대로 이해하고 넘어가면 이만큼 쉬울 수가 없다고 생각하기 때문이다.

어쨌든 프로젝트를 어떻게 끌어야 되며, 어떻게 소통하고 같은 팀원을 이해할 수 있었던, 그리고 실제로 이를 체득하는 시간이었던 뜻 깊은 시간이었다.

profile
항상 진심이지만 뭔가 안풀리는 개발 (주의! - 코린이가 배우고 이해한 내용을 끄적이는 공간이므로 실제 개념과 일부 다를 수 있음!)

0개의 댓글