
이 글은 우리 가족의 SNS인 Kimitter를 회고하기 위한 목적으로 작성했습니다.
시작하며
- 이 글은 가족 4명만 쓰는 폐쇄형 SNS Kimitter를 2주간 개발한 과정을 회고하는 글입니다. 기획부터 배포까지 혼자 진행했고, 떠오르는 것 위주로 기록하려고 합니다.
- 사실 "회고"라고 하기엔 프로젝트가 아직 끝나지 않았습니다. 가족들이 자주 쓰고 있고, 저도 계속 기능을 붙이고 있습니다. 그래도 2주라는 집중 개발 기간이 끝난 지금, 한번 정리해두고 싶었습니다.
Kimitter 소개
- Kimitter는 우리 가족 4명만 사용하는 폐쇄형 SNS 앱입니다. 외부 가입은 차단해두었고, 사진이나 GIF, 동영상을 공유할 수 있습니다. UI는 Threads를 많이 참고했습니다.
- 이름은 우리 가족의 성인 "Kim" + Twitter에서 따왔습니다.
왜 만들었나
- 12월 중순 퇴사 후 약 한 달간 개발을 쉬다.. 가족과의 대화에서 항상 나오던 "가족끼리 추억을 공유할 수 있는 매개체가 있었으면 한다"라는 말에서 시작된 프로젝트입니다.
- 카톡이나 기존 클라우드 서비스를 채용하지 않고 굳이 SNS 형태로 만든 이유는 기술에 있어 굉장히 보수적인 부모님들이 안심하고 사진을 올릴 수 있도록 집안에 있는 NAS에 모든 데이터가 저장되도록 만들 수 있었고, 카톡은 구독하지 않으면 사진이 삭제되는 문제점 및 대화가 빠르게 묻히는 경향이 있고, 클라우드 서비스에는 한줄 평이나 관련한 많은 이야기들을 텍스트로 공유하기가 어렵다고 생각이 들었기 때문입니다.
기능 소개
- 홈 화면 / 글 상세 보기


기본 레이아웃은 Threads를 벤치마킹하여 개발하였습니다.
블랙 / 화이트/ 그레이 기반으로 색상을 조합하였고, 봇들은 옆에 뱃지를 달아주는 방식으로 구분을 해주었습니다.
오른쪽 햄버거 버튼에서 봇들의 글을 보거나 끄는 옵션이 있어 가족들의 글만 보고 싶다면 해당 옵션을 끄면 됩니다.
게시글 상세보기 / 댓글은 완전 Threads처럼 개발을 진행할까 했는데 저희 가족 특성상 딱히 쓰레드를 파고 들어가는 댓글이 많이 없을 것이라 예상되어 익숙한 댓글 / 답글 형식으로 만들었습니다.
- 봇(뉴스봇, 주식봇)


매일 아침 뉴스봇이 네이버 뉴스 API를 활용하여 뉴스 요약을, 매주 토요일 주식봇이 한국투자증권 KIS API에서 거래량 TOP 5를 가져와 게시해줍니다.
아직은 간단한 내용이기 때문에 gpt-4o-mini를 활용중입니다.
다음 계획으로는 글 또는 댓글을 달면 자동으로 읽고 댓글 / 답글을 달아주는 서비스를 만들어보고 싶네요.
- 캘린더

어머니의 아이디어로 나온 캘린더
가족들이 하나의 캘린더에 일정을 정리해두면 그걸 보고 우리가 다음 여행 일정을 잡자~라는 의견이었습니다.
각자 이 캘린더에 본인의 일정을 등록해두면 모두가 볼 수 있습니다.
앞으로는 기존 구글 / 애플 등의 캘린더와 연동하는 기능을 넣으려고 했습니다.
가족 중 저만 캘린더 앱을 쓰고있어서 문제지만...
- 새 글 쓰기 / 새 알림 쓰기


이 부분도 Threads와 유사하게 개발하였습니다.
푸시 알림도 활용해서 가족들에게 알림을 보낼 수 있도록 소소한 재미포인트도 주었습니다.
가끔 아빠가 집에 오라고 알림 주더라구요 ㅋㅋ
- 내 활동 / 내가 받은 알림


일반적인 앱과 동일하게 댓글 / 답글 / 좋아요를 받으면 알람이 나옵니다.
추가적으로 글을 작성하면 모두에게 알림이 가도록 만들었습니다ㅎ 어차피 가족 앱이고 많은 사람이 글 올리는 그런 장소도 아니니까요
- 프로필 상세 페이지


