SSAFY 팀 프로젝트 가이드(#1 처음부터 끝까지)

Rm·2021년 6월 18일
14
post-thumbnail

이번에 SSAFY 4기 수료한 교육생으로서 지난 1년동안 총 4번의 팀 프로젝트에서 1등(1학기 종합프로젝트), 1등(2학기 공통), 2등(2학기 특화), 2등(2학기 자율) 나름 상위권에 위치하며 어떻게 프로젝트를 진행했는지 대략적인 가이드를 제시하고자 합니다.

물론 사람마다 가치관이 다르고 진행하고자하는 프로세스가 다를 순 있으나 막상 프로젝트는 시작됐는데 어디서부터 뭘해야할지 모르겠다면 이러한 순서대로 진행해보는건 어떨까요?

시작하겠습니다.

우선 프로젝트에서 제 역할은 메인 발표자 및 백엔드 개발, 인프라 담당이였습니다. 따라서 맡은 역할 위주로 상세하게 포스팅하겠습니다.

0. 팀원 역할 분담

  • 프론트 3 / 백엔드 2(인프라, 백엔드 API 개발)
    위의 예시는 제가 프로젝트를 경험하면서 추천드리는 포지션입니다.
    수상에 욕심있는분들은 꼭 좋은 프론트 팀원을 섭외하세요!(아무리 백엔드 기술적으로 뛰어나게 완성해도 평가는 보여지는 부분이 굉장히 큽니다)
  • 확률적으로 프론트를 원하는 교육생이 적기때문에 보통은 프론트 1 or 2 로 시작하여 백엔드가 개발 끝나면 다 프론트에 우르르 붙는 포지션이 될 확률이 큽니다.
  • 그렇다면 백엔드 포지션5명이면 어떻게하냐? 사다리타기를 해서라도 프론트를 뽑고 부트스트랩이나 뷰티파이 등과같은 템플릿을 사용해서라도 디자인을 뽑고 개발하는게 좋습니다. 사실 결국에 개발자는 원하는 포지션만 할 수 없는 경우도 많다고 알고있어서 디자인 감각이 영 아니고 하기 싫더라도 도전하는것은 추후 많은 도움이 될것입니다.

1. 프로젝트 기획

아이디어 회의(SWOT 분석)

기존에 팀원들중 좋은 서비스 아이디어나 본인이 하고싶었던 아이디어가 있다면 다행이지만 무에서 유를 창조하는것은 언제나 어렵습니다.
특히나 요즘 가장 많이 나오는 주제와 기술은 코로나 관련, 비대면(화상미팅), 키오스크, VR, AR, 인공지능, 빅데이터, IOT 등입니다.

  • 주제를 선정할 때 각 팀원마다 아이디어를 몇개씩 준비해서 꼭 회의하는 시간을 갖으세요!

  • 남들과 차별화된 주제를 기획하는것은 기획자가 아닌이상에야 상당히 어렵습니다. 처음 기획이 프로젝트의 당락을 결정하니 꼭 신중하게 기획하세요!

  • 들어가면 좋은 포인트는 기존 서비스와의 차별화 전략(이게 안되면 기존 서비스에서 업그레이드 할 수 있는 것), 사회 공헌적 내용 등

자료 조사(시장조사, 기술 레퍼런스 체크)

아이디어가 픽스됐다면 다시 한번 비슷한 서비스는 없는지 체크해보시기 바랍니다. 기존 서비스가 있다면 해당 서비스와의 차별화 전략을 추가로 세우시면 좋습니다!

또한 기획이 어느정도 나왔다면 어떻게 개발할것인지 기간내에 가능한지 파악을 해야합니다. (예를들어 화상미팅이 들어간 서비스를 기획했는데 화상미팅을 구현해본적은 없고 어떤 오픈소스를 사용해야하는지 등)

일정 수립(몇주차까지 개발하고 배포하고 사용자 QA 및 버그 픽스)

사실 사용자 QA테스트까지 바라는건 욕심이지만 저희는 실제 사용자처럼 QA 테스트를 진행하였고 거의 20 ~ 30개정도의 버그가 발생했습니다. 보통은 최종 발표 주나 전주에 테스트를 진행하고 이후엔 발표자를 제외하고 거의 버그 잡는데 시간을 할애했던거같습니다.

프로젝트의 완성도를 좌우하는건 얼마나 빨리 기획을 마치고 개발에 들어가냐입니다. 저 같은 경우는 공통, 특화 때 거의 3주차부터 개발에 들어갔고 2주정도 개발진행하고 나머지 시간에는 UCC, 발표, 버그 픽스에 시간을 썼던거같아요. 따라서 기획을 얼마나 빨리 끝내고 개발에 들어가는지가 추후에 시간활용을 잘할 수 있어 프로젝트의 완성도가 올라갑니다.

기술 스택

이제 더이상 고민은 그만하고 사용할 기술을 픽스하고 본격적인 개발에 돌입해야합니다. 보통 가장 많이 하는 기술 스택은 다음과 같습니다.

FrontEnd : Vue, JavaScript, TypeScript, React, ReactNative, Android 등

BackEnd : SpringBoot(Java),Mysql or MariaDB, Mybatis or JPA, Node.js, DJango(Python)

InFra : AWS, Docker

2. 프로젝트 시작

  • 협업툴 환경 설정
    각 자 사용하는 협업 툴이 다르겠지만 대부분 많이 사용하는 공통적인것은 MatterMost, Notion, GitLab, Slack 등

  • 개발환경 세팅
    가장 중요하다 생각보다 시간을 많이 잡아먹을 수 있는 부분 팀원 중 익숙한 사람이 먼저 프로젝트 세팅하고 나머지 팀원이 같이 잡아가는 방식으로 하는게 가장 효율적 누구도 익숙지않다면 하나하나 같이 웨벡스로 공유해가면서 맞춰놓도록하자

  • 시스템 아키텍처 설계
    보통은 인프라 담당자가 전반적인 서비스 아키텍처를 설계하여 프로젝트에 대한 높은 이해도를 가지고 있어야 배포나 장애가 발생했을 때 해결할 수 있다. (물론 담당자뿐아니라 다른 팀원들도 숙지하고 있어야함)

  • 프로젝트 만들어서 깃 init
    최초 프로젝트를 깃에 커밋하는것부터 시작이다.
    Git에 대한 이해도는 곧 프로젝트 관리로 이어지기 때문에 꼭 Git에 대한 사용법은 익히도록 하자.

  • 인프라(서버 환경 설정)
    로컬에 개발환경을 세팅했듯이 서버를 배포받으면 바로 개발환경을 세팅해야한다. 빠르게 서버 개발환경을 맞추고 배포할 수 있도록 세팅해놓으면 더욱 빠른 프로젝트 개발이 가능하다.

3. 프론트 / 백엔드

프론트

  • 컨벤션 정하기, 린트 설정
  • figma, 카카오 오븐 등으로 디자인
  • 페이지 markup
  • 프론트와 백엔드의 RestAPI 문서화하여 사전에 axios틀을 미리 짜놓으면 연결할 때 좋다.
    (초반에 백엔드와 프론트 연결하는 부분에서 상당히 애를 먹었는데 한번만 잘해놓으면 이 후 프로젝트에 용이함)

백엔드

  • 컨벤션 정하기, 오토세이브(STS,인텔리제이)
  • spring.io 에 접속하여 프로젝트 생성 후 DB 연결 테스트
  • 로그인, 회원가입은 되도록 빠르게 개발(소셜 로그인, 기본적인 암호화는 필수)
  • Mybatis에서 JPA로의 개발 추천(단, 쿼리에 대한 이해도와 JPA 연관관계 매핑에 대해 학습 후 진행!)

인프라

  • 서버 시간 설정
  • 개발 환경 세팅
  • Docker 추천(모든 서비스) DB에도 시간 세팅 필수
  • Nginx로 Front 배포
  • 배포 자동화를 위한 Jenkins 추천 (쉘 스크립트로 파이프라인 구축)

4. 프로젝트 마무리

  • 프로젝트 최종 발표 주 전주에는 되도록 개발을 끝내고 QA 테스트 즉 버그를 잡아야한다.
  • UCC는 무조건 프로젝트 전주에 미리 완성해놓는게 좋다.

5. 최종 발표

  • 아무리 좋은 취지의 기획과 기술력있는 프로젝트여도 발표에서 못보여주면 말짱꽝이다.
  • 어떻게 효과적으로 보여줄 수 있는가?
    => 깔끔하고 시각적으로 보여줄 수 있는 PPT (글씨가 너무 많으면 X, 정안되면 미리캔버스 추천)
  • 발표자는 사전에 스크립트 작성하고 팀원들과 내부 발표를 통해 다듬기
  • 현재는 비대면 발표이기 때문에 스크립트 없으면 손해(그렇다고 스크립트 무조건 읽는게 아니라 자연스럽게 말하듯이 하는게 중요! 너무 빨라도 안되고 너무 딱딱하게 천천히 읽어도 안된다!)
  • 인트로에 힘을 많이 줘라! 보통 한 반에 발표가 5,6개팀이 하니 가면 갈수록 지루하고 집중이 안됨 따라서 인트로를 임팩트있게 하고 중간 마무리에도 임팩트 넣을만한걸 생각해보자.
  • 프로젝트 하면서 진행한 UCC를 프로젝트 발표 중간에 넣어서 임팩트를 줄 수 있다. 따라서 UCC도 잘만들자!

지금까지 대략적인 프로젝트의 처음부터 끝까지 가이드를 작성해봤는데 도움이 됐을지 모르겠다 ^;;^

여기서 끝이 아니라 이후에 작성할 포스터 주제를 적어보면

  1. lombok 활용하여 java bean 효율적으로 작성하기
  2. Docker 원 포인트 가이드
  3. Nginx로 Front 배포하기
  4. Maven or Gradle 배포하기
  5. Front <---> Back RestAPI 연결하기(Axios)
  6. SSL 설정하기 (보안을 위해서 https 필수 적용하기)
  7. Jenkins 사용하여 배포 자동화하기
  8. JPA로 개발 생산성 늘리기
  9. 클린코드의 중요성
  10. 발표하기 원 포인트 레슨

생각나는 주제는 여기까지인데 이 후 더필요한 컨텐츠가 있다면 추가로 작성진행하겠습니다.

profile
우당탕 개발자 성장기

0개의 댓글