소프트웨어공모전 후기

SamSim·2021년 9월 19일
1

프로젝트

목록 보기
1/1
post-thumbnail

학교 학부에서 주최하는 소프트웨어 공모전에 지난 6개월간(학기 중에는 작업을 못하다 싶이 했으니...사실상 3개월..?)작업한 GRACURRI를 출품했다.
그래커리 깃허브
대회의 후기와 만든 작품에 대한 설명을 이렇게 velog에 써보고, 아쉬웠던 점과 보완해야 할 점을 남기고싶었다.

그래커리?

그래커리를 처음 기획한건 2021년 초 겨울방학 중이었다.
다가올 1학기를 앞두고 수강신청을 위해서 시간표를 짜고 있는데, 순간 이 과정이 너무 반복적이고 귀찮다는 생각이 들었다. 매번 수강신청 때마다 유세인트 졸업사정표를 찾아보고, 남은 이수 학점은 몇점이며 전공은 몇학점, 교양은 몇학점 들어야할지 정하고 또 학기에 개설된 과목들을 확인해서 시간표에 집어넣는 이 과정이 너무 귀찮았다.
그래서 생각한게,

이 모든 과정을 대신해줄 프로그램을 만들면 안되나?

였다.
그래서 생각해낸 웹 프로그램은, 1)이제까지 들은 과목들과 자신의 학번, 학년을 집어넣으면, 들은 과목들의 이수영역과 학점단위수를 분석하여 졸업요건과 비교하고, 2)남은 졸업 요건(교양 이수 영역, 학점)에 맞추어 남은 학기들의 이수 계획을 세워주며(각 학기마다 들을 과목들의 리스트를 만들어준다), 3) 매 학기 수강신청 전에 유세인트에 공지되는 과목 시간표를 참고하여 해당 학기 시간표를 분반까지 고려하여 짜준다. 라는 프로세스의 웹 프로그램이었다.
이걸 프로젝트로 진행해보자 하였고, 팀장으로서 팀원을 모집하여 팀을 꾸려 팀 프로젝트로 진행해보았다.
나조차도 웹을 처음 해보는 것이기 때문에, 프로젝트는 모든 팀원이 웹 공부를 하면서 실습해본다는 생각으로 진행하고자 하였다.

시스템 구성

시스템 구성은 간단했다. 사용자가 사용할 웹 페이지의 html문서를 만들고, 프론트에서 입력받은 정보, 또는 요청한 url을 핸들링할 router를 만들었으며 회원의 정보들(학번,들은 과목들, 들을 과목들)을 담을 DB를 구축하면 됐다.

앱 구성

앱은 회원가입, 과목 서칭 및 입력, 이수 계획확인, 시간표 확인의 페이지로 구성하였다.

사용 언어,프레임워크,클라우드

처음으로 웹 페이지를 제대로 만들어 보는 거라, javascript도 연습해 볼겸 node.js(express)를 사용했다. html문서를 따로 만들고, static을 이용했다.
AWS RDS를 이용해서 데이터베이스를 구축하는데에 성공했다. MySQL을 사용했고, Workbench를 이용하니 확실히 편하게 DB를 관리할 수 있었다.
AWS EC2를 사용해서 웹 배포를 하려고 했는데, 대회 기간 내에 배포방법을 모두 공부하지는 못하여 아쉬웠다.

결과

참가한 24팀중 15팀에 들어 1차를 통과하고 2차 심사에 올라갔다.
회원가입, 수강한 과목 입력, 계획 DB에 들어있는 데이터를 프론트로 보내 수강할 과목의 리스트를 띄워주고, 시간표를 시각적으로 보여주는 것에는 성공하였다. 하지만 제출 당일 까지 알고리즘을 수정해보았음에도 불구하고 들은 과목들을 바탕으로 계획을 생성하는 프로세스를 완성하는데에 실패하였고, 결국에는 수상을 하지 못하였다.

배운 것

  • HTML문서는 어떻게 만드는 것이고, css로 어떻게 꾸미는지, javascript로 어떻게 버튼에 동작을 집어넣는지를 처음으로 배워보았다.

  • 서버는 어떻게 구축하는 것이며 Node.js를 이용해서 routing은 어떻게 하는지(이과정에서 express프레임워크 또한 배울 수 있었다)의 서버 사이드도 배우는 계기가 되었다.

  • 데이터베이스 구축을 위해서 MySQL을 배우고, workbench는 어떻게 사용하는 것이며 데이터베이스,테이블은 어떻게 만들고 각종 쿼리들(INSERT, DELETE, UPDATE 등등)은 어떻게 사용하는지에 대해서도 알게 되었다.

  • AWS CONSOLE의 사용법, EC2 인스턴스와 RDS데이터베이스는 어떻게 생성하고 접속 및 사용할 수 있는지에 대해서 알게 되었다.

  • 무엇보다도, 프로젝트를 이끄는 팀장으로서 프로젝트 기획,기획서 작성 팀의 개발 계획을 수립하고 이를 이행하는 과정에서 팀장의 동기부여의 필요성과 업무 조정 방법, Notion사용법, 팀 작업에서의 github사용법에 대해서도 배우는 계기가 되었다.

프로젝트 진행과정에서 힘들었던 점

