프로젝트 시작
개인 프로젝트는 많이 했는데, 디자인이 타 플랫폼에 비해 매력적이지 않은 것 같아 팀원을 구하기로 결정했다. 운좋게 디자인, 퍼블, 프론트까지 다 할 수 있는 능력자분을 만나 2명이서 프로젝트를 진행하게 되었다.
요구 분석과 설득의 과정
사람들이 의견을 공유하고 투표할 수 있는 사이트를 만들기로 결정하고 구글 드라이브에 그림을 그려가며 기능 및 요구 분석을 하였다.
보여주는 데이터나 화면의 동작 방식에 대해서 쉽게 결정이 난 것도 있지만, 의견 차이가 좁혀지지 않아 2시간을 넘게 얘기한 적도 있었다. 개인 프로젝트에만 익숙한 나에게 이렇게 누군가를 설득을 하고 설득을 당하는 과정이 힘이 드는 과정이었지만, 좋은 서비스를 오픈하기 위한 하나의 필수 과정이라는 생각이 들었다. 기능의 컨셉이나 의도, 기능에 대해서 명확히 하고, 팀원이 어떤 생각을 가지고 있는지를 이해하는 과정이었다.
처음으로 프로젝트를 하면서 협업툴(콜라비)를 이용하였다.
테이블 분석
ERD를 만들어 팀원에게 설명하는 과정을 가졌고 덕분에 프로젝트 중간에 큰 수정없이 프로젝트를 마칠 수 있었다. 또 한 badge라던지, point_history 테이블같은 경우는 추후의 확장 가능성을 고려해서 설계하였다. 긴 요구 분석 시간이 테이블 분석에 많은 도움을 주었다.
API문서화
이전에 개인 프로젝트를 진행할 때는 Spring docs를 이용하였는데, 이번에는 포스트맨의 문서화 기능을 이용하였다.
JWT토큰 구현
이번 프로젝트를 진행하면서 가장 힘들고 오래걸렸던 부분이었다. Spring-React 협업이 처음이기도 하고, JWT토큰 구현이 처음이었다. 프론트 하시는 분도 경험이 없다보니 서로 이것저것 삽질을 많이 했다. 평소에 하던 Session으로 구현할까 했지만 다음과 같은 이유로 JWT토큰을 이용했다.
1. REST API기반의 프로젝트로 HTTP의 특징(무상태성과 비연결성)을 갖는다.
2. 반응형 웹 서비스로 모바일과 컴퓨터 모두 이용이 가능하다. 만약 Session 기반으로 서비스를 운영하게 되면 더 많은 서버 리소스를 사용하게 된다.
3. 서버의 확장에 유리하다.
다음은 JWT토큰을 구현하는 구조도이다. 프론트에서 할 일은 3번까지이다. 그런데 팀원분이 구현을 6번까지 구현해놓으셨다. 이렇게 되면 유저의 정보를 프론트에서 직접 받아서 백엔드 서버로 주는 형태가 되어버린다. 이때의 문제점은 다음과 같다.
1. 인가 코드보다 사용자의 정보가 전송해야 할 데이터가 많다.
2. 보안이 더 취약하다.
이러한 점들을 잘 설명해 팀원분에게 인가 코드를 전달해달라고 요청하였다. 인가 코드를 전달 받고 구글 서버에 사용자 정보를 요청하는 과정이 잘 이해가 안되어 처음에 많이 헤맸던 것 같다. 구글에서 프론트엔드측으로 전달한 이 인가 코드는 구글 서버에게 사용자 정보를 요청할 수 있는 보안패스워드와 같다. 이를 구글 서버에 전달하면 구글 서버는 유효성을 판단하여 백엔드 서버로 사용자 정보를 전달하게 된다. 이 때 Redirect Url이라는 정보가 요청되는데 이 때, 스프링 설정 파일에 적힌 google redirect url과 구글 클라우드 플랫폼에 적힌 redirect url이 동일해야 한다.
CORS
서로 다른 플랫폼에서 서로의 데이터를 주고 받는 것을 의미하는데, 이 CORS덕분에 서로 다른 플랫폼에서 데이터를 주고 받을 때 안전한 요청과 응답을 할 수 있게 된다. 하지만 이렇게 안전한 요청과 응답을 주고 받게 하기 위해 엄한 정책이 요구된다.
1. 통신할 다른 플랫폼이 안전하다는 것을 알려주어야 한다.
2. 접근할 수 있는 Header가 정해져 있다. 따라서 토큰과 같은 추가적인 정보를 받기 위해서는 추가 설정이 필요하다.
3. GET, HEAD, POST 요청만 가능하다. 그런데 REST API에서는 HTTP Method로 행위를 표현하기 때문에 추가 설정이 필요하다.
Https 설정
http는 보안에 취약하기 때문에 https를 이용해야 한다. 이를 위해 AWS에서 제공하는 라우트와 로드 밸런스를 이용하였다.
서비스 오픈
11월 12일 서비스를 오픈하며 약 2달간의 프로젝트가 끝이 났다. 추후에 알림 기능, 포인트 투자 기능 등을 추가할 예정이지만 일단 사용자의 피드백을 받으며 추후 개발 방향을 잡기로 하였다. 배포는 여러번 하였지만, 실제로 사용자를 두고 서비스를 운영하는 것이 처음이라 그런지 사용자가 많지도 않은데 큰 부담감을 느끼고 있다.
운좋게 팀원을 정말 잘 만난 것 같다. 의견 대립도 많았지만 서로 설득하려는 과정이 있었고, 서로 모르고 부족한 점은 머리를 맞대고 해결하는 과정이 있었다. 최근 열심히 하고 조그만하게 이루어낸 성과도 있지만 자축을 해본적이 없는데, 팀원의 말에 열심히 살고 있는 나를 칭찬하는 일도 중요하다라는 생각이 든 하루였다.
서비스 홍보
1. 코카 콜라와 펩시중 어떤 것이 더 좋으신가요?
2. 대학교는 꼭 가야하는 건가요?
이처럼 웹 사이트 'Vote'는사용자들이 의견 주제를 올리고 이에 대해 투표하고 토론할 수 있는 플랫폼입니다. 다들 와서 한 번 구경하고 가세요.
2022/02/05 현재 비용문제로 운영중이지 않습니다.