프로젝트 소개
광주광역시교육청의 외주를 받아 박람회의 관람객과 연수자, 일반 프로그램과 연수 프로그램 등을 단 하나의 QR로 입장 및 퇴장, 출석 등을 체크하여 통계를 낼 수 있도록 만든 프로젝트이다.
백엔드 깃허브
Github: https://github.com/School-of-Company/Expo-Server
기간
2024.10.08 ~ 진행 중
팀원
AOS: 1명 | Server: 1명 | iOS: 1명 | Front: 2명 | Design: 1명
첫 외주
현재 속해있는 동아리자체가 광주광역시교육청에 외주를 받아서 개발을 하는 형식이라 어떤 외주가 올지 기대 중이었다.
마침 외주가 왔다는 말에 궁금해 미치는 와중.. 행사 인원 관리 서비스?라고 들었다. 처음에는 감이 안 잡혔다. 어떤 형식일까?
그래서 메일이 하나 왔다.
네..? 이게 뭐지? 이때 이 메일과 서울 한 박람회에서 어떤 방식으로 하고 있는지의 사진과 딸랑 글 하나였다.
어떻게 해야 될지 아무도 감을 잡지 못했고 차근차근 알아가기로 하였다.
첫 장학사와 통화
사실 조금은 긴장이 되긴 했는데 생각보다 자랑스러웠다. 살면서 장학사랑 통화할 일이 있겠나? 싶은 마음으로 통화를 했다.
외주가 처음이라 어떻게 해야 될지도 몰라서 전화를 어떻게 했는지도 기억이 안 난다. 어찌어찌 전화를 끝내고 교육청에서 요구하는 요구사항 명세서를 정리해서 보내달라고 하였다. 근데 하필 추석이 겹쳐서 계속 계속 안 주셔서 한마디 하였다..
저 말에는 모든 게 담겨있었다. 짜증.. 지겨움.. 등등
사실 팀장을 하기 전부터 지겹게 들은 것이 있다. 장학사는 연락 보는 게 너무 느리고 말이 안 통하는 게 있다?
근데 생각보다 말도 잘 통하고 연락도 빨리 답장해 주셨다. 늦게 보낸다고 한 게 마음에 걸려서 3일 내에 보낸 건 넘어감
이렇게 매번 기다리다 드디어 요구사항 명세서가 등장했다.
그래서 이제 개발을 시작할 수 있다는 희망이 왔다...!
개발 시작
이제 개발을 시작했다. 나는 서버를 담당해서 혼자 개발했다. 근데 api 수가 말도 안 되게 많았다. 개발하다 보니 20개 이상되는 api가 생긴 것 같다. 간단하게 프로젝트의 도메인의 수를 보자면
대ㅔ충 이 정도 된다. 저기에 api 하나만 있다고 해서 12개이다. 근데 개발을 시작하기 전에 2주 정도는 구체화를 시키고 하느라 실제 개발 시간은 1달 정도인 것 같다.
근데 내가 여기서 간과할 게 있다. 11월에 자격증 시험은 2개나 신청했다는 것.. 그래도 열심히 소프트웨이브를 나갈 정도 까진 하였다.
이 프로젝트는 소개할 때 말했듯이 QR로 모든 것을 자동화한다. 그래서 로직이나 예외상황에 대해 조금 더 생각하면서 개발을 하였다.
QR 제작
QR을 생성하는 것은 외부의 라이브러리의 도움을 받아 제작하였다.
위에 이미지와 같이 두 개의 라이브러리를 사용하여
BitMatrix 타입으로 인코딩한 후 JPG 파일로 out에 Stream으로 변환 후 byte []로 반환시킨다.
그러면 생성한 byte []의 QR을 coolSMS를 사용해 문자로 보내면 끝이다.
처음에 이거 할 때 3일 정도 삽질한 것 같다. Stream으로 변환할 때 이미지 형식을 잘못 써서 문자가 안 보내지는 문제였는데 다른 건 줄 알고 계속 로직을 바꾸었다..
CRUD의 R
이 프로젝트는 통계와 실시간 출석을 요구하는 만큼 Read의 작업이 정말 많다. 그래서 연관관계가 많이 매핑되어 있다.
ERD를 잠깐 공개하자면 이렇게 되어있는데 예를 들어 한 코드를 보자면
위와 같은 코드는 연수 프로그램별 연수자의 출석 현황을 불러오는 코드다. 빌더를 사용해서 반환할 객체를 생성하는 것을 볼 수 있는데 자세히 보면 다른 엔티티의 정보를 가져오는 것을 볼 수 있다. 이렇게 되면 N + 1이 일어날 수밖에 없는 로직이다.
그래서 나는 미뤘다.
사실 미룬 게 맞긴 하지만 이유가 있었다. 1달 동안 20개 이상의 API를 개발하고 클라이언트와 통신을 한다면 힘든 것을 알 수 있다. 그래서 나는 API의 성능보다는 작동의 유무를 기준으로 개발하였다. 그래야 1달 내에 개발을 끝내고 테스트까지 할 수 있다는 생강이 들어 그렇게 진행하였다.
회의의 부재
우리는 초반에 회의를 몇 번만 진행 후 개발을 시작하였다.
몇 번의 회의 중에는 기능명세서와 요구사항을 구체화시킨 것뿐 그 뒤에 회의라는 것보단 각 전공별로의 구두의 협의? 같은 형식으로 진행하였다. 그렇게 하였더니 문제가 생겼다. 팀원별로 모두 말이 다르다는 것이었다.
문제의 시작
실제 노션에 문서화되어있는 회의록이다. 이걸 보면 알 수 있듯이 진행한 지 2달이 넘은 현재.. 회의록을 보면 4개가 끝이다. 이후에는 각자 바쁘고 그래서 회의를 진행하지 않았다. 내 기억으론 한두 번 하긴 했지만 문서화를 하지 않았다. 어떤 일이 벌어질지 모르고..
이 이후에는 지속적으로 팀원마다 들은 말이 다르고 회의록은 없으니 자기 생각대로 하는 게 생겼다. 디자인도 마찬가지고 나와 팀원들이 계속 보면서 디자인을 수정해 나갔다. 그래서 퍼블리싱을 해야 되는 클라이언트들은 고생을 좀 했다. 물론 나도 디자인이 변경될 때마다 나도 까먹어서 잊고 있던 것들도 추가해 나가기 시작했다. 여기서도 ERD가 계속 바뀌어서 엔티티를 수정하는 일이 잦았다.
해결하지 못한 문제
이 프로젝트에서 해결하지 못 한 문제가 있다.
현재 프로젝트에서 뜨는 에러이다. 401이 뜬다면 NetworkError가 뜬다. 이걸 해결하려고 초반에 원인을 찾아봤는데 해결하지 못했다. 클라이언트 문제인지 서버 쪽 문제인지 정확히 확정 짓지 못해서 임시로 나누고 저 문제가 안 생기게 핸들링을 해놓은 상태이다. 이후에 해결해야 될 문제이다.
또한, 위에서 본 N + 1도 해결해야될 문제이다. 이건 최대한 프로젝트의 특성을 맞춰서 해결할 수 있는 방식을 찾아서 할 예정이다.
느낀 점
처음에 주제를 보고 간단한 프로젝트라고 생각했던 게 오만했던 것 같다. 실제 박람회에서 사용한다고 가정했을 때 지금으로는 턱없이 부족하고 오류가 계속 발견되고 있는 것 같다. 1 달이라는 기간에 쫓겨 개발했던 것이 회의의 부재와 문서화의 소홀함으로 이어져 팀원들 간에 소통에까지 문제가 생겨 더 힘들었던 프로젝트 같다. 그리고 학생 때 QR 기계와 프린터기를 이용해 개발해 보는 것도 좋은 경험으로 이어진 것 같다. 만약 잘 만들어진다면 내년 5월에 있을 김대중컨벤션센터에서 있을 박람회에서 직접 사용할 예정이니 기대해 주시길 바란다.
'project' 카테고리의 다른 글
[project] JusiCool 프로젝트 회고 (0) | 2024.07.29 |
---|