회원별로 이전 페이지에서 입력한 수강한 과목 리스트를 DB에 조회하고 이 과목 리스트를 바탕으로 수강 계획을 짜야하는데, 비동기적인 javascript가 계속하여 db.query함수를 늦게 실행하도록 하여 오류가 발생하였다. 들은 과목 리스트를 조회하고 값들을 배열에 push해둔 뒤 프로세스를 진행해야하는데, 이 부분부터도 실행되지 않아 콜백, Promise, setTimeout을 써보기도 하였지만 되지 않았다.
아무래도 node.js와 자바스크립트에 대한 이해가 불충분하여 제대로 활용하지 못한 탓 도 있겠지만, 여러번 DB와의 통신이 이루어져야 하는 우리의 프로그램에 사용하기에는 적절하지 않았던 것도 같다.
또 팀장으로서 팀의 개발 프로세스를 모두 책임져야 하는 동시에 백엔드를 혼자 구축해야해서 핑계같지만 백엔드 개발 프로세스가 늦어진점도 아쉬웠다.(나머지 팀원들은 모두 프론트를 담당했고, 한 분은 DB를 담당해주셨다)
사실 팀 프로젝트의 기간이 긴(6개월정도)상황에서 팀원들을 지속적으로 동기부여하는 것도 힘들었다. 웹 공부를 위해 한다는 동기부여 외에도 직접적으로 와닿을 동기부여의 수단이 필요하였고, 나는 소프트웨어 공모전을 그 동기부여의 수단으로 삼았다. 매년 있는 대회이고 졸업요건과 상금이 걸려있기에 동기부여 수단으로 충분했다고 생각됐지만 개발 속도가 내 생각보다 느려서(다들 처음 웹 개발을 배워나가는 것이기는 하였지만) 걱정이 많이 되었었다.

개선할 점,앞으로 gracurri는?

이번 학기에 짬이 나는 대로 서버를 내게 익숙한 python으로 다시 구축해 보려한다. 최소한 javascript처럼 익숙하지 않아서 문제가 발생할 일은 없을 것 같다.
또 겨울방학 수강신청 전에 이것을 팀원들과 완성하여서 배포하고 서비스하는 과정까지 진행해 보려한다. 배포하고 서비스하는 과정에서 생기는 문제들을 핸들링해보는 경험을 해보고 싶다.

느낀점

  • 프로젝트를 팀장으로서 이끄는 것에는 생각보다 많은 책임감과 능력이 요구되었다. 기획 단계에서 부터 기획서는 어떻게 쓰는 것이며 프론트와 백엔드의 업무는 어떻게 조율해야 하는 것인지, 프로그램을 기한에 맞추려면 개발 프로세스를 어떻게, 언제까지 진행해야하는 것인지를 생각해야했다.

  • 다음 프로젝트를 할 때에는 사전에 개발 프로세스를 좀 더 세심하게 계획하여(주먹구구식으로 개발 계획을 짠 면이 있다... 보이는 페이지부터 그냥 이거하고 이거 하고,,,,이런식으로) 팀의 역량이 분산되지 않고, 기한에도 맞출 수 있도록 해야겠다.

  • 백엔드 개발자로서는,,, 생각보다 프론트와 백엔드의 합이 중요하다는 것을 느꼈다. API 하나를 만들더라도 프론트와 json데이터 이름은 무엇으로 주고받을 것인지, url은 어떻게 할 것인지를 소통해야했고 프로세스도 맞춰 나가야했다. (프론트는 1 작업하고있는데 나는 1은 나중에하고 2 먼저해야겠다 하다가 엇갈리는 경우도 있었다). 다음 프로젝트에서는 API설명 문서를 하나 만들어서 프론트 분들이 좀 더 쉽게 데이터 송수신 함수를 구성할 수 있도록 하고, 프로세스도 맞춰나갈 수 있도록 해야겠다 싶었다.

  • 그리고 내가 Node.js를 사용한다 하였을때, 주변에서 node.js는 불안한데,,,,? 하는 말을 많이들었다. 실제로 사용해보니 비동기적 처리도 그렇고, 오류나면 서버 전체가 다운되거나 꼬이는 문제가 발생해버려서 많이 불편함을 느겼다.

  • 데이터베이스를 구축하면서, 생각보다 이 작업이 재밌다는 것을 느끼게 되었다. 마침 2학기에 데이터베이스 과목을 듣는데 프로젝트를 하면서 이론적 지식없이 MySQL코드와 내 감에 의존하여 데이터베이스를 구축했던 점이 있어서 수업때 배우는 데이터베이스 이론 지식을 바탕으로 재구성 해보고, SQL자격검정 시험도 준비해보려한다. (데이터베이스의 키에 super key, candidate key등의 구분이 있는 것도 몰랐다). 좀더 효율적이고 쉬운 데이터베이스를 구축하고, 정보를 바탕으로 통계를 내보는 작업도 재밌을 것 같다.

갈무리

인생 첫 프로젝트...아쉬운점도 많고 배운점도 많았다. 다음 프로젝트는 좀 더 보완해서 더 나은 프로젝트로 만들고,더 나은 개발자가 되고 싶다.
수고한 팀원 모두 고맙다!!!

profile
개발새발

0개의 댓글