서론
팀 구성
3학년 2학기, 12주 수업이 모두 끝나고 과에서 진행하는 P프로젝트를 시작하게 되었다.
누구와 팀을 해야되지 정말 많은 고민이 있던 중, Leets 동아리도 같이 하고있고 평소에 잘알던 승현이와 팀을 꾸리게 되었다.
나와 승현이가 백엔드였기에 P-프로젝트 팀은 프론트 2분을 추가로 구해서, 우리는 총 프론트 2명 + 백엔드 2명으로
4명의 팀 구성을 완료하게 되었다.
하지만 프론트 팀원 1명은 백엔드 경험만 있었고 이번 프로젝트에서 프론트를 처음 맡았었고, 다른 프론트 팀원인 현지는 처음 개발 프로젝트를 하는 것이였기 때문에 팀 구성때부터 완성은 할 수 있을까 ? 라는 걱정이 많았던 것은 사실이였다.
본론
초기 진행사항
AI와 관련해서 자신이 있던 사람도 없었고, 팀원 모두와 협의한 결과 클라우드 분야로 결정을 했고 분야가 결정된 뒤에는 바로 아이데이션을 진행해서 프로젝트 주제를 선정하게 되었다.
투표결과 팝업스토어 정보공유 서비스와 가천대 중고거래 서비스가 투표수 3개 동률로 선택되었으며 둘중에서 팀원들과 협의를 통해 최종적으로 우리는 가천대 중고거래 서비스라는 주제로 P-프로젝트를 진행하기로 했다.
아이데이션을 한 뒤에는 다같이 대면회의를 통해 프로젝트의 차별성과 추진 배경 및 목표에 대해서 회의를 해보는 시간을 가졌었다
먼저 나온 얘기는 프로젝트의 방향성이였다. 우리는 가천대학교 학생들을 위한 차별화된 중고거래 서비스를 만들고 싶었고, 따라서 전국 대상이 아닌 가천대학교 학생을 위한 중고거래 플랫폼을 개발해야된다는 측면에 초점을 맞추게되었다.
생활비 부담이 큰 대학생들에게 경제적 부담을 줄여주고, 비슷한 관심사를 가진 대학생들을 대상으로 하는 중고거래 플랫폼. 그것이 우리의 목표였다
추가로 나온 얘기는 신뢰성 문제였다. 기존 에브리타임이라는 강력한? 중고거래 서비스의 단점을 분석한 결과, " 에브리타임은 익명 기반이기 때문에 거래 상대방의 신뢰도를 얻을 수 없습니다. 따라서 거래 상대방이 교내 학생인지, 신뢰할 수 있는 사람인지 알 수 없어 사기 위험이 존재할 수 있습니다 " 라는 내용으로 해당 부분을 보완하여 학생 인증을 확실하게 받을 수 있는 서비스를 개발하자는 의견 또한 있었다.
우리는 3주라는 짧은 개발 기간에 맞춰서 사진처럼 해당 기능들로 MVP를 설정하였고,
개발,테스트 14일 + 도메인 연결 2일 + 리팩토링 5일의 개발 계획을 설정하여 리팩토링 기간 동안 기존 코드들의 유지보수를 진행하고 추가할 만한 기능이 있다면 해당 기간내에 추가하도록 회의를 끝내고 개발을 시작하였다
중후반 진행사항
난 사진에 나와있는 기능들의 개발을 맡았고, 내가 담당했던 기능들 중에서 가장 핵심 기능은 CICD 구축이랑 서버 배포, oauth를 통한 구글 로그인, 몽고db와 redis를 이용한 실시간 채팅 구현 정도였던거같다.
채팅 기능을 제외하고 다른 기능들은 전에 Leets 동아리에 있었을때 한번씩 해봤던 내용들이였기에 그렇게 오랜 시간이 걸리지 않았었다. 실제로 CICD 구축 + 서버배포 + 각종 config 설정 + JWT 토큰 인증 + S3 설정 + oauth 로그인 회원가입 + 프로필 관련 기능 등등의 기능들은 일주일도 걸리지않아 개발을 완료했었다.
하지만 oauth 로그인 회원가입에서 API 연결을 진행하며, 프론트측에서 막혀 해당 트러블 슈팅을 도와주며 시간과 멘탈이 많이 소모됐었고, 채팅 기능도 예정보다 꽤 많은 시간과 노력이 걸려 많이 힘들었었다....🥺
이 글을 보는 누군가는 우리와 같은 실수를 반복하지 않았으면 좋겠고, 불필요한 시간을 절약했으면 좋겠다라는 생각에 해당 내용은 다음 트러블 슈팅에서 자세히 공유해보려고 한다.
트러블 슈팅
ouath 관련 트러블 슈팅 내용에 대해서 얘기해보겠다.
먼저 내가 설계하여 생각했던 ouath 구글 로그인 회원가입 로직은 아래와 같았었다
- 로그인 버튼 클릭
- 프론트 쪽 url로 요청을 보냄 (https://accounts.google.com/o/oauth2/v2/auth?response_type=code& client_id=779895762817-l1e013ot6dc632aru1sph2verrdjs6rc.apps.googleusercontent.com& redirect_uri=http://프론트 주소/oauth/google/callback& scope=openid%20profile%20email& access_type=offline)
- 리다이렉트 url도 프론트 주소로 보냄 http://프론트 주소/oauth/google/callback
- code 값을 추출해서 로그인 Api 주소로 보내준다 http://백엔드 주소/api/v1/users/login get 메서드로
- 로그인 성공 응답 + 토큰 발급 로직을 백엔드에서 처리 후 프론트로 보내줌
하지만 프론트 측에서는 계속 401 오류가 발생하고 있는 상태였었고, 백엔드 측 서버 로그에서는 아래처럼 Authentication failed Full authentication is required to access this resource 오류가 발생하는 상태였었다
/favicon.ico의 경로와 관련이 없는 오류인것을 알고있었지만 해당 url도 permitall로 열어보는것도 해봤었고, 문제가 없었던 URL도 수정도 해보면서 로컬에서 테스트, 배포된 서버에서 테스트를 반복하며 트러블 슈팅을 하고있던중.....
프론트 측에서 별도의 구글 api 콘솔을 만들어서 백엔드 + 프론트 총 2개의 api 콘솔으로 진행하고 있었어서, 두개의 콘솔에서 각각의 클라이언트 id와 비밀번호를 가지고 있어서 해당 오류가 발생했던 것이였다 ㅠㅠ
프론트에도 생성되었던 구글 클라우드 콘솔을 삭제하고 난뒤에, 클라이언트 아이디와 비밀번호를 통일하여 다시 응답을 보내니 서버와 프론트 측에서 모두 200 성공 응답이 떴다 🫠
느낀점
먼저 첫번째로 3주의 개발기간이 너무나 짧다고 느껴졌다.
3주라는 기간동안 중간발표 최종발표를 준비하며 만든 ppt 약 50장 정도 + 80페이지 정도의 설계서를 작성하면서,
동시에 개발을 진행하는 것이 쉽지는 않다고 느껴졌었다...
하지만 다른 팀도 똑같은 기간에 똑같은 구조로 진행했던 내용이였기에, P프로젝트 시스템 자체에 대한 피드백이기라기 보다는, 오히려 우리가 좀 더 일찍 기획 회의를 한 뒤에, 피그마를 통해 와이어프레임을 미리 완성 해놓고 개발을 시작했으면 어땠을까? 라는 아쉬움 정도가 있었던같다.
두번째로는 결과론적이지만 아이디어가 아쉬웠다고 생각한다.
프로젝트를 시작할때 아이데이션을 할떄는 몰랐었지만, 중후반 교수님과 면담을 하며 느꼈던 것은 교수님이 아이디어를 정말 중요시 생각한다는 점이였다. 교수님이 초반 OT때나 첫 면담때 강하게 얘기해주셨으면 좋았겠다라는 생각도 들었는데, 왜냐면 아이디어는 초반에 정해지면 바꾸는 것이 어렵기때문에 기능적인 측면으로 커버가 어렵다고 생각했기때문이다 하지만 교수님을 탓하고싶진 않고 매년 나오고 흔하게 생각할 수 있는 중고거래라는 서비스를 주제를 선정했던 우리의 책임이 당연히 제일 크다고 생각한다.
세번째로는 트러블 슈팅에 대한 아쉬움이였다.
중고거래 서비스라는 아이디어 대해 지속적으로 차별성을 요구하셨던 교수님이셨기에, 그 요구에 맞을만한 획기적인 기능들에 우리가 시간 투자를 많이할 수 있었다면 어땠을까 ? 라는 생각에 연장선으로 트러블 슈팅에 시간이 오래 뺏긴것이 정말 너무너무 아쉬웠다...
사실 oauth 구글 로그인 회원가입 api 연결을 맡아주신 프론트 분의 잘못이라고는 생각하지않고 내가 좀 더 자세히 문서화를 해주고 설명을 해줬어야 됐다고 생각한다. 명세서에 친절히 설명해주긴 했었지만 조금 더 자세히
마무리로, 서두에도 적었듯이 정말 완성하는거 자체가 쉽지않았던 팀이였다고 생각하는데, 그래도 기간내에 모든 기능을 완성했다는거 자체에 의의를 두고싶고, 추가로 끝까지 포기하지않고 열심히 해준 팀원들에게 너무너무 고마웠고 나 스스로도 성장할 수 있었던 좋은 경험이라고 생각한다.
참고한 자료
https://velog.io/@049494/구글-로그인
https://velog.io/@mjk8087/OAuth-2.0-html-%EC%BD%94%EB%93%9C-%EC%9D%91%EB%8B%B5