brunch

You can make anything
by writing

C.S.Lewis

by 배울장 Feb 17. 2018

개발 Black Sheep Wall

개발은 뭘 하는 걸까? 치트키를 통해 알아보자.

 나는 어렸을 때부터 코딩을 접했다. 그 시작은 바로 게임을 만드는 것이었다. 나는 흥미가 가지 않으면 집중도 못하고 열심히 하지도 않는 단점이 있다. 코딩은 재미가 없지만 게임을 만드는 것은 재미있었기 때문에 계속할 수 있었다. 오랜 시간 동안 끈질기게 그릿을 갖고 할 수 있는 원동력은 바로 재미다. 재미가 없다면 의미가 없다는 말도 있지 않은가?


 만약 본인이 뭘 하는지를 모르면서 뭔가 해나간다면 재미가 있을까? 이 글에서는 개발자는 무엇을 하는 것인지, 아이템을 개발하기 위해서는 어떤 것을 공부해야 하는지 맵을 훤히 들여다볼 수 있는 치트키를 알려주고자 한다. 원래 처음에는 치트키 치고 하는 게 재미도 있고 알아가기에도 편리하지 않은가?


Black Sheep Wall

 스타크래프트를 해보셨다면 이 치트키를 알 것이다. 모든 맵을 훤히 들여다볼 수 있는 치트키. 개발을 배우면서 앞으로 무슨 일이 일어날지, 저 멀리에서는 어떤 일이 벌어지고 있는지 알려주고자 한다. 물론 내가 모든 분야를 정확히 알지는 않지만, 이제 개발을 접해보고자 하는 사람, 외주를 맡기고 싶은데 아무것도 모르는 사람들에게 대략 어느 분야인지 알려드릴 정도는 정도는 된다고 스스로 판단하기에 이 글을 작성하게 되었다.


어디부터 어디까지가 개발인가?

 사실 매우 애매모호한 질문이다. 뭔가 만든다는 것이 다 개발이기 때문에 '만드는 것'으로도 정의가 가능하겠다. 하지만 최근에 창업을 하려는 사람들에게 개발이란 '창업 아이템'을 만드는 것으로 통용된다. 이 글에서도 창업 아이템을 만드는 것을 개발이라고 하겠다. 창업 아이템이라고 아무런 외주 업체에 맡기면 되는 것이 아니다. 창업 아이템도 분야가 상당히 많다. 스마트폰에서 운용되는 애플리케이션부터 생활 밀착형 IoT까지. 개발자라고 해서 창업 아이템을 모두 개발할 수 있는 것은 아니다. 더군다나 이제 창업을 시작하려는 팀에는 개발자의 수가 적기 때문에 서비스를 단숨에 개발하는 것은 오랜 시간이 들것이다. 그렇다면 창업 아이템의 분야별로 필요한 개발자의 스택은 무엇일까? 지금부터 알아보도록 하자.


