개발/기타

Soldier-Link: 육군훈련소 인편 전달 웹사이트 구축하기

Syphon 2021. 3. 28. 18:42

소개

육군훈련소에 먼저 다녀온 선배님의 블로그 글 덕분에, 인터넷 편지를 보낼 수 있는 더캠프 비공식 API가 있음을 알게 되었다.

일반적인 방법으로 더캠프를 통해 육군훈련소에 있는 훈련병에게 편지를 보내는 방법은 아래와 같다:

  1. 더캠프 앱을 설치하거나 웹을 통해 접속하여 회원가입을 한다.
  2. 훈련병의 생년월일/입영일 등을 입력하고 '관심군인'으로 추가한다.
  3. 입영 1주일 후 정도에 개설되는 '카페'에 가입한다.
  4. 카페에서 '위문편지 보내기'를 통해 인터넷 편지를 작성한다.

대충 봐도 복잡하다. 그래서 나도 선배가 했던 것처럼 나한테 인터넷 편지를 직빵으로 보내주는 웹사이트를 만들어 보기로 했다!

원리는 크게 어렵지 않다. 더캠프 비공식 API는, 웹/앱에서 위문편지를 작성해 전송할 때와 같은 request를 보내준다. 따라서 나는

  1. 지인들이 편지를 쉽게 작성할 수 있는 웹사이트를 구축하고,
  2. 작성된 편지를 API를 통해 나한테 보내면 된다.

당연히 API의 사용을 위해서는 더캠프 계정이 필요한데, 내 계정을 사용하여 작동하도록 구축하였으므로, 말하자면 내가 나한테 인터넷 편지를 대신 보내주는 꼴이다. 결국 이 웹사이트를 이용하면 나에게 인터넷 편지를 보내는 과정이 다음과 같이 간단해진다:

  1. 내 웹사이트에 접속한다: http://54.180.144.74/
  2. 인편을 작성한 후, 보내기를 누른다.

이로써 회원가입을 하고 인적사항을 적는 과정 등이 모두 생략된다.

프로젝트 이름은 고민 끝에 Soldier-Link로 결정했다.

프론트엔드

이왕 만드는 김에, 전역까지 남은 시간 등을 보여주는 메인 페이지도 구현해 보았다. 인터페이스는 아래와 같다:

현재 입대 전이라 완수율이 음수이다. (구현 완료했었던 날에는 -3.1 %였는데 벌써 -0.04 %까지 내려왔다.. ㅠㅠ)

Django를 사용하여 프론트엔드와 백엔드 모두 구현했는데, 이전에는 HTML/CSS 경험밖에 없었던지라 3일간의 삽질이 있었다.
AWS를 이용해 서버를 올리고 Django로 개발하고 deploy하기까지, 정말 이것저것 새로 배운 것이 참 많은 것 같다.

인편 작성 페이지는 다음과 같다:

더캠프 입장에서는 결국 작성자가 내 계정이므로, 내 사이트의 작성자란에 작성된 이름은 제목 앞에 붙여져서 전송되도록 구현하였다.

백엔드

Django로 구현한지라 크게 복잡하지 않았다. 작성된 인편들은 발송 성공 여부와 무관하게 DB에 저장된다.

또 다행히 더캠프 API를 파이썬으로 포팅해놓은 분이 있어서, 선배처럼 웹서버와 별도로 동작하는 전송 스크립트가 필요 없게 되었다.

API를 사용하면서 입영 부대 정보 field에 대한 의문점이 좀 있었는데, 코드를 좀 살펴보니 작년의 더캠프 개편 이후로는 필요 없는 값이었다. 필요 없는 입영 부대 정보를 제거하고, 간단한 코드 오류를 수정한 PR를 열었고, 내 수정이 반영되어 API의 contributor로 이름 올릴 수 있었다. (내 첫 오픈소스 프로젝트 기여다 ㅎㅎ)

더 자세한 구현 사항들이 궁금하다면 깃헙 레포에 올려둔 코드를 직접 확인하면 될 듯하다.

구현한 기능들

  • 전역일까지 남은 시간 / 백분율 (이거 만든다고 JS 처음해봤다..)
  • 인터넷편지 발송 기능
  • 인터넷편지 발송 숫자 제한 기능 (스팸 방지용, 매일 10회의 제한이 있다. 제한을 넘길 경우 인터페이스에서 미리 알려준다.)
  • 발송 성공여부 피드백 (훈련소에 있는 나한테까지 왔는지는 확인 불가능하지만, 더캠프 서버까지 잘 전달되었는지는 확인이 가능하다.)
  • DB 저장 기능 (발송 실패한 편지도 기록된다.)
  • 인편 발송 기능 활성화/비활성화 (카페 개설 이전, 그리고 훈련소 수료 이후에는 비활성화할 것이다. 다만 이게 수동인지라 친구에게 맡겨두고 간다.)


또 이 프로젝트와는 살짝 별개이지만, 네이버 뉴스 홈에서 크롤링한 기사 제목들과 내용을 요약하여 나에게 보내는 스크립트 또한 작성해 두었다. 하루에 한번씩 실행되도록 해 두었다.

결과

결과는 추후에 업로드하겠습니다!

결론적으로 인편 300장을 받았다.

서버 관리는 고맙게도 MathAmp가 맡아줬는데, 솔져 아이디를 받아오는 부분이 제대로 작동하지 않아 내 아이디를 하드코딩해 수정했더니 정상 작동했다고 한다. 만약 누가 따라하게 된다면 필히 테스트해보고 사용하세요..!

UPD) 해당 이슈가 thecampy 2.0.0에서 고쳐져서, 이를 반영해 레포 코드들을 수정해두었다. 이제 될 듯 하다..!

API 및 프로젝트 소스 링크


참고하시고, 필요하다면 제 동의 없이 사용하셔도 됩니다!
(다만 저한테 튜닝해놓은 사항들이 많아서 수정을 좀 해야 할 수도 있습니다... ㅎ)