1. 포석
포석이란 바둑에서 돌을 벌여놓는 일을 말한다. 오늘은 서비스 개발을 위한 포석에 대해서 이야기해볼까 한다. 하드웨어 개발이 아닌 서비스 개발이라면, 대부분의 시스템은 비슷한 구조를 가지게 된다. 고객에게 제공하는 서비스의 양상은 저마다 다를지라도, 그것을 굴러가게 하는 시스템은 결국 같은 모습을 하고 있는 것이다.
자 그럼 서비스 개발을 위한 전체의 모습을 한번 그려보자. 낯선 용어들이 보이는가? 걱정하지 마라. 우리는 곧 저것들이 무엇을 의미하는지 알게 될 것이다. 각 기능을 개발하는 기술이나 언어, 프레임워크들은 바뀔 수 있지만 기능 자체가 바뀌는 일은 없다. 모바일 게임, 메신저, SNS 할 것 없이 대부분의 서비스는 위의 형태를 가지고 있다. 각 기능의 개발자들은 전체의 그림을 모를 수도 있지만, 스타트업의 CEO라면 이 그림을 머릿속에 그려두어야 한다.
개발을 접해보지 않은 사람들이 생각하는 서비스의 모습은 위 그림에서 클라이언트에 해당하는 부분이다. 고객들과 상호작용을 하고, 고객들과 대면하는 지점이며 직접적인 평가가 되는 부분이다. 흔히 프런트엔드라고 불리며 휴대전화 앱이나 웹서비스가 여기에 해당이 된다. Java라는 언어로 안드로이드를, Swift나 Object-C로 IOS를 개발하게 되고, javascript나 php, Python, css, html 등으로 웹 클라이언트를 개발하게 된다.
위의 웹 클라이언트와 직접적인 통신을 담당하고, 서버들 중에서 가장 많은 부분을 담당하게 되는 것이 웹서버이다. 클라이언트로부터 요청을 받아서 처리하고, 다른 서버들을 관장하면서 다른 서버들에게 필요한 부분을 요청해서 가지고 온다. 웹서버를 개발할 수 있는 언어로는 Java, javascript, python, php 등이 있으며 어떤 언어와 프레임워크를 선택하느냐에 따라서 개발하는 방향이 상당히 달라질 수 있기 때문에, 여러 가지 가능성을 따져보고 개발 스택을 선정하는 것이 좋다.
DB 서버는 서비스에 필요한 모든 데이터들을 저장해놓는 곳이다. 웹서버는 DB서버로부터 데이터를 요청해서 가져가고, DB서버는 데이터 연산에 최적화된 엔진을 가지고 웹서버가 요청한 데이터들을 계산해서 돌려준다. mysql로 대표되는 전통적인 관계형 데이터베이스와 여기서 탈피하려는 노력으로 탄생한 nosql 등이 사용되며, 서비스의 규모가 작은 대부분의 스타트업에게 적합한 형태는 관계형 데이터베이스이다. 99%의 서비스는 관계형 데이터베이스를 사용하게 될 것이며, 가격이 비싼 Oracle 대신에 mysql이나 mariadb를 사용하는 것 이외의 선택지는 그다지 많지 않을 것이다.
파일 서버는 서비스에 필요한 파일들을 저장해두는 저장소라고 생각하면 된다. 서비스에 따라서 파일 서버는 필요할 수도, 필요하지 않을 수도 있다. 사진이나 동영상과 같이 대량의 파일들이 필요한 서비스라면 별도의 파일 서버가 필요할 것이고, 이러한 데이터가 아니라면 파일 서버 없이 데이터베이스만으로 커버가 가능한 경우도 있다. 웹서버가 파일 서버의 역할을 함께할 수도 있지만, 서비스의 크기가 커지게 되면 결국엔 분리가 필요하게 되므로 별도의 서버를 구축해두는 것이 좋다.
관리 서버는 관리를 위한 또 하나의 웹서버이다. (웹의 형태가 아닐 수도 있다) 서비스 초기에는 데이터 베이스를 직접 제어하는 방법으로 관리할 수 있지만, 초기 서비스를 지나오게 되면 사용자 관리나 통계 등을 위해서 시스템 구축이 필요해지게 된다. Raw 데이터를 직접 다루는 경우에 실수로 인해서 전체 데이터를 날려버릴 수도 있기 때문에 이러한 위험을 피하기 위해서는 관리 서버가 필요하게 된다.
전체의 그림을 그려보는 정말 간단한 총론이었다. 다음에는 각론에 해당하는 내용들을 하나씩 하나씩 살펴볼 것이다.