# [개발기] New Mune, 백엔드 API 서버 구축

평소 온라인 강의를 할 때 줌을 통해 진행을 하면 실시간 채팅을 확인하느라 강의의 흐름이 깨지거나, 혹은 강의를 보시는 분들도 다른 분들과 소통을 강의 화면 내에서 진행을 하지 못하는 점 등이 아쉬웠다.

그래서 개발하여 사용하던 뮨이라는 서비스가 있었는데, 기존 서비스는 웹소켓이 아닌 파이어베이스의 Firestore로 데이터베이스 Listening을 통해 구현을 하고 있었고, 실시간 협업 보드 등의 추가 개발 기능에 대한 부분에서 다소 아쉬운 감이 있던 차에 아예 백엔드를 통채로 독자 서버로 구축하는 새로운 개발 작업을 진행했다.

![Image](https://upload.cafenono.com/image/slashpagePost/20260103/221834_E1zWIZbL4frTlMi0AI?q=80&s=1280x180&t=outside&f=webp)

  

![Image](https://upload.cafenono.com/image/slashpagePost/20260103/221751_AftiIeQe0KIbho92ig?q=80&s=1280x180&t=outside&f=webp)

다양한 기능들이 있지만, 채팅 자체가 메인이라 웹소켓 통신으로 유기적으로 서버와 클라이언트가 간편히 통신할 수 있는 구조를 활용했고, 사용하는 리눅스 VM의 비용을 줄이기 위해 컴퓨팅 성능을 낮춘 관계로 프론트는 외부 PaaS를 통해 리소스를 분산시키기로 했다.

대부분 바이브 코딩 입문자들은 주로 파이어베이스의 파이어스토어의 OnSnapshot, 혹은 Supabase의 Realtime DB로 구현을 하면 될테지만, 결국 사용자가 늘고 트래픽이 늘면 PaaS 의존성에 대한 경제적 비용이 상승하게 된다. 게다가 실제로 웹소켓 통신의 장점도 꽤나 크기 때문에 아예 이번에는 독자 서버로 가닥을 잡았다. 

  

이번 플랫폼은 간단히 다음과 같은 형태로 구현된다.

- 개발 레포 : 프론트 / 백엔드 모노레포 구조

- 프론트는 Vercel로 배포

- API 서버는 리눅스 VM / NodeJS / Apache 리버스 프록시 / SSL  

- DB는 PostgresQL

바이브 코딩을 주로 즐기는 분들은 백엔드를 주로 Supabase를 사용하는게 트렌드라면 트렌드인데, 특히 MCP 등으로 그냥 개발을 하게 되면 결국 프론트에서 Supabase를 API 통신으로 제어하는 형태가 되고, 결국 보안 이슈가 터진다. 특히 초보분들에게는 귀찮고 까다로운 RLS 설정에서 헤매는 경우가 많고, 인공지능으로 보안 이슈를 잡다보면 서비스 기능이 동작이 안되는 경우가 허다하다. 특히 전혀 DB 구조와 설계를 염두해두지 않고 오로지 바이브 코딩으로 진행하다 보면 결국 DB 단에서 꼬여 RLS 설정을 제대로 하기 힘든 경우가 생긴다. 이런 경우는 대부분 프론트에 노출된 Anon 키만으로도 데이터베이스 통채로 털릴 수 있다.(실제로 친한 선생님 중 유사한 사례를 겪으신 분이 계신다.) 이건 사실 파이어베이스도 동일하다.

그래서 역시나 가장 좋은 건 철저히 백엔드를 통해 DB를 읽고 쓰는거다. 그러기 위해서는 역시나 백엔드 API 서버를 구축해야한다. 백엔드 서버를 구축해도 좋고, 서버리스 함수나 엣지 펑션 등으로 백엔드 관련 작업을 진행해도 좋다. 다만, 역시나 사용자가 대규모로 생기면 서버리스나 엣지 펑션도 결국 비용 문제로 귀결 되기 때문에 가장 좋은 건 직접 구축.

그래서 이번 프로젝트는 VPC 서버를 통해 모든 것을 직접 세팅해서 개발을 완료했다. 관심 있는 분들이 계실까 작업했던 내역들을 요약하면 다음과 같다.

- API 서버단 : VPC 세팅, 리눅스 VM 생성, 공인 IP, DNS, 서브넷 세팅, ACG 포트 설정, 아파치 데몬 가상 호스트 설정, NodeJS를 위한 아파치 리버스 프록시 설정, SSL 보안 인증서 발급 및 자동 갱신 세팅, PostgresQL 설치 세팅, 리모트 DB 개발을 위한 SSH 터널링, 서버 메모리 부족을 위한 스왑 메모리 설정     

- 프론트엔드 : 제일 세팅 할게 없다. 개발, 배포 환경에서 로컬, 리모트 백엔드 API 주소를 위한 환경변수 세팅, 백엔드 프론트 도메인 일원화를 위한 Vercel용 서브 도메인 세팅  

별건 아니어도 API 서버를 맨땅부터 구축해보면, Supabase / Firebase 가 얼마나 간편한 PaaS / BaaS 인지 체감하게 된다. 백엔드 서버를 직접 구축하면 비용적 측면에서의 장점, 백엔드를 직접 운용하는데서 오는 다양한 제약 제거(콜드 스타트, 엣지 펑션 기능 제한) 정도의 장점이 있을 뿐, 바이브 코딩용으로 사용하기에는 이미 어마어마하게 귀찮다. 

그럼에도 불구하고 사용하는건 모든 것을 내가 통제 가능하다는 가장 큰 장점 때문이다. 앞으로도 이번에 구축한 백엔드 서버를 사용해서 추가적인 여러 프로젝트를 진행할 계획이니, 앞으로의 개발 내용도 본 블로그를 통해 점차 업데이트 할 예정이다.

For the site tree, see the [root Markdown](https://slashpage.com/lop.md).
