Projects/Team project - 스택오버플로우 클론코딩

팀 프로젝트 일지

마손리 2023. 6. 14. 21:52

프로젝트 목표

StackOverFlow사이트의 클론코딩

 

프로젝트 기간

2주

 

개발 인원

6명(프론트 3명, 백엔드 3명)

 

 

D+1 

팀원간의 개인 역량 체크

짧은 시간인 2주간 주니어 개발자 6명에서 해당 웹사이트의 어떤 기능까지 구현을 할것인가, 그 범위에 대해 논의하게 되었다.

 

주어진 시간은 2주이지만 그안에 프로젝트의 방향을 논의하고 역할을 분배, 어플리케이션의 기능을 코드로 구현, 테스트 실시, 배포까지 하기 위해선 StackOverFlow의 기능을 최소화하여 꼭 필요한 기능들인 회원과 질문, 답변, 댓글에 관한 기본적인 CRUD 서비스와 소셜 로그인 기능까지만 일단 구현한 후 시간이 남으면 팀원 모두 협의 후 새로운 기능을 추가하기로 결정하게 되었고 이를 바탕으로 사용자 요구사항 정의서를 작성하였다.

 

이후 화면 정의서, 테이블 명세서, API 명세서를 작성하며 회의를 이어나갔다.

 

회의에 거론된 안건

 1. 등록된 게시글 삭제 방식 (DB에서 삭제할지 '삭제 상태'를 부여 할지)

  • DB에서 완전 삭제로 결정

 2. 태그 기능 제거  결정

 3. 질문 임시 저장 기능 제거  결정

 4. 게시글 검색 기능 제거 결정

 5. 이메일 인증 기능 제거 결정

 

사실 단축된 기능들에 조금 실망하긴 했지만 나를 포함한 모든 팀원들이 다른 개발자들과 협력하는 프로젝트 경험이 없기에 위험한 전략보다는 좀더 안전한 전략을 채택하기로 결정했다.

 

이번 프로젝트의 목적대로 대단한 어플리케이션을 제작하는 것이 아닌 다른 개발자들과의 협업을 통해 작지만 하나의 프로젝트를 완성시키는것이라 생각하며 스스로를 위안했다.

 

 

D+2

첫째날 회의에서 거론된 의견들을 토대로 두번째 날도 문서 작업을 계속해서 진행했다. 

다행이 첫째날 많은 수정사항들이 거론 되어 두번째날에는 크게 수정된 사항들은 없었다.

 

각 백엔드와 프론트엔드 팀별로 API 명세서와 화면 정의서를 작성해주고 Git을 사용하기위한 규칙들을 작성 해주며 팀 프로젝트 시작 전 문서화 작업을 끝내게 되었다.

 

이후 나는 개발중 프론트엔드 팀이 사용하게 될 Mock-up data API 서버를 맡아 만들어 주고 나머지 백엔드 팀원 2명은 프로젝트에서 직접적으로 사용하게 될 스프링 시큐리티를 맡아 진행하였다.

 

 

D+3

3일차 부터는 각자가 맡은 기능의 구체적인 로직을 구현하게 되었고 나는 질문글 도메인에 관한 기능을 맡게 되었다.

 

프로젝트 진행 도중 느낀점이 있다면... 어제 Mock-up API 서버를 AWS EC2로 배포하여 프론트엔드분들께 제공하는 방식으로 진행하였는데 문제는 자잘한 변경사항이 생길때마다 Mock-up API를 계속해서 변경해 주어야 했는데 이게 여간 귀찮지 않을 수 없었다... 

 

변경된 사항을 로컬에서 적용하고 Postman으로 확인한 뒤 EC2로 배포, 이후 EC2에서 또다시 Postman으로 잘 적용되었나 확인하는 작업을 여러번 하다보니 어플리케이션의 버전관리의 중요성을 깨닳고 다음번에는 자동배포로 진행해야겠다 생각하게 되었다. 

 

 

D+10

백엔드 팀은 모든 기능구현을 마치고 배포 후 Postman을 이용하여 테스트를 해보았다. 

 

테스트에서는 Oauth2의 리다이렉트 문제가 발생했다. 

문제가 발생한 원인으로는 개발진행 당시 구글 Oauth api에 등록된 '승인된 리디렉션 URI'의 URL이 localhost:8080으로 등록되있었는데 배포 후 해당 URL을 배포서버의 URL로 바꿔주지 않아 발생한 문제였다. 

 

Oauth를 제외하고는 가벼운 버그들이 몇몇개 발견되어 모두 수정해준 뒤 배포 자동화를 진행했다(진작할걸... 배포자동화를 하니 어플리케이션의 버그 수정 이후 테스트까지 너무 편리했다.)

 

이후 프론트엔드팀도 개발을 마치게 되어 기능테스트를 진행하게 되었는데 거기서 많은 버그들이 발생했다.

다행(?)이라 해야 할지 모르겠지만 백엔드서버에서의 문제는 없어보였다. (몇가지가 또발견됫다 ㅡㅡ). 대부분이 Request의 body로 넘어와야 할 값들이 잘못 작성되거나 특정 기능 이후 잘못된 URL로 유저를 리다이렉트 시키거나 하는 문제였는데 다행이도 프로젝트 종료까지 다 해결할 수 있을것으로 보인다.

 

D+14

프로젝트 종료일이다!! 다행이도 모든 버그를 고치고 기능들이 모두 잘 작동되는것까지 확인 했다. (조회수에 관한 버그가 잡히지 않았다... 클라이언트에서 백엔드서버로 리퀘스트를 무한대로 날리는것이 문제였는데 이것을 해결하니 다른 버그가 발견되어 시간상 버그를 고치지 못하고 프로젝트를 마무리하게되었다...)

 

처음 프로젝트를 시작할때는.몇번의 개인프로젝트를 진행해 보았기에 기능구현에는 자신이 있었고 2주라는 시간이 충분할 줄 알았다.

 

막상 프로젝트를 진행했을땐 예상했던대로 기능구현에는 큰 문제가 없었지만 프로젝트 구상단계, 깃과 깃허브의 브랜치관리와 충돌문제, 배포이후 CORS 문제 등 대부분의 시간이 협업을 진행하면서 발생하는 에러들을 처리하는데 사용되었다.

 

다행히 발견된 문제들은 모두 해결하였지만 다음 프로젝트 구상때에는 브랜치와 서버관리 전략과 계획을 더 탄탄히 세워 해당 프로젝트의 문제발생율을 최대한 줄이고 예기치 못한 문제가 발생했을경우 유동적이고 발빠른 대처가 가능하도록 진행해 보아야겠다.

 

 

완성된 서류

사용자 요구사항 정의서-

https://drive.google.com/file/d/1Zr_0pPWFyHn-3HhFaFPfXLjNhN532dcX/view?usp=drive_link 

API 명세서 -

https://drive.google.com/file/d/1VuIEUohkkqjfPBVW44kNt_4o8j4eYaGx/view?usp=drive_link 

화면정의서 - 

https://drive.google.com/file/d/1TlalzYpO7Frv_Zzm5se_KMsOzrvj3p_V/view?usp=drive_link

Git 전략 및 Github 사용 규칙 - 

https://drive.google.com/file/d/1e_kE7YoggtSEJ85pgpAwdF-QNaofY9SW/view?usp=drive_link 

기능테스트 결과 - 

https://drive.google.com/file/d/1ei4bNbZpXl4gf5wXccI7nxjTd4yC_Q3h/view?usp=drive_link