[프로젝트 회고] 경상국립대학교 온라인 롤링 페이퍼 서비스, GNU-MAS Tree

2022. 12. 30. 18:00나는 이렇게 개발한다/Projects

백엔드 개발자의 길을 걷고 나서 맞닥드린 첫 팀 프로젝트인 '내 트리를 꾸며줘' 클론 코딩
아쉬운 점도 크고 부족한 점도 많았지만, 2주 안에 기획한 모든 사항들을 완벽하게 구현했던 프로젝트 회고를 해보고자 한다.

본 회고는 KPT 방법론 회고 방식에 따라 작성하였습니다.

GNU-MAS Tree 프로젝트 회고


온라인 롤링 페이퍼 서비스 내 트리를 꾸며줘! 를 모티브하여 클론코딩 프로젝트를 진행함.

Intro

Project

I. 프로젝트 소개

경상국립대학교 온라인 롤링 페이퍼 서비스, GNU-MAS Tree

  • 다른 학우의 트리에 장식품(메시지)를 달 수 있습니다.
  • 웹메일 인증을 받은 경상국립대학교 학생만 서비스 이용이 가능합니다.
  • 12월 25일(크리스마스 당일)에 메시지를 확인할 수 있습니다.

II. 사용 스택

COMMON

  • Notion, Github, Figjam, Slack, Inkscape

FRONT

  • TypeScript, React, Vite, Yarn ,Chakra UI, React Router v6, React Hook Form, Jotai

BACK

  • Node.js, Express, MySQL2, JWT, Nodemailer, Bcrypt

DEPLOY

  • EC2, Route 53, RDS, Nginx, CloudWatch, AWS Chatbot, AWS SNS, Pm2

III. 시스템 아키텍처

IV. 플로우 차트

KPT


Keep

  • 2주라는 짧은 개발 기간이였지만, 과하지 않은 초기 계획 설정으로 모든 기능들을 구현하는데 성공

  • 협업툴(노션)을 사용해 프론트엔드 팀원과 소통

    • 요구사항 정의서 작성

    • 용어 정리를 확실히 해서 헷갈리는 개념들을 확실히 정리

      • 사용자 닉네임 ≠ 장식품 생성자 닉네임
      • 장식품 조회 → 장식품 생성자 닉네임 + 이미지
      • 장식품 상세 조회 → 장식품 생성자 닉네임 + 이미지 + 메시지(12/25 00:00:00 이후)
  • 도메인 별로 패키지를 구성

Problem

  • 취약한 보안점
    • 내가 프로젝트를 위해 사용했던 jwtcookie는 보안적으로 취약했다.
  • AWS
    • 얕은 지식으로 AWS EC2(Linux)에 직접 접속해 관리를 하려고 하니, 이슈가 터졌을 때 막히는 부분이 많았다.
  • 프록시 서버 이해도 부족으로 일어난 이슈
    • 기존에 프로젝트를 배포할 때, 프론트와 백엔드 서버를 각각 다른 도메인으로 배포했었는데 cors 이슈로 상당히 애를 먹었다.
    • 그래서, 결국 프론트엔드와 백엔드 서버를 하나의 클라우드 컴퓨터에서 돌리기로 결정
    • 프론트엔드와 백엔드 서버를 동시에 하나의 ec2 서버에서 돌리기 위해 프록시 서버 설정을 해주어야 했음
      • 프론트엔드는 https 기본 포트인 443, 백엔드는 3000번 포트로 연결
    • 하지만, 관련 개념이 부족해서 conf 파일을 수정하는데 상당히 애를 먹었다.