단순 애플리케이션

 단순 애플리케이션은 간단한 서비스를 말한다. 서버가 필요하지 않고 이용자가 플레이스토어 혹은 앱스토어에서 애플리케이션을 설치하기만 하면 운용되는 서비스이다. 대표적으로 계산기, 나침반 같은 것이 있다. 이런 애플리케이션들의 수익구조는 대부분 앱 자체가 유료로 판매되거나, 광고를 게재하여 광고수익을 얻는다. 이런 서비스를 개발할 때 이용하는 개발도구는 대표적으로 안드로이드 스튜디오, Xcode가 있다. 안드로이드 스튜디오는 안드로이드 운영체제에서 운용되는 앱을 개발하는 도구이고, Xcode는 애플의 아이폰, 아이패드와 같은 iOS 운영체제에서 운용되는 앱을 개발하는 도구이다. 안드로이드 스튜디오에서 사용되는 언어는 Java이고 Xcode에서 사용되는 언어는 Object C, Swift이다. 개발자 혼자 안드로이드와 iOS를 개발하기에는 시간도 노력도 많이 들기 때문에 이런 노력을 줄이고자 '크로스 플랫폼'이 탄생했다. 하나의 코드로 안드로이드, iOS 모두 제작이 가능하다. 대표적인 개발도구는 자마린(Xamarin)이 있다. 지금까지 나열한 개발도구들은 모두 네이티브(Native) 앱을 말한다. 네이티브 외에 하이브리드 앱이 있다. 웹을 기반으로 개발에 속도를 내고자 탄생했는데, 이 하이브리드 앱 개발도구도 다수가 크로스 플랫폼이다. 즉, iOS와 안드로이드를 동시에 개발한다. 대표적으로 Cordova가 있는데 이 Cordova와 angularJS를 기반으로 만들어진 개발도구인 ionic 이 있고 React를 기반으로 한 React Native가 있다. 하이브리드 앱은 네이티브 앱에 비해 속도가 느리지만 게임이 아닌 이상 성능을 크게 요하지 않고, 최근 스마트폰에서는 네이티브와 하이브리드가 큰 속도 차이가 나지 않는다고 판단하여 하이브리드로 개발을 빠르게 하는 경우가 많다. 지금까지 용어가 너무 많이 나왔다. 정리를 하면 이렇다.

개발 시간 많이 들고 퍼포먼스가 좋다 -> 네이티브 / 안드로이드 스튜디오, Xcode

    개발자가 필요한 스택 - Java, Object C / Swift

개발 시간이 짧고 퍼포먼스가 그저 그렇다 -> 하이브리드 / Cordova, ionic, React Native

    개발자가 필요한 스택 - javascript (node, angular, react)


서버가 필요한 애플리케이션

 많은 경우 애플리케이션은 서버가 필요하다. 데이터를 저장할 때, 불러올 때, 매번 다른 정보를 노출해야 할 때 등 서버가 필요하다. 이때 나는 많은 경우 REST API를 활용하여 서버와 통신한다. 서버는 특성상 24시간 안정적으로 운용되어야 한다. 따라서 아마존 웹서비스(AWS)를 이용하거나 구글 클라우드 플랫폼(GCP)을 이용하여 서버를 운용한다. 서버의 운영체제는 대부분 리눅스를 사용한다. 그렇다고 애플리케이션 개발하는데 리눅스를 모두 알아야 하는 것은 아니다. 나도 필요한 부분만 그때그때 검색해서 활용하고 있다. 앞서 언급했던 REST API는 JSON이라는 형식으로 데이터를 주고받는데, 주고받을 때 웹 방식으로 통신하기 때문에 웹서버 구축이 필요하다. 웹서버는 다양한 언어로 구현할 수 있다. PHP, Python, Node 등 대부분의 메이저 언어들로 웹서버를 구현할 수 있고, 언어에 따라 크게 영향을 미치지 않기 때문에 개발자의 입맛대로 선택하여 구현한다. 그리고 서버에 데이터베이스를 구축해야 하는데, 데이터베이스 도구도 종류가 상당히 많다. 대표적으로 MySQL, MariaDB, MongoDB가 있다. 나는 데이터베이스 종류에 따라 크게 차이를 느끼지 못했다. SQL, NoSQL로 분류는 되지만 이것도 개발자의 입맛대로 선택하면 된다. 물론 대규모 서비스라면 모든 경우를 고려해봐야 한다. 서버가 필요한 애플리케이션이기 때문에 앞서 언급한 단순 애플리케이션을 개발하고 더 나아가 알아야 하는 부분이다.

 정리하자면, 애플리케이션에서 정보를 실시간으로 변경해줘야 한다면 서버가 필요하다. 그 서버의 운영체제는 리눅스를 사용하며, 그 리눅스 안에 웹서버와 데이터베이스를 구축해야 소비자의 스마트폰과 연동이 가능하다.


