최근 스타트업을 돌아다니다 보면 ‘훌륭한 개발자 한 명만 추천해 주세요’ 라는 이야기를 자주 듣습니다. 그런데 자세히 여쭈어 보면 IT에 대한 지식과 경험이 거의 없는 분들이 많더군요. 캠퍼스 창업도 여기에 포함됩니다. 이분들은 앞으로 어떤 일이 생길지 얼마나 투자를 해야 할지 모르고 사업을 시작하다 보니 얼마 지나지 않아 금방 빚더미 위에 올라앉기도 합니다. 일반적으로 인터넷 서비스는 훌륭한 개발자 한 명으로만 뚝딱 하고 만들어지지 않습니다. 사업을 하고 싶다면 어떻게 준비를 해야 할 지 미리 알아둘 필요가 있습니다. 이런 분들의 이해를 돕기 위해 '웹 서비스 구축 과정'을 예로 들어 각 단계별로 필요한 것들을 정리해 보았습니다.
1. 기술 환경 구축
우선 인터넷상에 서비스를 제공해주기 위해서는 당연히 컴퓨터가 있어야 합니다. 그리고 PC처럼 서버도 운영체계와 프로그램을 깔아야 합니다. 이런 과정을 웹 서비스 환경 구축 혹은 기술 환경 구축이라고 부릅니다. 이 일은 보통 서버를 새로 살 때마다 발생하며 사업 중에도 꽤 번거로운 관리가 필요한 분야입니다. 예를 들면 특정 시점에 파일 저장 공간이나 데이터베이스 공간을 늘려야 하며 운영 중인 서버는 PC와는 달리 초기화할 수 없으므로 예측해서 작업 환경을 준비해놓아야 합니다. 서버가 많아질수록 이런 작업들이 복잡해지는데 나중에는 전담팀까지 필요하게 됩니다.
(1) 서버를 산다
서버는 인터넷상에 위치하면서 정보를 제공해주는 가상의 컴퓨터를 말합니다. 그런데 알고 보면 이런 서버도 돈 주고 사야 하는 물리적 컴퓨터입니다.
불과 몇 년 전만 하더라도 서버는 HP, Dell, Oracle(구 Sun)과 같은 대기업 제품을 선호했습니다. 그런데 요즘은 PC 성능이 너무 좋아져서 PC를 서버로 쓰기도 합니다. 또는 PC가격에 전용 서버를 구할 수도 있습니다. 그리고 인터넷으로 쇼핑하듯이 서버를 살 수도 있습니다. 물론 용산 컴퓨터 상가에 가서 조립서버를 살 수도 있습니다.
문제는 서버를 산 다음 어떻게 하느냐입니다. 사무실 책상 위에 올려둘 수도 있습니다. 그러나 서버라면 365일 전원이 켜져 있어야 하고 사람들이 많이 접속해도 버벅대지 않아야 하고 여름에 열을 받아서 꺼지면 안 됩니다. 그래서 서버는 보통 사무실에 두지 않고 인터넷 데이터 센터(IDC)라는 곳에 갖다 둡니다. 당연히 월 사용료를 내야 합니다.
그런데 이렇게 하다 보면 사용자가 많지 않은 사업 초반에 꽤 큰 비용이 들어가게 됩니다. 그래서 처음에는 빌려 쓰는 서버를 추천 드립니다. 최근에는 클라우드 기술의 도입으로 비용이 많이 저렴해졌습니다. 사업이 잘되어서 인터넷 사용자가 늘어나면 그때 비싼 전용 서버를 구매해도 늦지 않습니다. 특정 시점이 되면 빌려 쓰는 것보다 전용 서버 비용이 더 저렴해집니다.
만일 동영상 서비스를 한다면 유지 비용은 더 올라갑니다. 일반적으로 동영상을 빠르게 보여주기 위해 사용자와 가까운 거리에 있는 서버를 임시 저장소로 이용하는 기술을 쓰는데 이 인프라는 이용 비용이 꽤 크기 때문입니다. 보통 서버 비용은 매달 발생하며 사용량이 증가할수록 점점 증가합니다.
(2) 운영체제를 설치한다
HP, Oracle(구 SUN)사의 서버는 전용 OS를 별도로 사야만 합니다. 아니 오히려 서버에 잘 맞는 Unix 를 쓰기 위해서 HP, Oracle사의 서버를 사기도 했습니다. 그런데 요즘에는 무료 운영체제인 Linux가 Unix를 충분히 대체할 수 있게 되었습니다. 그래서 대부분 서버에 Linux 를 설치해서 사용합니다. 하지만 만일 꼭 사용해야만 하는 어떤 소프트웨어가 Linux에 설치되지 않는다면 유료 운영체제를 사야 할 수도 있습니다. 따라서 소프트웨어를 살 때는 어떤 운영체제에서 구동 되는지 잘 살펴볼 필요가 있습니다. 한 번만 사면 되는 경우는 유료 운영체제의 부담이 적지만 사업이 잘될수록 서버가 계속 늘어나야 하는 경우라면 무료 운영체제 선택은 현실적으로 필수입니다. 요즘 빌려 쓰는 서버에는 대부분 Linux가 설치되어 있습니다.
그러나 시스템이 커지고 보안을 이유로 다수의 전용 서버를 직접 이용해야 한다면 Linux 서버 전문가가 필요하게 됩니다. 보통 네트워크 구성, 보안설정, 서버분리 등의 일들이 이 단계에서 함께 이루어지는 경우가 많기 때문입니다. 이 분야는 소프트웨어 개발자들이 다루기 힘든 전문 하드웨어 엔지니어링 지식이 별도로 필요합니다. 그래서 HP Unix, Oracle Solaris의 경우는 이런 일을 하는 전담 시스템 엔지니어가 따로 있습니다. Linux 의 경우는 별도의 기술지원 업체들이 있습니다.
이 일은 눈에 띄지 않지만 매우 중요한 작업입니다. 해킹을 막거나 DDoS 공격을 막기 위한 작업들이 대부분 이 단계에서 함께 이루어집니다. 만일 사업이 잘되어서 별도로 독립된 서버 그룹을 만들어야 한다면 이 부분에 대한 투자가 발생하고 별도로 서버를 관리할 사람이 필요하게 됩니다.
(3) 데이터베이스를 설치한다
회원 가입이 필요하고 데이터가 계속해서 쌓인다면 데이터베이스라는 제품을 설치해야 합니다. 데이터베이스는 데이터 관리에 특화된 엑셀이라고 생각하시면 됩니다. 엑셀은 6.5만 건까지만 처리 가능하지만 데이터베이스는 10만 건에서 1억 건 이상의 데이터도 처리할 수 있습니다.
주요 제품으로는 Oracle, MS-SQL, MySQL, Maria DB 등이 있는데 제공되는 기능에 따라서 가격이 천차만별입니다. 스타트업에서는 일반적으로 MySQL 무료 버전을 많이 쓰고 있습니다. 기술 지원은 받을 수 없다는 단점이 있지만, 웹 서비스를 만드는 데는 기능이 충분합니다. 초기에는 무료 버전을 쓰다가 시스템이 복잡해지면 유료로 업그레이드하는 것이 좋습니다. NoSQL 등 새로운 종류의 제품들도 있습니다만 각각 특징이 달라 쓰임새가 다릅니다.
기술지원이란 데이터베이스가 시스템 성능을 최대로 사용할 수 있도록 튜닝을 하든가 2대로 상호 백업 구성을 하는 경우 등을 말합니다. 만일 장애가 발생하면 즉시 출동해서 문제를 조치해주기도 합니다. 기본적으로 데이터 손상이 없게 해야 하기 때문에 이런 일들은 매우 까다롭습니다. 이런 일을 하는 사람을 ‘데이터베이스 엔지니어’ 또는 ‘소프트웨어 엔지니어’라고 부릅니다. 그러나 이런 일은 항상 필요하진 않기 때문에 대부분 채용보다는 전문업체와 연간 기술지원 계약을 합니다.
(4) tomcat을 설치한다
소프트웨어 개발자가 자바를 사용해서 웹 서비스를 만들려고 한다면, 자바 실행기를 서버에 설치해 주어야 합니다. 왜냐하면, 자바가 동작하는 기술 방식이 그렇기 때문입니다. 마찬가지로 PHP를 사용한다면 PHP 실행기를 설치해주어야 합니다. 이런 실행기를 전문용어로 ‘Web Application Server’, 줄여서 WAS라고 부릅니다. 유료 자바 실행기로는 Oracle Weblogic(구 BEA사), IBM사의 WebSphere, 티맥스 Jeus 같은 제품이 있습니다. tomcat은 Apache 재단에서 관리하는 무료 오픈소스 자바 실행기입니다.
제품별로 기능 차이가 있지만, 일반적인 스타트업이라면 tomcat으로도 충분합니다. 유료 제품의 경우 전문 소프트웨어 엔지니어가 설치와 튜닝을 해줍니다.
그러나 tomcat의 경우는 대부분 소프트웨어 개발자가 그 일을 합니다.
(5) Apache를 설치한다
Web Server라고 부릅니다. Apache는 제품이름입니다. Web Server는 html 파일을 PC 웹 브라우저로 보내주는 역할을 합니다. 물론 이미지랑 다른 것도 챙겨서 보냅니다. 웹 서버는 이렇게 정적인 파일을 전송하는 역할을 합니다. 즉 Web Server는 회원 가입 화면을 보여주고 Web Application Server는 회원 가입 데이터를 데이터베이스에 저장하는 기능을 하는 것입니다. 이렇게 역할이 나뉘는 이유는 웹의 표준 기술 구조가 그렇게 되어 있기 때문입니다.
Web Server로는 MS사의 IIS, 오픈소스로 nginx와 같은 제품이 있습니다. 기업 내 전산실이 있으면 아파치와 웹서버 설치 정도는 전산팀에서 해주기도 합니다. 그러나 스타트업이라면 위의 일은 소프트웨어 개발자가 대부분 합니다. 어떤 클라우드 서비스는 위 다섯 가지를 한 번에 해주기도 합니다.
기술 환경이란 제조업과 비교하자면 설비 투자에 해당합니다. 그래서 사업이 잘되면 비용이 상승합니다. 그런데 눈에 잘 보이지 않다보니 비용이 과도하거나 빈약하게 운영되기도 합니다. 스타트업이라면 회사의 성장에 발맞추어 적절하게 운영될 필요가 있습니다. 그러나 일반 제조업에 비하면 비용부담이 굉장히 적다는 장점이 있습니다.
2. 웹 서비스 개발
이제 내가 만들고 싶은 것을 만들어보기로 합니다. 새로운 작업방법이나 기술 트렌드의 변화 등이 있지만, 여전히 많이 사용되는 전통적인 웹서비스 구축과정으로 정리해 보았습니다.
(6) 기획을 한다
스타트업이라면 기획의 시작은 일반적으로 CEO의 몫입니다. 사업을 시작하게 된 계기가 기획의 시작이기 때문입니다. 그런데 오너가 원하는 결과물의 이미지는 개발자나 디자이너가 작업 가능한 디테일한 수준과는 꽤 거리가 있습니다.
기획이란 이 간극을 메우는 작업입니다. 그러나 이 작업은 쉽지 않습니다. 웹 사이트가 만들어지기 위해서는 디테일한 부분까지 의사결정을 해야 하기 때문입니다. 좋은 팀을 구하고 협업을 통해 이 간격을 메워가는 것이 가장 좋습니다. 하지만 외주를 통해 만들려고 한다면 상세한 작업지시서를 만들어야 합니다. 그리고 진행 상황을 자주 점검해야 합니다. 세상에 없는 것을 만들다 보면 당연히 작업지시서에 빠지는 것이 생기기 때문입니다.
오너가 이런 일을 모두 챙기지 못할 수 있기 때문에 기획자라는 이름의 사람을 뽑기도 합니다. 하지만 스타트업이라면 일을 시키기보다 오너가 직접 기획에 참여할 것을 추천드립니다. 말이란 건 한 다리만 건너면 곡해되기 때문입니다.
(7) 디자이너가 필요하다
디자이너는 막연한 느낌을 그림으로 표현해내는 사람입니다. ‘우리 홈페이지는 엘레강스하면서 모던하고 안드로이드틱 하면서도 아이폰의 느낌이 있는 그런 화면을 원해’ 라고 이야기를 해도 디자이너는 결과를 만들어 옵니다. 하지만 그렇게 만든 디자인이 마음에 들지 않을 수 있습니다. 디자이너와 작업을 할 때는 구체적인 지시를 하기보다 공감대를 형성하는 것이 더 낫습니다. 디자이너는 사이트의 색깔과 느낌 등 추상적이고 감성적인 부분을 결정하는 사람입니다. 그래서 디자이너가 없으면 사이트의 느낌이 투박합니다. 상업용 사이트라면 반드시 디자이너가 있어야 합니다.
디자이너들은 포토샵이라는 프로그램을 이용합니다. 그래서 디자이너를 채용한다면 컴퓨터와 포토샵 프로그램을 함께 사야 합니다. 디자이너는 이 프로그램을 이용해 그림을 그리고 사진을 가공해서 웹 화면을 만듭니다. 그런데 이게 은근히 일이 많습니다. 컴퓨터는 사실 하얀 도화지만 제공하기 때문입니다. 우리가 흔히 간과하는 작은 버튼 이미지도 대부분 디자이너의 손길이 닿습니다. 디자인은 사이트 최초 개발 단계에서는 매우 중요하고 할 일이 많지만, 개발로 넘어가면 하는 일이 적어지는 분야입니다.
(8) 웹 페이지를 만들자
디자이너가 웹 화면을 만들지만, 그 화면이 바로 웹페이지가 되지는 않습니다. 웹페이지는 html이라는 전자 파일이기 때문입니다. 웹 화면은 html 내부의 규격을 웹 브라우저가 읽고 번역해서 보여주는 결과입니다. 그런데 html을 만드는 건 좀 복잡합니다. 특히 매킨토시나 리눅스 PC에서도 웹 화면을 똑같이 보이게 하기 위해서는 좀 번거롭게 개발을 해야 합니다. 마찬가지로 안드로이드나 아이폰에서도 똑같이 보려면 별도로 할 일이 많습니다.
만일 마우스 클릭에 따라 화면이 변하는 경우라면 더욱 복잡해집니다. 이런 일을 하는 사람을 Web Publisher, Front End Developer라고 부릅니다. javascript, css, html5 등의 소프트웨어 기술을 알아야 합니다. 요약하자면 화려한 웹 화면은 컴퓨터가 알아서 해주는 것 같지만, 전혀 그렇지 않습니다. Front End Developer가 한 땀 한 땀 개발한 결과입니다.
(9) 데이터 구조를 설계하자
데이터 구조란 회원 가입 양식을 말합니다. 즉 데이터가 기록되기 위한 포맷입니다. 회원 가입 양식을 취향에 따라서 하나로 만들 수도 있고 두 개로 나눌 수도 있습니다. 전문용어로 ‘테이블을 설계한다.’고 합니다.
일반적으로 데이터 구조는 웹 서비스의 속도에 영향을 많이 끼칩니다. 그리고 데이터가 많아지고 복잡해지면 웹 서비스가 점점 느려지기도 합니다. 그래서 서비스가 잘 되면 데이터 구조와 데이터를 관리하는 전문인력이 필요하게 됩니다. 이런 사람을 데이터 관리자, Database Administrator, 줄여서 DBA라고 합니다. 그러나 사업 시나리오의 변화가 많고 자금이 많지 않은 사업 초기라면 데이터 관리자를 처음부터 채용하기 힘듭니다. 그래서 대부분 소프트웨어 개발자가 이 역할을 합니다.
(10)계산처리가 필요한 페이지를 만든다
인터넷 서비스를 분해해보면 화면에 보이는 부분과 보이지 않는 부분으로 나눌 수 있습니다. 예를 들면 회원 가입 화면은 눈에 보이는 것이지만 회원정보를 저장하는 것은 개인 정보를 서버상의 하드디스크에 기록하는 행위로 눈에 보이지 않습니다. 그리고 요즘 흔한 사이트들의 복잡한 포인트 정책도 눈에 보이지 않습니다. 개인 쇼핑몰을 운영해야 한다면 제품 추천을 해주거나 쿠폰 할인을 해주고 싶기도 합니다. 또는 아침 9시에 생일인 사람들에게 생일 축하 메시지를 보내줘야 할 수도 있습니다. 이런 모든 일이 화면과는 분리해서 생각할 수 있는 눈에 보이지 않는 일들입니다.
이런 부분을 개발하는 사람을 Back End Developer라고 부릅니다. 사용되는 언어는 php, java, python 등으로 다양합니다. 최근에는 node 기술을 이용해 Front End에서 사용하는 javascript로 개발하기도 합니다.
이 부분은 기술 환경에 따라 정말 다양한 개발방법과 작업유형이 존재합니다. 쇼핑몰이 잘 되어서 눈에 보이지 않는 일들이 많아지면 Back End 시스템들은 점점 커지고 복잡해집니다. 그리고 Back End 개발자들을 많이 뽑아야 한다는 뜻이기도 합니다.
(11) 서버에 올리고 잘 작동하는 지 확인한다.
간단한 웹 화면 몇 개를 만들었지만, 작업 결과는 수십 개의 파일일 수 있습니다. 왜냐하면 현재의 웹 기술이 그렇기 때문입니다. 절대 개발자들이 일부러 덩치를 불리는 게 아닙니다. 서비스를 최초로 오픈할 때는 파일이 좀 많아도 ftp 프로그램으로 서버에 반영할 수 있습니다. 그런데 서비스가 대박 나서 서버가 5대가 넘어가면 그렇게 관리하기 힘듭니다. 그리고 추가 기능과 버그 수정 개발을 수십 개씩 개발하다 보면 순서를 나누어서 반영해야 하기도 합니다. 민감한 시스템이라면 오류가 날 때 원상복귀 시키는 것도 매우 중요합니다. 아니면 에러가 난 채로 3~4시간 이상 방치될 수 있습니다. Back End 결제 시스템이라면 이런 일이 매우 중요할 수 있습니다. 1,000원짜리 상품을 100원에 팔 수 있기 때문입니다.
대기업의 경우는 이 일만 하는 사람이 따로 있습니다. 하지만 조그마한 기업이라면 Back End Developer들이 주로 합니다. 그래서 개발자들은 프로젝트가 시작되면 이 일을 좀 더 쉽게 자주 하기 위해서 자동화된 개발환경과 배포환경을 미리 만듭니다. 장사가 잘 될수록 Back End 시스템이 복잡해지고 하는 일이 많아져서 별도로 이 일을 해 줄 사람이 필요해지게 됩니다.
서버에 올리고 나면 잘 작동되는지 확인을 해야 합니다. 고친 부분이 적다면 사람이 확인하겠지만, 공통 기능이나 잘 보이지 않는 부분을 고쳤다면 사람이 모두 확인할 수 없습니다. 어떤 회사는 '검수팀'이 따로 있지만 작은 회사라면 보통 개발자들이 이 일을 합니다.
3. 정리
이렇게 웹 서비스는 처음부터 끝까지 기술자들이 필요한 사업 분야입니다. 프로세스를 자동화한다고 해서 인건비를 절약할 수 있는 사업이 아닙니다. 대신 도구가 편리해지면 결과물의 품질과 사람의 생산성이 높아집니다.
스타트업에서 만드는 웹 서비스는 붕어빵을 찍어내는 것이 아니라 새로운 요리를 만드는 것과 비슷합니다. 여러가지 재료를 조합해서 맛있는 음식을 하나 만드는 것입니다. 그래서 인건비 비중이 높은 사업이면서 팀원들의 태도와 능력, 협업방식에 따라 결과의 차이가 매우 큰 사업입니다. 그리고 지속적인 업데이트를 통해 사업이 성장하기 때문에 일단 시작하면 인력을 적절하게 유지하거나 계속해서 늘려가야 합니다. 그래서 이 분야는 팀워크를 최선의 상태로 유지하기 위한 사람관리 노하우가 매우 중요합니다.
웹 서비스는 대부분 IT기술이 핵심인 사업입니다. 물론 웹 서비스가 핵심이 아닌 스타트업도 있습니다. 그러나 IT기술이 핵심이라면 소프트웨어 개발자를 반드시 직원이 아닌 동료로서 함께 참여시키십시오. 그렇지 않으면 위에서 이야기한 많은 일이 모두 조직 갈등의 원인으로 이어질 수 있습니다. 초기에는 진상 개발자로, 조직이 커지면 핑퐁게임으로 보입니다.
훌륭한 CTO를 뽑는다고 하더라도 스타트업은 순항하지 않을 수 있습니다. 꽤 많은 스타트업들이 기술 문제보다 기술 기반의 사업을 할 준비가 되지 않아 실패합니다. 인터넷 서비스를 시작하고자 한다면 꼭 경험자들로부터 장밋빛 미래보다 '현실적인 조언'들을 듣고 충분히 고민해 보시길 추천드립니다. 인터넷 서비스도 치킨집 차리는 것 이상으로 어려운 사업입니다.
잘 정리해주셔서 한번에 머릿속으로 흐름도가 그려졌습니다. 감사합니다.
대단히 자세한 설명이십니다 잘보고갑니다
감사합니다. 갑자기 서버 구축을 맡게 돼서 자료 찾아보고 있는데 이 글을 보고 전체적인 틀을 알게 되었습니다