도림.로그

Tags

Series

About

사이드 프로젝트 백엔드를 공짜로 배포하려면 (OCI, MongoDB Atlas)

2023. 01. 22.


    개요

    보통 사이드 프로젝트를 진행하면 가장 골머리를 앓게 되는 부분 중 하나가 배포이다.
    배포를 하지 못하면 일단 다른 사람들에게 내가 진행한 프로젝트를 보여주기가 어렵다.
    이에 더하여, 보통 프로젝트를 풀스택으로 진행하지 않는 이상에야 가장 기본적으로 프론트엔드와 백엔드를 나누어 진행하게 될텐데, 프론트엔드 개발자에게 API를 전달하는 것도 애매해진다. 그냥 “여기여기에 접근하시면 개발하실 때 불편함 없으실 거에요”로 끝낼 수 있는 문제를, “혹시 로컬에 DB 설치된 것 있으세요? Docker는 있으세요? 아… 램 용량이 혹시…?” 와 같은 의사소통 비용과 실제 환경 구축 비용을 발생시키는 문제로 발전시키기 십상이다.
    이러한 문제를 해결하는 데에 도움이 될 수 있는 인프라 관련 서비스를 소개하려 한다. 그 주인공은 Oracle Cloud Infrastructure와 MongoDB Atlas이다.

    Oracle Cloud Infrastructure

    우리가 흔히 접하는 가장 많은 클라우드는 대개 AWS 정도일 것이다. 아쉽게도, AWS는 프리티어 이후에는 무료로 사용할 수 있는 인스턴스가 존재하지 않는다. 무료로 배포하기 위해서는 Docker 이미지를 Lambda에 배포하는 방법 정도를 고려할 수가 있는데, 안그래도 프로젝트 기동 시간이 오래 걸리는 Spring Boot 프로젝트를 Cold Start 하는 상황은 여러모고 귀찮은 요인이 될 수 있다.
    그런 당신을 위해, Oracle에서 서비스하는 OCI가 있다. AWS만큼 콘솔이 편리하지도 않고, 뭔가 다른 부분이 있어서 사용하기가 매끄럽지 않은 부분이 있을 수 있지만 OCI에는 프리티어에서도 무료로 사용할 수 있는 인스턴스를 제공한다는 큰 장점을 가지고 있다. (인스턴스 이외에 여러 무료 서비스들도 존재한다.)
    나는 ARM 3-Core / 18GB RAM 인스턴스를 생성해서 사용하고 있다. 잘못 본 수치가 아니다. 실제로 18GB RAM 인스턴스이다. 넉넉한 램을 가지고 있기 때문에, Docker 컨테이너 몇 개 띄우는 걸로는 전혀 부담이 되지 않는다는 압도적인 장점이 존재한다. 이는 같은 프리티어에서도 고작 Spring Boot 프로젝트와 DB만을 띄워두고도 혹시나 CPU나 RAM이 터져서 서비스가 뻗을까봐 걱정해야 하는 AWS t2.micro 인스턴스에서의 경험과 상반된다.
    비록 ARM 인스턴스에서는 aarch64 아키텍처로 빌드가 된 Docker 이미지만 사용할 수 있다는 제약이 있긴 하나, 일단은 무난하게 사용할 수 있는 리눅스 환경을 제공한다. 일단 Java Spring Boot(AdoptOpenJDK8)나 node 16 정도의 환경에서는 아무런 문제가 없다. 여기에 더하여, x86, amd64 환경의 인스턴스도 물론 무료로 띄울 수 있는 옵션을 제공한다. (다만 이 경우, Ubuntu를 사용 가능한지는 미지수이다.)

    MongoDB Atlas

    보통 서버를 띄운 이후 가장 비용 부분에서 고민을 하게 만드는 녀석이 DB이다. AWS RDS를 사용하면 아무리 적은 비용을 사용하려고 해도 하루에 3시간 이상 투자하기도 어려운 사이드 프로젝트를 위한 것 치고는 꽤 많은 비용을 지불해야 한다. 이런 상황에서 MongoDB Atlas는 꽤 좋은 선택지가 될 수 있다.
    MongoDB Atlas를 Shared 플랜으로 사용하면, MongoDB 데이터베이스를 무료로 호스팅 받아 사용할 수 있다. 물론 상기한 OCI 인스턴스 내에서 도커에다가 원하는 DB 컨테이너를 띄워서 사용하는 방법도 매력적이지만, 서버 인스턴스와 DB 인스턴스를 분리할 수 있다는 점과 MongoDB Atlas에서 제공하는 여러 부가 서비스(돈을 좀 낸다면 확장도 용이하고, 데이터를 웹 상에서 볼 수 있는 콘솔도 제공한다)도 누릴 수 있으니, 가벼운 사이드 프로젝트를 위해서는 고려해볼만 하다.
    더불어 Spring을 학습하는 측면에서는 WebFlux와 함께 사용할 때, DB 레이어부터 Controller 레이어까지 손쉽게 Full Reactive Stack으로 구성할 수 있다는 장점도 가지고 있다. (RDB + R2DBC라는 선택지도 있지만)

    정리

    간단히 OCI와 MongoDB Atlas를 소개해보았다. 필자도 이제 막 사용해보기 시작하는 서비스들이라서 벤치마크를 포함한 디테일한 리뷰를 하기는 그렇지만, 간단한 사용례에서는 충분히 쓸만한 옵션인 것 같다.
    사이드 프로젝트 배포, 특히 백엔드 배포를 고민하고 있는데, AWS에 쓰는 돈으로 국밥 한 그릇 더 든든하게 먹고 싶은 개발자들에게 이 두 가지 솔루션을 고려해보는 것을 추천한다.

    끝.

    #java#spring#node#project#cloud#infra#deploy

    © 2024, Built with Gatsby