모여서 하기 좋은 게임: 마니또

Da Woon Kim·2023년 11월 26일
0

학회 발표

졸업 논문을 완성하기 전에 제주도에서 학회 발표가 있었다. 마침 교수님들도 참석을 못하시고 나의 동기인 친구들과 반년 늦게 졸업하는 형 한명이 2022년 제주도 학회에 참석하게 되면서 다같이 지낼 수 있는 숙소와 함께 포스터 발표가 끝나고 모여서 할 수 있는 놀이나 게임을 찾아보고자 하였다.

여기서 제안된 게임은 바로 마니또. 단순하게 생각해서 마니또 게임은 굳이 컴퓨터를 빌리지 않고 진행할 수 있다. 그러면 굳이 왜 만드냐고 의문이 들 수 있다. 왜 만들었을까?

사회자가 필요한 게임

마니또는 모여있는 사람들의 이름이 모두 하나씩 쓰여져 있는 쪽지나 제비를 통해 뽑으면서 그 사람을 위해 여러가지 선물을 준비하거나 선행을 베푸는 게임이다. 이번 게임은 선행을 베풀기 보다는 그 사람에게 어울리는 선물을 10000원 ~ 20000원 사이 가격으로 선물하기로 하였다.

그러나 이 방식을 선택하게 되면 참석 인원 중 한명은 무조건 사회자가 되거나 외부에서 사회자를 섭외해야하는 번거로움이 존재했다. 그리고 사회자가 된 사람은 선물을 주고받는 과정에서 같이 즐기지 못하고 생각 하고 있는 선물도 보여주지 못한다. 따라서 아쉬움이 클 것이다.

기존에 존재하는 어플

그러면 휴대폰에서 어플을 찾아서 하거나 분명 이렇게 생각한 누군가가 만들었을 것이다. 라고 생각해서 나는 어플과 블로그, 다양한 게시글을 전부 찾아보면서 확인해봤다. 하지만 결국에는 사회자로 한명이 필요한 기능이었고, 모두가 참여하지 못했다. 따라서 이것을 직접 구현 하고자 직접 코드를 생성하고 보내는 기능을 만들었다.

마니또 코드

코드의 구성

코드는 간단하게 두 기능을 구현해야 했다.

  1. 랜덤 샘플링을 통해 각자 이름이 자신이 나오지 않게 배정
  2. 각자에게 메일을 보내야 하는 기능

두 기능을 준비해야 했다. 솔직히 1번 기능은 그렇게 오래 걸리지도 않았다. 뚝하면 딱하고 금방 짜는것을 오래 걸릴것도 없었다. 2번이 진짜 문제였지...

1. 랜덤 샘플링

알고리즘을 표현해보면 다음과 같은 과정을 지녔다.

여기서 섬 모양은 [1, 2, 3, 4, 5, 6, 7]의 7명의 사람이 있을 때 [2, 3, 1], [7, 6, 5, 4]와 같이 각자의 섬으로 나뉘어져 선택되는 경우를 말한다. 꼬리잡기의 사이클처럼 한명씩 모두 꼬리를 물고 물리는 것을 원하는 경우도 있기 때문에 다음과 같이 옵션을 하나 추가해서 섬모양을 선택 가능하게 두었다.

2. 이메일 전송

이메일 전송은 생각보다 간단했다. 네이버의 메일을 이용하기 위해 smtp기능과 email기능을 활용하였다. 두 기능은 기본적인 모듈로 collections처럼 파이썬이 존재하면 존재하는 기능이었다. 따라서 네이버의 smtp 이름과 포트 번호를 기본적으로 활용하였다.

다음으로 이메일에 대한 내용은 파이썬으로 직접 만들어 전송하였다. 각 보내는 사람에 맞춰 순서대로 보내야지 안그러면 랜덤 샘플링을 하더라도 의미가 없어진다. 우연찮게 의도대로 되는 경우도 있겠지만 아닐 확률이 더 높을 것이다.

DashBoard

파이썬으로만 실행하면 기능을 아무리 잘 알아도 보이는 것은 기나긴 코드밖에 안보일 것이다. 다음에 다른 것으로 활용하기 위해서라도 다른 내용을 받아와야 되는데 이 블로그나 다른 곳의 페이지 처럼 버튼이나 입력 텍스트에 맞춰 전송이 된다면 보기 깔끔하고 누가봐도 구현을 해냈다 라는 느낌이 강할 것이다.

다음은 구현한 대시보드 페이지이다.

간단한 주의사항과 각 칸에 입력값을 입력하면 전송할 수 있다. 개인적으로 비밀번호를 마스킹해서 나와야 하는데 그냥 나와서 어떻게 수정할지 고민하다가 GPT가 한번에 출력하는 걸 보고 GPT 왜 쓰는지 깨달아 버렸다.. 이 페이지는 다음과 같은 순서로 작용해야 한다.

  1. Sending_players.csv 파일을 등록해야한다. 따라서 파일이 존재하는 경로를 찾아야한다.
  2. 등록에 성공하면 네이버 아이디 비밀번호와 맞춰서 입력하고 원하는 옵션을 선택한 다음 전송 버튼을 누른다.

이 순서대로 진행하면 다음과 같이 네이버 메일에 이렇게 뜬다.

각자의 이메일 정보는 소중하니까 마스킹하기로 한다. 메일 전송에 성공하는 것과 이렇게 다섯건의 메일이 보내져있으면 성공이다.

여기서 주의할점은 보낸 사람은 내용의 전부를 확인할 수 있다. 따라서 재미를 위해서라면 보내진 메일을 꼭 지우는 것을 권장하고, 보낸이에 존재한다고 해서 받는이 목록에 같이 들어가 있는 것은 아니다. 따라서 보내는 이도 다른 메일 하나를 추가적으로 반영하여 같이 진행하면 틀림없이 좋은 마니또 게임을 진행할 수 있을 것이다.

실제 사용 후기

실제로 대학원 친구들과 7명이서 활용해봤다. 예시는 재사용 하기 위한 멤버 5명이지만 7명이서 진행할 때 깔끔하게 진행되었다. 사실 나는 그렇게까지 마니또에 대해 의미를 체감하지 못해서 신경 안쓰려다가 꼭 신경 쓰란말에 뜨끔했었다. 허허허 7명이서 서로 관찰하고 교환할 때 의미를 들으면서 그럴듯하고 재미있게 흘러가는 모습에 괜히 기쁘고 뿌듯했다. 사실 의미있는 선물보다는 받았을 때 살짝 킹받지만 웃긴 선물을 하고싶었다. 근데 이거 생각하기 너무 어렵더라. 혹시 이러한 선물 아이템이 있으면 추천 해주길 바란다.

profile
Data Science를 정복하기 위해 기록용 Velog

0개의 댓글