내가 올린 글, 답글을 쓴 글, 내가 올린 미디어 모아보기
이렇게 구성이 되어 있습니다.
내 프로필에서는 프로필 수정 버튼이 추가되어 있습니다.
기술 스택
| 프론트엔드 | React Native + Expo |
| 상태 관리 | Zustand |
| 백엔드 | Express + TypeScript |
| ORM | Prisma |
| DB | PostgreSQL |
| 인프라 | Docker + Synology NAS |
| 외부 접속 | Cloudflare Tunnel |
빠른 개발이 중요하다고 생각해 이전에 활용해본 경험이 있는 스택으로 진행하였습니다.
저를 제외한 모든 가족이 갤럭시를 사용중이라 크로스플랫폼인 React Native + Expo로 개발을 진행하였고,
특이사항으로는 이전까지 한번도 진행하지 못해본 배포 자동화를 성공시켰습니다.
배포 자동화
초기 - 수동 배포
초기 배포는 전부 손으로 진행했습니다.
로컬에서 이미지를 빌드하고, Docker Hub에 올리고, NAS에 SSH로 접속해서 해당 이미지를 내려받고 이미지를 컨테이너에 올리는 작업을 반복했습니다.
코드 한 줄 고칠 때마다 이 과정을 반복하는 게 너무 귀찮더라구요. 실사용 중에 버그를 발견하면 빨리 고쳐서 배포해야 하는데, 매번 여러 단계를 거치다 보니 자동화를 해야겠다는 생각이 자연스럽게 들었습니다.
GitHub Actions: git push만 하면 끝
첫 번째로 한 건 GitHub Actions를 붙이는 것이었습니다.backend/ 하위 파일이 변경되면 자동으로 Docker 이미지를 빌드해서 Docker Hub에 push하는 워크플로우를 만들었습니다.
이후 봇도 마찬가지로 bot/ 경로에 트리거를 걸었습니다.
NAS 자동 동기화: 5분마다 새 이미지 확인
NAS에서 새 이미지를 가져와서 컨테이너를 재시작하는 건 별도로 처리해야 합니다.
NAS Task Scheduler에 5분마다 실행되는 스크립트를 등록했습니다.
해당 스크립트는 Docker Hub에서 새 이미지가 있으면 자동으로 pull하고 컨테이너를 재시작합니다.
결과적으로 전체 배포 흐름은 이렇게 됩니다:
코드 수정 → git push
→ GitHub Actions: 이미지 빌드 + Docker Hub push (약 2-3분)
→ NAS cron (5분 이내): 새 이미지 감지 → pull + 재시작
→ 총 10분 이내에 프로덕션 반영수동으로 하던 5단계가 git push 한 번으로 줄었습니다.
Expo Dev 컨테이너를 활용한 앱 설치 자동화
한 가지 더 자동화한 게 있습니다. NAS에서 돌아가는 Expo 개발 서버 컨테이너인데, 애플의 정책을 우회하려 하다 보니 이 부분도 자동화 시킬수밖에 없더라구요.
애플 생태계에서 Apple Development 계정 결제를 하지 않고 앱을 테스트하려면 두 가지 옵션이 있다고 생각했습니다.
- Xcode로 앱을 빌드하여 휴대폰에 직접 설치 : 1주일간의 테스트 기간이 끝나면 앱이 더이상 실행되지 않아 계속 실행하기엔 매우 귀찮습니다.
- Expo Go 앱을 활용하여 빌드해서 휴대폰에 설치 : 개발중인 노트북과 휴대폰이 같은 네트워크에 연결되어있을 때 Expo Go를 통한 설치가 진행되는데, 이 부분을 우회하였습니다.
- 기존에는 앱을 들어가기 위해선 노트북을 켜 앱을 빌드하고, 같은 서버에서 휴대폰에 설치해야 했습니다. 그러다보니 노트북이 없이는 앱을 활용하기 힘들었고, 앱의 원래 목적인 "밖에서도 원활하게 사용하기"와는 많이 멀어졌습니다.
- NAS를 활용할 수 없을까? 라는 질문에서 시작된 프론트엔드 배포 자동화 시스템은, 프론트엔드 자체도 도커에 올려 NAS에 업로드하여 해결하였습니다.
- Expo Go는 개발 서버의 호스트 주소로 번들을 요청하는데, 이 값을 NAS의 로컬 IP가 아닌 Cloudflare Tunnel 도메인으로 설정하면 같은 네트워크가 아니어도 Expo Go에서 앱을 불러올 수 있습니다.
잡담
퇴사 후 처음으로 만들어본 프로덕트입니다.
개발을 쉬었던 한 달 간 정말 많은 뉴스를 보았고, 다양한 AI 기술들이 발전하는 걸 보면서 심장이 다시 뛰는게 느껴지더라구요.
이번엔 그저 기존 프로덕트(Threads 등)를 카피하는 수준 정도의 앱이지만 다음에는 더 재미있는걸 만들어보고 싶었습니다.
당분간 이 프로젝트는 가족간의 앱 이상으로 확장시키진 않을 계획입니다.
이 서비스를 확장하여 운영한다고 했을 때 수요가 크지 않을 것이라 생각합니다. (인스타그램, 밴드, 카카오톡으로도 불편함을 느끼는 사람이 많지 않다 느꼈습니다)
이후에는 앱스토어에 출시까지 가능할 만한 다른 프로젝트나 평소 관심있었던 threejs 공부나... 암튼 다른 프로젝트를 진행해보려구요.
취업 준비도 해야되구요.
이전부터 친구 / 가족 등 적은 수의 인원들끼리만 사용할 폐쇄성 강한 프로그램을 만들고 싶어했었는데,
가족들의 참여도가 생각보단 좀 낮아 엄청 만족스럽진 않지만ㅜ 아무튼 이번 프로젝트로 약간의 사용자 및 피드백 경험을 받게 된 것 같습니다.모두의 참여를 늘릴만한 아이디어가 생기면 다시 돌아오도록 하겠습니다.
아이디어 있으신분은 연락주세요ㅎ
'코딩 > 프로젝트' 카테고리의 다른 글
| npm WARN deprecated tar@2.2.2 에러 (0) | 2024.03.21 |
|---|---|
| 광고 중개 서버 개발 (0) | 2024.02.29 |
| [PBL 부트캠프] 1주차 (1) | 2024.01.21 |
| 월간 신천팟 (3) | 2024.01.15 |
| 월간신천팟(2) (0) | 2023.11.16 |