Try

  • 보안 공부를 철저히 해서 웹사이트 보안 강화해보기
    • 새로운 기술을 적용시켜 보기 전에, 그 기술에 대해서 자세히 공부해본 뒤에 적용시켜야겠다.
    • jwt는 한번 발급된 토큰은 값을 수정하거나 폐기가 불가하다는 특징이 있으므로 중간중간 토큰을 재발행하도록 해야한다.
      • 다음부터는 OAuth를 적극적으로 활용해보자.
    • 클라이언트에서 동작되는 쿠키는 암호화 등의 문제를 비롯하여 그 구조상 클라이언트 측에서의 조작으로 인한 문제점이 있다.
    • 악성 사용자가 게시글에 스크립트를 작성하는걸 막기 위해, 게시글 등록 전에 적절한 검사가 이루어져야 한다.
  • Linux, 클라우드 서비스(AWS) 자세히 공부하기
    • 어떠한 서비스를 배포하기 위해서는 AWS(혹은 다른 클라우드 서비스)를 사용할 수 밖에 없는데, 이때 os에 관한 기초 지식이 부족하면 제대로 기능을 사용할 수 없다고 느꼈다.
  • 코드 컨벤션 적용하기
    • 짧은 개발 기간으로 브랜치 관리 전략을 세우지 않고, main 브랜치 하나로 모든 개발을 한 것이 아쉽다.
    • 이번 프로젝트는 백엔드 부분을 모두 나 혼자 담당했기에 가능했지만, 다음 프로젝트부터는 나 혼자가 아닌 여럿의 백엔드 개발자와 협업을 해야 하니, 이 전략에 대해 깊이 공부할 필요가 있을 것 같다.
    • 코드 컨벤션은 선택이 아닌 필수
  • 테스트, 개발 환경 나누기
    • 테스트, 개발 환경을 따로 나누지 않고 프로젝트르 진행하니 유지보수를 할 때 상당히 큰 문제가 됐다.
    • 다음 프로젝트부터는 초기 기획 단계에서 테스트, 개발 환경을 어떤식으로 나눌지 고민해보자.

팀 프로젝트를 마치며


팀 프로젝트가 끝나고 팀원과 같이 식사를 하며 회고를 하면서도 아쉬운점이 너무 많았다.

아쉬웠던 점

사실 무엇보다 아쉬웠던건 서비스를 배포를 하는데까지는 성공했지만, 사용자들의 여론이 그리 좋지는 않았다.
이유는, 원본 서비스인 "내 트리를 꾸며줘!"와 기능, 디자인이 크게 다르지 않았고 무엇보다 원작자의 허락 없이 서비스를 배포했기 때문이다.
처음에 배포를 할 때는 원본 서비스와 기술, 리소스들이 달랐기 때문에 법적인 문제는 없다고 생각했다.
하지만, 남의 아이디어를 이용해서 서비스를 한다는 도의적인 문제는 원작자 입장에서 좋지 않게 볼 수도 있다고 생각하여 뒤늦게 원작자인 산타파이브에 메일을 보내 허락을 구했다.
산타파이브에 문의한 결과 다행히 "상업적인 이용이 아니고, 경상대학교 학생들로 이용자가 한정되어 있기에 얼마든지 서비스 배포하고 이용 가능하다"고 회신이 왔다.
이번 일을 계기로 클론코딩 프로젝트를 배포할 때는 꼭 원작자의 허락을 받고 비슷한 문제가 발생하지 않도록 유의해야 겠다고 생각했다.

잘한 점

개발 기간과 시험 기간이 겹쳐 타이트하게 일정을 진행한 감이 없지않아 있었는데, 책임감을 가지고 프로젝트를 무사히 완수해냈다.
덕분에 내가 배운 것들을 점검하고 개발 실력을 대폭 향상할 수 있는 최고의 기회를 가지게 되었다.
또한, 혼자가 아닌 마음이 맞는 팀원과 함께하니 개발 속도도 빨라지고 결과물 퀄리티도 대폭 좋아진다는 것을 알게 되었다.

마무리

내가 부족한 점이 어떠한 것이 있는지 되돌아 볼 수 있었고,
짧은 개발 기간이여도 프로젝트를 완수해낼 수 있다는 자신감을 가질 수 있게 한 프로젝트였다.

학업과 프로젝트를 모두 잡아야했던 2주였지만, 개발하는 내내 너무 재미있었기에 포기하지 않았다.


무언가 이슈가 있을 때마다 항상 큰 도움을 주셨던 팀원 박정욱님.
취업 준비로 바쁘셨을텐데도 불구하고 열심히 개발해주셔서 프로젝트를 잘 마무리할 수 있었습니다.
너무 감사하고, 꼭 좋은 곳으로 취업 하셔서 훌륭한 소프트웨어 엔지니어가 되시길 바랍니다.

반응형