PENTAGON DevLog

[1인 1프로젝트] #1. 디미몬스터를 개발하다

한국디지털미디어고등학교의 익명사진공유 서비스 "디미몬스터"

2024년 04월 22일 (1개월 전)
6

1. 개발하게 된 이유

우리 학교는 특성화고인지라 다양한 전문교과과목이 존재한다.

그 중 공업 일반 이라는 과목이 있다.

우리의 훌룡한 공업 일반 이호성 선생님께서는, 학생들의 자기계발을 위해 수행평가로 1인 1프로젝트를 진행하신다.

1인 1프로젝트는 공업일반에 조금이라도 관련된 자기계발 프로젝트를 진행하여,
개인 블로그(필자는 Velog를 사용한다)에 기록을 남기는 활동이다.

현재는 모든 개발이 완료되었지만, 우리가 여태까지 작업한 과정을 되돌아 보며 글을 써보고자 한다.


2. 디미몬스터 소개

디미몬스터는 지금 https://dimi.monster에 배포되어 있다.
그러나 이 글을 보는 당신이 한국디지털미디어고 학생이 아니라면 로그인이 불가하다....

디미몬스터 랜딩 페이지디미몬스터 랜딩 페이지

디미몬스터는 한국디지털미디어고 학생들을 위한 내부 익명 사진공유 SNS이다.

우리는 언제나 다양한 사진을 찍고 공유하며 놀았다.
그런데, 이러한 즐거움을 학교 모두와 나눌 수 있다면 더 좋지 않을까? 라는 생각에서 디미몬스터는 탄생하게 되었다.

디미몬스터는 학교 학생이라면, 누구나 사진을 자유롭게 업로드 할 수 있고 좋아요를 눌러 반응할 수 있다.
댓글 기능은 학교폭력 가능성이 있으므로 구현하지 않았고, 영구적으로 제작 할 계획이 없다.


3. 개발팀 구성

기획 및 디자인: @budung


프론트엔드 개발: @ldhhello


백엔드 개발: @seonwoo0808

팀원들의 Github 프로필은 여기 에서 확인할 수 있다.


4. 개발 스택

내가 담당한 부분은 백엔드이므로, 백엔드 스택 위주로 설명하도록 하겠다.

1. Go언어

먼저, 언어는 Go언어를 챼택하였다.

이미지에 대한 업/다운로드가 메인인 서비스 임에 따라, 처리속도가 관건이었다.
마음 속으로는 이번 기회에 Rust를 배워보고 싶었지만, 고3에게 그런 시간적 여유는 없었다...

그나마 내가 잘 다룰 수 있는 Memory-Safety를 충족하는 컴파일 언어가 Go언어인지라 선택하게 되었다. (요 근래 사용하는 사람이 늘은 것 같다)

2. Fiber 프레임워크

Go언어 백엔드 프레임워크인 gin, echo를 모두 사용해보았지만 결국 fiber에 정착하게 되었다.

장점은, 기본 라이브러리인 net/http를 사용하지 않고 fasthttp라는 더 빠른 라이브러리를 사용해서 구현되었다.

단점은, 아무래도 기본 라이브러이닌 net/http보다는 업데이트 주기가 느리다는 것이지만, 그렇다고 너무 느리지도 않은 것 같다. (작성일 기준으로도 마지막 Commit이 2주 전이다)

3. MongoDB

이번 프로젝트를 기회 삼아 MongoDB을 배워보고자 했기 때문에 챼택하게 되었다.
현업에서 많이 사용하면서 성능과 NoSQL의 유연성이 충분히 검증된거 같아, 나도 도입해보기로 했다.
(필자는 Redis, RDBMS, S3 만 써봤다...)

4. Docker / Docker Hub / Github Action

Docker는 설명을 생략하겠다. 너무 편하다.

Public Repository로 배포 함에 따라, Github Action을 자유롭게 사용할 수 있었다.
Github 'main' Branch에 Commit이 올라오면 Github Action이 빌드하고 Docker Hub에 올린 뒤, Agent가 프로덕션 서버에 접속해 Docker Hub에서 Image를 내려받고 자동으로 배포한다.
(무중단 배포를 구현하기 위해 k8s도 고려했으나, 일단 보류했다)

5. 마무리

간략히 디미몬스터가 어떤 서비스인지, 어떤 기술을 사용했는지, 왜 만들었는지에 대하여 소개하였다.
다음 글 부터는 각 feature를 어떻게 구현하였는지 공유해보도록 하겠다.