베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • dfs
    • java
    • 스프링
    • 스레드
    • 토비스프링
    • 알고리즘
    • 이펙티브자바
    • 자바
    • Spring
    • C++
    • 데이터베이스
    • jpa
    • 백준
    • 함수형인터페이스
    • BFS
    • 운영체제
    • 코드업
    • 자바8
    • leetcode
    • 스프링시큐리티

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    [회고록] 서비스 오픈 회고
    프로젝트 기록

    [회고록] 서비스 오픈 회고

    2022. 11. 14. 01:13

    프로젝트 시작

    개인 프로젝트는 많이 했는데, 디자인이 타 플랫폼에 비해 매력적이지 않은 것 같아 팀원을 구하기로 결정했다. 운좋게 디자인, 퍼블, 프론트까지 다 할 수 있는 능력자분을 만나 2명이서 프로젝트를 진행하게 되었다. 

     

    요구 분석과 설득의 과정

    사람들이 의견을 공유하고 투표할 수 있는 사이트를 만들기로 결정하고 구글 드라이브에 그림을 그려가며 기능 및 요구 분석을 하였다. 

    요구 분석 예시
    의견에 대한 피드백

    보여주는 데이터나 화면의 동작 방식에 대해서 쉽게 결정이 난 것도 있지만, 의견 차이가 좁혀지지 않아 2시간을 넘게 얘기한 적도 있었다. 개인 프로젝트에만 익숙한 나에게 이렇게 누군가를 설득을 하고 설득을 당하는 과정이 힘이 드는 과정이었지만,  좋은 서비스를 오픈하기 위한 하나의 필수 과정이라는 생각이 들었다. 기능의 컨셉이나 의도, 기능에 대해서 명확히 하고, 팀원이 어떤 생각을 가지고 있는지를 이해하는 과정이었다. 

     

    처음으로 프로젝트를 하면서 협업툴(콜라비)를 이용하였다. 

    콜라비 칸반

     

    테이블 분석

    ERD를 만들어 팀원에게 설명하는 과정을 가졌고 덕분에 프로젝트 중간에 큰 수정없이 프로젝트를 마칠 수 있었다. 또 한 badge라던지, point_history 테이블같은 경우는 추후의 확장 가능성을 고려해서 설계하였다. 긴 요구 분석 시간이 테이블 분석에 많은 도움을 주었다.

    ERD

     

    API문서화

       이전에 개인 프로젝트를 진행할 때는 Spring docs를 이용하였는데, 이번에는 포스트맨의 문서화 기능을 이용하였다.

    포스트맨 api 문서화 예시

     

    JWT토큰 구현

       이번 프로젝트를 진행하면서 가장 힘들고 오래걸렸던 부분이었다. Spring-React 협업이 처음이기도 하고, JWT토큰 구현이 처음이었다. 프론트 하시는 분도 경험이 없다보니 서로 이것저것 삽질을 많이 했다. 평소에 하던 Session으로 구현할까 했지만 다음과 같은 이유로 JWT토큰을 이용했다. 

    1. REST API기반의 프로젝트로 HTTP의 특징(무상태성과 비연결성)을 갖는다.

    2. 반응형 웹 서비스로 모바일과 컴퓨터 모두 이용이 가능하다. 만약 Session 기반으로 서비스를 운영하게 되면 더 많은 서버 리소스를 사용하게 된다.

    3. 서버의 확장에 유리하다. 

    JWT토큰과 OAuth2를 이용한 로그인 기능 구조

    다음은 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 현재 비용문제로 운영중이지 않습니다.

    https://www.voteofficial.com

     

    VOTE

    Vote & Debate Community

    www.voteofficial.com

    저작자표시 비영리 변경금지 (새창열림)
      '프로젝트 기록' 카테고리의 다른 글
      • [Debug] JWT토큰 디버그
      • [리팩토링] Pageable을 이용한 페이징
      • [TDD] TDD 회고
      • [리팩토링] 일급 컬렉션
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바