단순 웹페이지 서비스

 웹페이지는 데스크탑, 모바일웹 등 웹페이지로 서비스하는 경우를 말하고자 한다. 데스크탑과 모바일에서 비슷하면서도 다르게 보이는 웹페이지를 반응형 웹페이지라고 한다. 데스크탑으로 접속해서 웹페이지 창을 가로로 축소해보고 늘려도 보면 알 수 있다. 실시간으로 변하거나 모든 크기에 대응해서 웹페이지가 잘 보인다면 그 웹페이지는 반응형 웹페이지를 구현한 것이다. 많은 경우에 웹페이지 서비스는 하이브리드 앱으로 쉽게 앱 구현이 가능하기 때문에 애플리케이션으로도 제작하는 경우가 많다. 웹페이지를 동작하게 하려면 서버가 필요하다. 앞서 작성한 것처럼 아마존 웹서비스 혹은 구글 클라우드 플랫폼을 이용하는 경우도 있고, 웹페이지의 기능에 따라 웹호스팅으로만 구현이 가능한 서비스가 있다. 웹호스팅이란 서버를 여러 사람이 나누어 사용하기 때문에 가격이 저렴하다는 장점이 있다. 하지만 사용할 수 있는 언어가 한정적이기 때문에 기능 구현에 제약을 받는다는 단점이 있다. 대부분의 웹호스팅 업체가 지원하는 언어는 PHP이다. 그래서 웹페이지 제작을 처음 접하는 사람들이 대부분 참고하는 생활코딩에서 가장 먼저 알려주는 서버 언어가 PHP이다. 웹서버를 구현하는 언어는 무수히 많다. 대표적으로 PHP, Python, Node js가 있다. 바로 전에 말씀드린 서버가 필요한 애플리케이션과 동일하지 않은가? 단순 웹페이지를 개발하는 스택과 앱을 위한 서버를 만들어주는 스택은 거의 동일하다.

 웹페이지는 백엔드와 프론트엔드로 구분한다. 백엔드는 기능을 담당하고 프론트엔드는 꾸미는 것을 담당한다고 생각하면 된다. 백엔드는 앞서 언급한 PHP, Python, NodeJS로 구현하는 웹서버이고, 프론트엔드는 HTML, CSS, Javascript로 구현된다. 간단하게 말하자면 백앤드 코드는 이용자가 볼 수 없고 프론트엔드 코드는 이용자가 볼 수 있다.


복잡한 기능이 있는 웹페이지 서비스

 복잡한 기능이란 주기적으로 정보를 받아오는 크롤링이나 자동화된 어떤 작업을 지속해야 하는 기능을 말하고자 한다. 이때는 웹호스팅을 이용하여 구현하기는 어렵다. 이때는 아마존 웹서비스 혹은 구글 클라우드 플랫폼을 이용해야 한다. 앞서 말씀드린 백엔드의 역할이 커진다고 볼 수 있는데, 이때는 서버의 성능이 유저의 경험에도 영향을 크게 미친다. 따라서 유저가 얼마나 접속할지 트래픽을 예상하여 최적의 서버를 선택해야 한다. 물론 돈이 많다면 규모가 큰 서버를 구비하면 된다. 하지만 창업을 준비하는 사람들이 돈이 많은 경우는 흔하지 않기 때문에, 이용자의 수요에 따라 규모를 알아서 조절하는 서버를 아마존 웹서비스와 같은 클라우드 컴퓨팅 업체에서 준비를 해놓았다. 트래픽 혹은 서버 사용률이 높아지면 스스로 판단하여 서버를 늘려주는 서비스이다. 따라서 개발자가 아마존 웹서비스와 같은 클라우드 컴퓨팅 업체를 이용해본 경험이 있다면 서버 개발이 수월하지 않겠는가? 이런 서버를 개발하는데 사용하는 언어는 매우 많다. 내가 주로 사용하는 언어는 Python과 Node js이다. 이 둘 모두 서버에 복잡한 기능을 구현할 수 있고 웹페이지도 제작할 수 있다.


