Parse Server Migration 과 aaS
기존의 facebook의 BAAS(Backend As A Service)인 Parse.com 이 2017.01.28 종료함에 따라 Parse.com의 서비스를 사용하고 있는 우리 서비스를 어디로 서버 이전해야하는 지에 대한 논의가 되었습니다.
그렇게 이 글을 쓰게 되었습니다.
같은 서비스를 제공하고 있는 아마존의 AWS Mobile Hub 도 있고 Parse.com에서 추천하고 있는 AWS 기반의 Heroku 와 같은 서비스를 사용을 고려도 하고 있습니다만 충분한 탐색을 가지고 서버를 이주를 해야하기 때문에 이론적인 부분을 먼저 살펴보도록 하겠습니다.
현재 서비스를 개발하기 위한 서비스를 위한 서비스의 종류는 크게 다음과 같습니다.
1. SaaS
2. IaaS
3. PaaS
4. BaaS
뒤에 붙은 “aaS”는 “as a service”의 줄임말입니다.
1. SaaS 란?
SaaS는 “Soft as a service”로 “on-demand software”로도 불립니다.
소프트웨어 및 관련 데이터는 중앙에 주로 서버에 Cloud환경으로 호스팅 합니다. 사용자는 웹 브라우저와 같은 웹을 연결해주는 응용프로그램을 통해서 클라이언트의 입장에서 접속하여 사용합니다.
예를 들어 메일 서비스를 보면 사용자는 이 시스템이 무엇으로 이루어져 있고 어떻게 동작 하고 있는지 그리고 메일의 내용들을 백업 저장을 어떻게 하는지 알 필요가 없습니다. 그저 서비스 형태로 원하는 단말기(PC, Tablet, SmartPhone 등등)에서 메일을 주고받고 공간이 부족하면 늘려서 사용하면 그만이기 때문입니다.
SaaS 방식으로 전달되는 소프트웨어의 특징은
1) 네트워크 기반으로 접근하고 관리하는 상업적으로 사용 가능한 소프트웨어
2) 각 고객에게 서버를 통하여 중앙의 위치에서 활동을 관리하고 서비스를 제공
3) 고객은 웹을 통해서 서비스를 제공하는 애플리케이션에 접근
4) 애플리케이션은 1:1 서비스 제공이 아닌 1:N인 “single instance, multi-tenant achitecture“
5) 중앙에서 한번 바꾸면 고객은 쓰기만 하면 되기 때문에 서비스가 변경될 때 패치와 업그레이드 다운로드를 할 필요를 없게 만든다.
이상 SaaS의 핵심적인 특징이었다.
그리고 서비스 형태에 대해서 안 볼 수 없다.
서비스 형태는
1) 넷 네이티브 : 서비스 공급자가 전용 응용 프로그램을 활용해서 직접 서비스를 개발하고, 네트워크를 통해서 다중 사용자에게 서비스하는 ASP의 사업형태입니다.
# ASP란? Application Service Provider를 줄여서 ASP라고 한다. 네트워크를 구축할 필요없이 네트워크 인프라를 이용하여 다양한 정보화 솔루션을 제공하는 서비스를 사용하는 어플리케이션 임대 서비스이다. 위에서 예를 들었다시피 웹을 통한 클라우드를 사용하는 것부터 시작해서 메일을 사용하는 것처럼 원하는 서비스를 웹을 통해서 제공하는 서비스를 말할 수 있다.
2) 웹 네이티브 : 순수 웹 기반의 응용프로그램을 개발해서 웹 서비스 또는 웹 애플리케이션 형태로 제공한다. 위의 넷 네이티브와 다른 점은 서비스를 웹에서 웹을 기반으로 하는 서비스를 제공한다는 점이 다르다.
넷 네이티브는 응용프로그램을 만들어서 기존의 네트워크 인프라를 통해서 서비스를 하는 거지 웹을 기반으로 하지 않는다.
2. IaaS 란?
IaaS는 "Infrastructure as a service"의 줄임말로써 서비스로 인프라를 제공한다는 의미이다.
IT Infra라고 하면 물리적인 서버와 스토리지, 네트워크에 필요한 부수적인 장비들을 가리킨다. 그것들을 사지 않고 그냥 네트워크를 통해서 이용하라는 것이다.
기능을 하나 더하자면 물리적인 서버를 안 사도될 뿐만 아니라 운영체제, 인터넷 연결, 방화벽설정, 로드 밸런싱 등 서버에 관련된 모든 이슈를 비용이 발생하긴 하지만 관리를 해줍니다.
예를 들면, 아마존의 AWS나 구글의 GCE를 들 수 있다. 네트워크의 물리적인 장비를 제공해 주고 대신 서비스 이용료를 받는 방식의 서비스를 말한다. 물리적인 서비스를 사는 것보다 이용하는게 더 적은 비용이 들기때문에 이와같은 서비스를 사용한다.
서비스의 특징은
1) 서버의 물리적인 장비를 사야하는 비용을 줄일 수 있다.
2) 네트워크를 통해 연결되어 서비스를 제공한다.
3) 서버를 임대해서 내 서버처럼 사용한다고 보면 된다.
4) 관리를 다해준다.
서비스 형태는
1) 서비스를 제공하는 서비스 제공자가 물리적인 서비스를 가지고 있고 물리적인 서버를 통해서 소프트웨어와 인터페이스를 제공하여 서버를 떨어진 곳에서도 사용할 수 있게 해주는 형태이다.
2) 즉, 멀리있어도 인터넷으로 접속하여 웹으로 제공되는 인터페이스를 통해서 자기 서버처럼 서버를 이용하는 형태입니다.
3) PaaS 란?
PaaS는 "platform as a service"의 줄임말로 여기서 말하는 Flatform은 JVM, Ruby VM 같은 특정한 소프트웨어를 동작시키기 위해서 중간에서 통합해서 적용시켜주는 실행환경을 말하는 것 같습니다.
즉, 개발 언어, 프레임워크, 컴파일, 빌드, 디플로이(배포:서비스 개시)까지 모두 편하게 해줍니다. java를 언어로 이용하여 사용할때, tomcat을 이용해서 코드만 작성하면 나머지는 알아서 돌려주겠다는 정도라고 보시면 됩니다.
이와같은 서비스를 하는 서비스 제공자는 Heroku가 있습니다.
서비스의 특징은
서비스를 기획하고 구성해서 무엇을 어떤 방식으로 어떻게 개발 할 것인지까지 정해야하지만, 소스를 배포해서 서비스를 돌아가게끔 환경을 구성해주는 것은 서비스를 제공하는 제공자가 하겠다는 것입니다.
서비스 형태는
웹을 통해서 서비스를 제공합니다. IaaS, PaaS, BaaS는 모두 웹에서 제공하는 서비스의 형태를 가집니다. 다만 내부의 서비스의 구성은 다릅니다.
4) BaaS 란?
BaaS는 "Backend as a service"의 줄임말로 Backend에 것을 서비스한다는 의미로 frontend라는 말과 반대되는 개념으로 사용자의 눈에 보이지 않는 서비스를 모두 담당해서 처리해주겠다는 서비스입니다.
여기서 BaaS의 좋은 점은 클라이언트가 필요로 하는 서비 API를 모두 서비스 제공자가 만들어 놓아서 개발 할 필요가 없다는 것입니다. SaaS와 차이점을 꼽자면 BaaS는 그래도 최소한 기능을 어떻게 사용할 것인지에 대해서 개발자가 고려하고 API를 이용해서 만들 수 있습니다. 그에 반해 SaaS는 원하는 기능이 있는 서비스를 바로 사용하기 때문에 원하는 대로 개발을 해서 사용할 수 없는 단점이 있습니다.
# Backend & Frontend
둘의 차이점에 대해서 많이들 헷갈려하시는데 backend 와 frontend의 차이점은
간단하게 서비스를 제공받는 사용자 기준에서
눈에 보여지는 부분으로 HTML 파일구현이나 자바스크립트 구현, 이미지파일을 구현하는 부분을 frontend ,
그 내부 로직이나 웹서버, 어플리케이션서버 DB처럼 뒤에서 보이진 않지만 서비스를 제공하기 위해서 존재하는 것들을 backend
라고 합니다.
예를 하나들면,
우리가 스마트폰 어플리케이션을 개발한다고 하면, 스마트폰에 보여지는 UI를 구성하고 서비스를 제공하는 것을 보여주는 부분은 frontend이고,
그 서비스에 대한 처리를 위해서 통신을 통해서 서버로 올리고 그것을 처리하는 부분은 backend라고 합니다.
frontend의 개발환경에는 IOS나 android 등이 존재하게 됩니다.
backend의 개발환경에는 Javascript, C#, PHP, JSP, Python, Ruby 등이 존재합니다.
여기서 말하는 backend 부분을 서비스 제공자가 만들어서 너희들에게 서비스로 제공할테니 너희들이 그것들을 구축하고 구현하지 말고 가져다가 그냥 편하게 API로 모두 사용만 하면 된다라고 하는 것이 바로 BaaS입니다.
BaaS 하나를 설명하려고 다른 것들을 설명했네요.
-----------------------여기 까지 서비스 방식에 대한 설명입니다.----------------------------
다음과 같은 기준으로 "As A Service"를 이용하세요.
다음으로는 서비스 방식을 스타트업에서 선택해야 하기때문에 특징을 비교해서 설명해보겠습니다.
위에 제가 설명한 것들을 모두 아신다고 가정해서 이야기를 진행하겠습니다.
1) 팀 내 개발 수준에 따른 서비스 구분
SaaS < BaaS < PaaS < IaaS (--> 방향으로 개발 수준이 높아집니다.)
- 서비스를 개발하기 보다 기획이나 서비스를 직접 어떻게 제공할지에 대해 더 중요하게 생각하고 여기서 중요한건 팀에 서비스를 직접개발할 개발자가 없는 팀은 SaaS를 사용합니다. 그 이유는 위에 설명을 읽어보시면 알 수 있습니다.
- BaaS는 SaaS와 조금 다른게 직접 frontend에서 개발을 할 개발자를 보유한 상태에서 개발을 진행하여 Backend에서 부족한 개발 부분을 제공받음으로써 훨씬 효율적인 서비스 개발을 할 수 있게 합니다. 쉽게 말하면 다른 팀 구성원과 개발기술을 보유했는데 Server 개발자가 없는 경우.
- PaaS는 BaaS의 API를 사용해서 개발하는 것에 API를 원하는 Server Side 언어를 이용해서 직접 구현하면 서버에 적용시켜 주겠다라는 것만 더해진 경우입니다. 쉽게 말하면, 웹개발을 어느정도 할 줄 알고 소스를 코딩하면 그 소스를 가지고 서비스를 할 수 있게 만들어 주는 서비스를 말합니다.
- 마지막으로 IaaS는 앞에 나온 모든 S,B,P as a service들이 서버에 대한 관리를 서비스 제공자들이 해주고 그냥 개발에 집중해라 라는 것이었는데, IaaS는 서버라는 도화지를 던져주고 내가 이러저러한 기구들을 제공할 테니까 너가 만들고 싶은데로 만들어 줄게 다만 기구를 빌리려면 돈을 내라.라는 것으로 보시면 됩니다. 서버 개발자를 팀내에 구성원으로 가지고 있다면 당연히 IaaS를 추천하고 싶네요.
저희 Startup도 그동안 facebook에서 인수해서 더 대중화가 되어 사용되었던 BaaS인 parse.com을 사용하고 있었는데 처음에 언급했던 것 처럼 종료를 선언함과 동시에 서버를 구축해서 관리하고 사용할 만한 돈과 기술이 없는 저희는 일단 parse open source를 가지고 사용할 수 있는 PaaS와 IaaS 서비스 둘 중 하나로 선택하게 되었습니다.
parse.com에서는 PaaS 방식인 Heroku를 추천 합니다만 서비스가 잘되면 자동적으로 규모확장을 해야하는 것과 스타트업에 있어서는 배우면서 사업을 나아가야한다는 생각때문에 기술 수준이 한 단계 더 높게 갖추어야하는 IaaS를 선택하게되었습니다.
물론 서비스를 구현해야하는 시간적 압박은 있지만 다음에 또 parse.com처럼 서비스를 종료하게되면 Server Migration을 다시 해야하는 경우가 발생하기 때문에 처음부터 하나하나 구현해야한다는 생각때문이었습니다.
그래서 저희 스타트업은 어플리케이션을 서비스하는데에 있어서 backend로 IaaS인 AWS EC2를 사용해서 개발을 진행하기로 정했습니다.
https://www.airpair.com/ruby-on-rails/posts/rails-host-comparison-aws-digitalocean-heroku-engineyard
과 같이 장단점을 나열한 글이 구글링하시면 여럿 있으니 제가 지금까지 썼던 기본적인 지식을 바탕으로 서버를 직접 구축해서 사용할 수 없는 스타트업을 하고 계신 분들에게 도움이 되었으면 좋겠습니다.
이상이고 다음 글로는 parse.com를 사용하던 서비스를 AWS EC2 로 migration하는 것을 써보겠습니다.