티스토리 뷰

이전 블로그에 작성했던 글을 옮깁니다. 본 작성일은 2023.08.20 입니다. 

 

 

세종대학교 수강신청 연습 서비스 올클(allcll)을 개발하고 운영한 경험을 정리했습니다.

 

올클은 세종대학교 수강 신청을 연습하는 사이트입니다. 2023년 8월 15일에 서비스를 시작했고 이 글을 작성하는 시점으로 서비스를 6일째 운영하고 있습니다. 이 글에서는 실제로 사람들이 사용하는 서비스를 처음 기획, 개발하고 배포 및 유지보수를 진행한 경험 등 프로젝트 전반에 대한 이야기를 간단하게 정리합니다. 

 

개요

때는 7월 말, 방학 중에 간단한 프로젝트를 하고 싶었습니다. Spring boot, thymeleaf를 공부한 직후로, 실제로 개발하며 해당 기술에 대해 깊이 이해하고 싶었습니다. 프로젝트 주제를 고민하던 중, 교내 수강 신청 시스템의 변경 소식이 들려왔습니다. 원래는 정정기간에만 적용되던 매크로 방지 문자 입력을 모든 수강 신청 기간에 신청마다 적용한다는 소식이었습니다.

 

수강신청하는 한 명의 학생으로서 어떻게 하면 변경된 시스템에서 올클할 수 있을까 고민했습니다. '그럼 연습할 수 있는 사이트를 만들자. 오, 이거 프로젝트 주제로 괜찮은데? 지인들도 쓸 수 있게 배포까지 해야겠다.' 이런 생각의 흐름으로 프로젝트 주제가 정해졌습니다.

 

기획

소수의 인원만 사용할거라 생각해서 UI는 크게 신경쓰지 않고 기능을 중점적으로 기획했습니다. 최대한 모든 프로세스가 실제 수강 신청과 유사하게 기획했습니다. 수강 신청 시스템의 핵심은 매크로 방지 문자입니다. 세상에는 참 다양한 매크로 방지 문자 그림이 존재하고 그 중 실제와 유사한 그림으로 선정했습니다. 대략적인 로직은 다음과 같습니다.

 

[1. 시작 페이지] → [2. 과목 목록 및 순서 페이지] → [3. 수강 신청 페이지] → [4. 결과 페이지] → [2. 과목 목록 및 순서 페이지]

 

[3. 수강 신청 페이지]는 실제 시스템과 동일하게 하려고 노력했습니다. 수강 신청은 다음 로직을 반복합니다.

 

[신청] 버튼 → 매크로 방지 문자 창 → 수강 신청 창 → 재조회 여부 창 → 다시 [신청] 버튼

 

올클 시스템의 재미 요소로 신청 성공과 실패로 나눴습니다. 성공과 실패 여부는 다음 기준으로 판단합니다. 2번째 페이지에서 무작위 5개의 과목을 제시합니다. 그리고 서버에서 과목마다 신청 순서를 부여합니다. 사용자는 신청 순서에 맞게 신청해야 합니다. 그렇지 않으면, 여석 부족으로 해당 과목은 신청에 실패합니다. 하지만 모든 과목에 대해 1번 이상 수강신청을 시도하면 [4. 결과 페이지]로 이동하며 소요된 시간을 보여줍니다.

 

개발

워낙 간단한 프로젝트로 개발은 금방 마무리 됐습니다. 7월 23일 시작해서 30일 경에 끝났습니다. 그 후는 배포에 시간을 많이 썼습니다. 개발의 주요 사항으로 매크로 방지 문자, 즉 캡챠를 만드는 데에 시간 적잖은 시간을 투자했습니다.

 