하드웨어

 실제 만질 수 있는 제품에 대해 말하고자 한다. 예를 들면 스마트 알람시계나 특이한 디자인을 가진 스탠드, 디퓨저 기능을 갖고 있는 공기청정기, 앱으로 컨트롤할 수 있는 전등이 있다. 제조업이라고 보면 된다. 킥스타터 혹은 인디고고에서 많이 보신 신박한 제품들이 이에 해당한다. 하드웨어 개발은 먼저 프로토타입을 만든다. 이 프로토타입을 테스트하고 다시 프로토타입을 만드는 것을 계속 반복한다. 양산이 가능한 수준의 프로토타입이 나오게 되면 양산을 할 수 있는 버전으로 다시 설계를 하고 양산을 하게 된다. 프로토타입을 제작할 때는 아두이노, 라즈베리파이와 같이 간단하게 센서들을 이용할 수 있고, 컴퓨팅이 가능한 마이크로 프로세서 보드를 이용하여 제작한다. 하지만 양산할 때는 비싼 아두이노를 제품에 넣을 수는 없기 때문에 필요한 기능을 하는 기판을 설계하고 제작을 의뢰하게 된다. 여기에 들어가는 칩의 선택은 이 글에서 언급할만한 사항은 아니라고 생각한다. 어쨋든 이 작업을 양산형 PCB제작 이라고 한다. 이 기판을 감싸는 하우징은 모델링을 하고 3D 프린터로 뽑고 테스트하는 과정을 거쳐 양산이 가능한 모델을 재료에 따라 제작을 맡기고 기판과 결합하면 하드웨어는 완성된다. 이때 필요한 개발자의 스택은 센서들에 대한 이해, 회로에 대한 이해, 재료에 대한 이해, C언어 혹은 Python, 모델링 툴이다. 사실 무엇을 개발하는지에 따라 필요한 것이 그때 그때 다르다. 우리나라에서는 많은 메이커들이 하드웨어를 만들고자 한다. 킥스타터에 올라오는 Design & Tech 파트가 대부분 이 하드웨어에 해당한다.


게임 개발

 게임을 아이템으로 창업하는 경우가 있다. 게임 개발에 대해 말하자면 모바일, 데스크탑, 콘솔 게임 크게 3가지 종류가 있는데, 개발도구는 총 2가지로 함축된다. 바로 유니티언리얼 엔진이다. 두 개발도구는 수익이 없다면 무료이다. 해당 엔진으로 게임을 제작하고 수익이 발생할 경우에 대한 가격정책은 개발사 웹페이지에 접속하면 확인할 수 있다. 매우 호혜적인 정책을 펼치고 있다. 유니티와 언리얼 엔진 모두 동시에 모바일, 데스크탑, 콘솔 게임 개발이 가능하다. 언어는 유니티는 C#, 언리얼 엔진은 C++를 사용한다. 게임은 개체가 있고 맵이 있기 때문에 모델링 기술도 필요하다. 만약 게임에 AI가 필요하다면 그에 대한 이해도 필요하지 않겠는가? 그리고 멀티플레이가 가능한 게임은 게임 서버에 대한 이해도 필요하다. 게임 서버는 가격이 비교적 저렴한 아마존 웹서비스와 구글 클라우드 플랫폼을 사용한다. 게임은 특히 스토리 라인, 유저 경험 등 흥망성쇠를 결정하는 요인이 매우 많다. 그만큼 웰메이드 게임을 만드는 데는 개발뿐만 아니라 테스트와 피드백이 매우 중요하다. 웰메이드 게임은 작은 소리 하나까지 신경 써서 만든다. 많은 부분을 신경 써야 하는 부분이기 때문에 혼자서 개발하는 것은 엄청난 일이다.


 지금까지 창업아이템의 분야에 따라 필요한 스택들을 살펴보았다. 나의 실력 자체가 높지 않기 때문에 사실이 아닌 내용이 있을 수 있고, 견해가 크게 개입되었을 가능성이 매우 높기 때문에 필터를 켜고 읽었기를 바란다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari