[Web] 삼성청년SW아카데미 1학기 프로젝트 회고
SSAFY의 1학기 커리큘럼을 착실하게 따라가던 도중 마지막 과제를 마주하게 되었다.
바로 여태까지 배운 web 개발지식을 사용해 2명이서 웹사이트를 만드는 것이었는데
프로젝트 기간이 주말을 포함해서 9일 주어졌다.
역시 싸피에서는 뭐 하나 쉬운게 없다.
그래도 아예 제로부터 시작하는게 아니라 주제가 주어지고 스켈레톤 코드를 바탕으로 진행하는 것이라서 불가능해보이진 않았다.
목차
- 프로젝트 준비
- 프로젝트 설계
- 기능 구현
- 발표
- 프로젝트 정리
1. 프로젝트 준비
간단한 명세서만 주어지고 프로젝트 진행 방식은 자유였기 때문에
처음엔 팀원과 어떤 방식으로 진행할지 이야기를 나누었다.
이야기를 나누어보니 일단 나도 그렇고 팀원도 SSAFY이전에 웹개발 경험이 없어서 1학기 동안 배운 개발지식만이 전부인 초보자들이었다.
지금와서 깨달은거지만 오히려 서로 미숙했기 때문에 민폐가 되지 않으려고 더 열정적으로 프로젝트에 임했던 것 같다. (일정내내 아침 9시부터 밤 12시까지 매달려있었다)
어쨋든 우리는 하면 된다는 생각으로 나의 이전 프로젝트 경험을 바탕으로 프로젝트 준비를 했고 첫번째로 했던 것은 협업툴과 깃저장소 설정이었다.
[프로젝트때 사용했던 Notion 사진]
문서정리와 일정관리는 Notion으로하고 의견조정 및 자료 공유같은건 싸피 내부 메신저로 하고 깃저장소는 SSAFY의 보안수칙때문에 SSAFY GitLab을 사용하기로 했는데 GitLab에 레포지토리를 파고 Git Flow 전략을 정하려고 할 때 문제가 생겼다.
팀원이 Git사용에 익숙하지 않은 것이었는데 시간이 부족했기 때문에 Git 사용법을 알려주고 Git Flow 전략을 사용하기엔 힘들 것 같았다.
이 때 개발은 화려한 최신기술이나 엄청난 개발스킬이 중요한 것이 아니라 개발 상황에 맞는 기술과 해결방법이 중요하다는 이야기를 하던 개발관련 유튜브가 생각이 났다.
나는 우리의 프로젝트 성공을 위해 어떤 방법을 써야할지 생각을 했고 간단하게 master 브랜치만 사용해 작업하는 방식으로 프로젝트를 진행하기로 결정했다. 그래서 팀원에겐 pull과 push, commit 등의 기초적인 부분만 잘 사용할 수 있도록 알려주었다.
그리고 내가 어떤식으로 진행하고 싶은지 내 생각이 어떤지를 팀원에게 설명하면서 나의 생각을 전달했고 팀원도 수긍해주면서 내가 진행하는대로 잘 따라와주어서 기본 세팅을 모두 끝낸 우리는 본격적인 설계에 들어갔다.
2. 프로젝트 설계
프로젝트 설계는 큰 어려움없이 진행되었다. 1학기 때 학습하면서 꾸준히 진행되었던 실습프로젝트가 베이스였고 기능 명세서라든지 DB설계도는 주어졌기 때문이었다.
설계를 하면서 제일 중요하게 생각한 것은 우리의 능력을 잘 파악해서 기간안에 만들 수 있는 만큼만 설계를 하는 것이었다.
기본적인 기능이외에도 추가적인 기능을 구현하면 더 좋은 점수를 받을 수 있지만 너무 욕심을 내다가 기본 기능도 추가 기능도 재대로 못만드는 일은 발생해선 안된다고 생각했기 때문이다.
[프로그램 구성도]
우리가 만들 프로그램의 구성도를 작성하고나서는 노션에 TODO LIST를 정리했고 팀원은 프론트 화면 디자인을 구상, 나는 DB ERD를 작성하면서 개발에 진행속도를 내었다.
3. 기능 구현
설계를 마치고 나서는 바로 기능 구현에 들어갔는데 사전에 정한대로 나는 백엔드 개발을 진행하고 팀원은 프론트엔드 개발을 진행했다.
백엔드는 기존에 Spring MVC로 구현해놨던 코드가 있어서 이 코드를 Spring boot로 바꾸는 작업과 DB설계대로 mysql의 테이블을 생성하고 mybatis의 Mapper를 만들어주었다.
mybatis는 Mapper클래스와 실제 sql문을 작성해두는 xml파일을 따로 만들어주고 둘을 매핑해주는 방식으로 동작하는데 이렇게 자바클래스와 sql을 나눔으로써 순수JDBC를 사용할 때보다 좀 더 편리한 부분이 있었다.
그리고 Spring MVC로 구현된 코드에서는 프론트가 jsp로 구현되어있어서 vue.js로 이전하는 작업과 Controller단에서 서블릿으로 반환해주던 코드를 json으로 반환하도록 변경해주는 작업이 이루어졌다.
Spring boot로의 이전이 끝난 뒤에는 우리 팀만의 기능을 구현하기위해 추가로 api를 개발했고
api 개발이 끝난 후에는 프론트에 붙어서 회원가입 입력폼 검증기능 개발, 게시판 댓글 기능개발, 트러블슈팅 등 팀원을 도와 프로젝트를 마무리했다.
4. 발표
우여곡절 9일간의 개발이 끝난 뒤 반에서 조별 발표가 이루어졌다.
개발기간 중간에 팀원의 개인사정으로 며칠간 참여를 못하는 상황이 있었지만 새벽에 시간을 내서라도 맡은 작업을 끈기 있게 해줘서 끝까지 마무리 할 수 있었다.
내가 PPT를 만들고 팀원이 발표를 진행하여 공식적인 프로젝트는 끝났지만 나는 프로젝트가 끝났다고 다 끝난 것이 아니라고 생각했다.
촉박하게 개발하냐고 코드의 퀄리티가 많이 부족한 상태였고 노션이나 만들어진 문서들이 정리되지 않았기 때문이었다. 이대로 끝내버리기엔 아쉬움이 컸다.
5. 프로젝트 정리
유종의 미를 거두기 위해 노션과 프로젝트 발표때 사용했던 문서, 산출물 등을 정리하고 코드 정리를 하자고 팀원에게 제안했다.
다행히 팀원은 흔쾌히 수락해주었고 서로 프로젝트가 끝나서 기쁜 마음은 잠시 넣어두고 진정한 프로젝트 마무리를 위해 다시 작업에 들어갔다.
문서정리를 먼저 끝내고 서로 같이 작업했던 프론트쪽의 코드를 다시 한번 살펴보았다.
생각보다 코드의 상태가 심각했다. 각자 작업한 코드의 스타일이 많이 달라 통일성이 없다든지 api호출코드를 컴포넌트마다 새로 작성했다든지 문제가 많았고 이러한 문제점을 팀원과 공유해서 개선할 방법에 대한 의논을 나눈 뒤 파트를 나누어 코드 리펙토링을 진행했다.
[코드 리펙토링 작업내역]
문서정리와 코드 리펙토링을 끝내고 난 뒤에는 리드미와 페이지 동작과정을 이미지로 만들어서 레포지토리에 올렸다.
후기
웹개발 프로젝트는 처음 진행해본거라 부족한 점이 많았지만 부족한 점을 채우려고 삽질한 만큼 많이 배운 프로젝트였다. 특히 좋은 최신 기술과 방법을 쓰기보단 상황에 맞는 기술과 방법을 선택하는 것이 중요하다는 것을 깨달은 프로젝트였다.
앞으로 이런 웹개발 프로젝트를 많이 할텐데 이 첫번째 프로젝트가 더 나은 프로젝트를 위한 디딤돌이 되었으면 좋겠다.
댓글남기기