처음엔 캡챠 라이브러리를 사용하려 했습니다. 다양한 라이브러리를 써보고 테스트했습니다. 실제 서비스와 가장 비슷한 그림을 만들어주는 라이브러리로 simplecaptcha를 사용하기로 결정했습니다. 실제와 꽤 다르지만 그나마 비슷합니다. 하지만 simplecaptcha와 java 버전이 달라서 사용 여부에 대해 고민했습니다. 그러던 중 번뜩이는 아이디어가 생겼습니다. '실제 서비스의 캡챠 이미지가 굉장히 단순한데 내가 직접 만들면 될 것 같은데?!' 실제 서비스는 간단한 그라데이션에 4자리 숫자의 캡챠를 사용합니다. 0000부터 9999까지 모든 이미지를 파워포인트로 만들려고 했습니다. 여기서 한 번 더 아이디어가 떠오르는데 java Graphics2D라는 라이브러리로 코드 레벨에서 그림을 그리는 겁니다.

 

이 밖에 개발은 수월하게 진행됐습니다. 지난 프로젝트에서 테스트 코드를 작성하지 않은 것에 아쉬움이 있어서 테스트 코드를 열심히 작성했고 DB 설계도 최대한 낭비되는 자원이 없도록 노력했습니다.

 

배포

이전에 배포해본 경험이 없습니다. 여기저기 주워들은 건 있어서 aws ec2, github action으로 CI/CD 환경을 구축하기로 결정했습니다. aws도 써본 적 없고 github action도 써본 적이 없어서 적지 않게 고생했습니다. 이 과정에서 inflearn의 aws 강의를 수강하고 aws 공식문서를 참고하며 많이 배웠습니다. 특히 aws 비용이 청구되지 않도록 노력했습니다. 프리티어를 사용하면 당연히 비용이 청구되지 않는다고 생각했습니다. 하지만, 2개 이상의 인스턴스, 사용하지 않는 elastic ip address, rds limit 없음, 데이터 이동량, route53 호스팅 등 수 많은 비용이 발생할 원인이 존재했습니다. 고객센터와 소통하면서도 많이 배운 것 같습니다. aws를 사용하고 느낀 점은 'aws는 정말 거대한 서비스이고 정말 잘 만들었다. 그리고 사용하는 모든 것에 대해 비용이 발생한다.' 입니다. 아 그리고, Github action에서 배포되는 과정을 보는 게 참 재밌습니다. 단계마다 실행을 보여주고 모든 과정을 마치고 deploy가 뜰 때, 그 쾌감은… 어떻게 형용할 수가 없습니다.

 

유지 보수

23년 8월 15일 교내 커뮤니티에 배포했습니다. 서버가 트래픽을 어느정도 감당할 수 있을지 몰라서 많은 사람이 쓰길 바라지 않았습니다. 하지만 너무 감사하게도 단숨에 HOT 게시물과 BEST 게시판에 등극했고 정말 많은 사람들이 사용했습니다.

 

 

 

 

커뮤니티에 글을 올릴 때, 가슴이 정말 떨렸습니다. 손수 만든 사이트를 대중에게 공개하는 게 두려우면서 설렜습니다. 반응은 폭발적이었고 커뮤니티와 인스타 스토리는 allcll 사이트로 수강 신청을 연습하고 소요된 시간을 캡처해서 올리는 장이 되었습니다. 그리고 다행히도 사용하면서 다양한 피드백이 들어왔는데, 치명적인 버그는 발생하지 않았습니다.

 

서버 비용은 감당할 수 있는 정도로 발생했습니다. 인터넷에서 과금 폭탄 관련 글을 읽고 최대한 비용을 억제하려 노력했고 그 노력이 통했습니다. 미처 확인하지 못한 부분에서 사소한 비용이 발생했지만 감당할 수 있는 정도입니다.

 

마무리

우연히 수강신청 시스템이 변경되었고 큰 뜻 없이 프로젝트를 진행했는데, 정말 많은 학우 분들이 사용하고 도움이 됐다고 해서 정말 뿌뜻합니다. 제가 여태까지 한 일 중에 이렇게 호응을 받은 일이 처음입니다. 이번 일을 계기로 더 많은 사람들에게 도움이 되는 서비스를 개발하고 싶은 욕심이 생겼습니다.

 

링크
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday