24년 4학년 1학기 '네트워크 프로그래밍' 수업에 진행한 개별 텀프로젝트
주제는 네트워크 소켓을 이용해 네트워크 관련 기능을 구현하는 것.
나는 게임을 좋아하는 편이라서 게이머들이 자주 이용하는 메신저 앱인 디스코드에서 자주 이용하는 봇을 만들기로 했다.
퀴즈를 출제하는 봇을 제작하여 사용자가 실시간으로 봇과 메세지를 주고받기도 하고 사용자의 답변을 퀴즈봇이
정답인지 오답인지 처리하는 그런 기능들이 이 주제에 적합하다고 생각했다.
대표적으로 사용한 네트워크 기술 : SOCKET.IO
JavaScript 라이브러리인 SOCKET.IO를 이용해서
실시간으로 서버와 클라이언트가 양방향으로 메세지를 주고 받으며 이벤트 처리도 가능하게 제작.
기능 소개
/도움 : 내가 봇에 입력할 수 있는 명령어들을 보여줌.
/점수 : 현재 데이터베이스에 저장된 사용자의 점수를 알려줌.
/퀴즈시작 : 데이터베이스에 저장되어있는 퀴즈를 출제함.
-사용자가 입력한 답이 정답인지 오답인지 구분 가능.
-제한시간안에 사용자가 답이 없을 경우 시간초과 답변을 하도록 설정.
-데이터베이스 안의 퀴즈를 모두 출제하면 퀴즈를 끝내도록 설정.
추가 기능
원래는 퀴즈 봇을 이용하여 사용자와 봇이 메세지를 주고받을 수 있도록 하는 것까지가 목표였으나
욕심이 생겨서 추가 기능을 제작함.
- 데이터 베이스에 미리 저장되어있는 퀴즈가 아니라 사용자가 퀴즈를 추가할 수 있게 만들자
- 점수판 명령어 대신 웹사이트에서 점수판을 확인할수 있게 만들자
1. 퀴즈 추가 기능
제작자가 미리 넣어둔 문제 대신 사용자가 문제와 정답을 직접 입력하여 추가할 수 있도록 제작. (HTML사용)
3+3? 질문을 추가한 이후 퀴즈를 시작했을 때, 봇이 추가된 질문도 제시하고 사용자의 정답을 인식함
2. 점수판 기능
점수판 같은 경우에는 디스코드 내부에서 명령어로 확인할 수 있지만
네트워크 소켓 기능을 더 이용해보고 싶어서 HTML로 따로 구현 시도.
사용자의 ID와 점수를 코드 내의 데이터베이스에서 불러오기는 성공했으나
사용자의 ID를 우리가 흔히 부르는 닉네임으로 변경하는것엔 실패함 (디스코드 내부 시스템을 좀 더 살펴봐야할 것 같음)
전체 시연 영상
퀴즈 기능 (정답, 오답, 시간초과)
점수 저장 기능 (점수, 점수 초기화, 점수판)
퀴즈 추가 기능 (HTML)
점수판 기능 (HTML)
프로젝트 마무리
우선 네트워크 관련해서 프로젝트를 진행해본것은 처음이어서
일반 코딩이 아닌 서버와 클라이언트의 관계를 파악하며 전체적인 코드 구조를 구성하는 것이 쉽지 않았고 어색한 부분이 많아 아쉬움이 남는 프로젝트였다.
학교에서 진행했던 프로젝트는 끝났지만 이후에 도전하고 싶은 것
1. HTML점수판에서 유저 ID를 닉네임으로 변경하고, HTML을 좀 예쁘게 꾸미기
2. 문제와 정답을 리스트가 아닌 데이터베이스에 저장하도록 하여 수정, 삭제가 편리하도록 구현하기
추가 기능중에 퀴즈 추가 부분에서 기존 퀴즈들은 리스트를 이용하여 퀴즈를 나열했기에 퀴즈를 추가하는 것은 가능하지만 수정이나 삭제는 어렵다. 이를 처음부터 리스트가 아닌 데이터베이스를 이용하여 문제와 정답을 저장했다면 퀴즈 추가, 수정, 삭제 등의 기능을 더 편리하게 이용할 수 있었을텐데 하는 아쉬움이 남는다.
ps. 네트워크 프로그래밍 A+ 받았으니까 한잔해 ~~