여기서는 간단하게 개발자가 되기 위한 여러 방법을 소개하려고 한다. 개발자로 취직을 하는 방법이라기 보다는 개인이 가지고 있는 아이디어를 어떻게 구현할 줄 아는 즉, 프로그램 개발이 가능한 사람이 되는 방법을 말해보고자 한다.

자신이 전공자인가?

우선, 자신이 컴퓨터 공학이나 관련 전공자인지, 아닌지로 구별해보자. 컴퓨터 전공이라면 이미 관련 지식을 가지고 있고 선후배나 여러 곳에서 쉽게 정보를 얻을 수 있을 것이다. 나는 전기공학을 나와서 C,C++ 정도는 과에서 수강했는데, 사실 그걸로는 계산기, 숫자야구게임 같은 걸 만들어본 게 전부였다. 여기서 더 나아가 사람들이 쓸 프로그램을 만들고 싶어서 컴공이나 전자공학 쪽 수업을 찾아 듣기도 했고, 학교에서 방학 때 진행한 앱 창작터라는 프로그램에 참여해 안드로이드를 배우고 앱을 만들기도 했다. 사실, 대학교 때 내 주위에는 어떤 것을 만들고 싶다는 사람들은 많이 있었지만, 그것을 실제로 구현할 사람은 많지 않았다. 그래서 흔히 말하는 외주를 맡겨서 홈페이지를 만들기도 하고, 뭣도 모르는 나에게도 많이 문의를 했었다. 하지만 전공자가 아니더라도 요즘은 유튜브나 인프런 같은 무료 강의를 접할 수 있는 곳이 많아서 누구나 충분히 원하는 것을 만들 수 있게 되었다.

전 아무것도 모르는데요?

괜찮다. 혼자 모든 것을 알 수도, 할 수도 없다. 물론, 언제 개발 언어 기초 문법부터 배워서 사람들이 쓸만한 페이지나 프로그램을 만들 수 있을지 막막할 것이다. 개발 언어도 C, JAVA, Python, Go 등 너무 다양해서 무엇부터 골라야 할 지 모른다면, 우선, 당신이 개발하고자 하는 것을 크게 3가지로 구분해보자.

  1. 홈페이지를 만들고 싶다.
  2. 안드로이드/Ios 앱을 만들고싶다.
  3. 게임을 만들고 싶다.

이것들을 어떻게 쉽고, 무료로 만들 수 있을 지 공유해보려고 한다.

홈페이지 만들기

1. 홈페이지를 만들고 싶다. 가 제일 큰 범위가 될 것 같다. 흔히 쓰는 쇼핑몰이 될 수도 있고, 블로그처럼 정보를 제공하는 곳이 될 수도 있겠다. 좀 더 디테일하게 풀어보자면 회원 가입을 받아서 고객 정보를 데이터베이스로 관리하고, 내가 팔고자 하거나 제공하고 싶어하는 것을 보여주고 고객의 결제까지 연동시키면 되겠다. 개발의 총 양을 10이라고 한다면, 보여지는 화면을 만드는 부분 7, 어떤 정보들을 데이터베이스에서 관리할 지 설계하고 구축하는 부분 2, 결제 연동 등 외부 서비스와 연결 1 정도로 대충 생각할 수 있겠다. 물론, 단순히 만들어보기로 끝나지 않고 많은 고객을 가지게 된다면 기본적인 서버 외에 개인 정보 보호를 위한 암호화, 보안 등 신경써야 할 부분이 많겠지만 그것은 차차 나중에 생각하고 프로토타입을 만들어서 결과물을 내는 것에만 집중하자.
아래는 React.js라는 웹 화면을 만들 때 쓰는 라이브러리로 영화 랭킹을 보여주는 페이지를 만드는 강의다. 영화 정보는 다른 곳에서 제공하는 Open API 라는 것을 통해서 랭킹, 다운로드 수 등을 받아올 것이다. 이걸 따라해보고, 영화 정보 대신 내가 보여주거나 팔고 싶은 정보로 바꿔서 만들면 되겠다 라는 생각이 들면 좋겠다.

 

모바일 앱 만들기

2. 안드로이드/Ios 앱을 만들고싶다. 는 두 가지 방법이 있다. 앞서 홈페이지 만들기에서 한 것을 웹뷰에 그냥 띄워서 보여주는 앱을 만드는 방법(하이브리드)과 아예 새롭게 앱을 만드는 방법(네이티브)이 있다. 요즘은 굳이 네이티브에만 집중하지 않고, 굳이 PC용 따로, 모바일용 따로 만드는 불편함을 줄이기 위해 하이브리드 방식을 많이 선택하는 편이다. 그리고 React Native처럼 모바일을 위한 라이브러리도 만들어져 있기 때문에 한 번 개발해서 PC, 모바일을 한 번에 지원하는 것을 추천한다. 여기서 개발자는 모바일 푸쉬나 알람, 진동 등 모바일 고유의 기능만 따로 추가하면 되겠다.
아래는 React Native로 to do list 앱을 만드는 강의다. 이 강의를 따라해보고 굳이 네이티브 방식을 안해도 되겠다라고 생각이 들길 바란다.

 

게임 만들기

3. 게임을 만들고 싶다. 는 앞서 본 것들과는 다르게 좀 더 특화되어 있다. 자신이 어떤 게임을 만들고 싶은지에 따라 Unity,Unreal 등 게임 개발 엔진을 쓸 지, 아니면 비교적 간단한 캐주얼 게임을 위한 cocos2d를 쓸 지, 앞서 홈페이지나 모바일 앱 개발 언어로 직접 구현할 지 선택할 수 있다. Steam이나 게임 유통 플랫폼에 올라오는 게임들은 UnityUnreal처럼 게임 엔진을 사용하는 경우가 많다. 게임 엔진이란 개념이 어렵다면, 3d 게임에서 쓰이는 중력(Gravity)과 같은 것을 미리 구현해놓은 것이다. 개발자는 직접 개발하기 어려운 중력에 대해 필요한 값만 넣어주어 원하는 방식대로 게임을 만드는 것이다. 이 외에도 카메라의 위치, 광원 등 다양한 요소를 지원해주기 때문에 대형 게임들도 이러한 게임 엔진을 많이 사용한다. 보통은 UI 쪽을 구성하고 해당 UI가 어떻게 동작할 지 스크립트를 작성해서 구현해주는 방식이다. UI 쪽에서 난 디자인은 못 하는데? 라고 생각한다면 Unity에서는 Asset Store가 있고, 거기에 무료로도 많이 올라와 있기 때문에 한 번 둘러보길 바란다. 무료 게임 강의는 아쉽게도 찾기가 힘들었다. 앞서 예시들처럼 간단한 프로젝트를 만들어보면서 배워야 좋은데, asset 까지 같이 무료로 제공하기가 힘든 문제도 있기 때문이지 않을까한다. 대신, Unity나 Unreal 중에 게임 2~3 개를 만들 수 있도록 소개와 가이드해주는 책을 사서 해보는 것을 추천한다. 보통 그런 책은 샘플 코드와 asset 도 같이 제공하기 때문에 개발이 편할 것이다. 여기서 중요한 것은 Unity나 Unreal 엔진 최신 버전에 최대한 가까운 버전을 쓰는 책을 고르는 것이다.

마무리하며

개인적으로 처음 개발하는 사람에게 제일 중요하게 생각하는 것은 한 번 성취감을 맛보는 것이다. 나는 개발하는 과정이 그리 즐겁지 않다. 시간도 오래 걸리고, 해결되지 않는 버그와 씨름하며 머리 아프기 때문이다. 하지만 내가 만들어보고 싶은 것을 스스로 만들어낸다는 것이 좋다. 물론, 유저들에게 쓰디쓴 평가를 받기도 하고, 대박칠 줄 알았던 앱이 시덥지 않기도 하다. 대신, 내가 만든 프로그램으로 돈을 벌기도하고, 취직할 때 도움이 되기도 했다. 본인이 개발자가 아니라 기획이나 마케팅 등 다른 분야로 갈 생각이라고 해도, 개발을 경험한 것과 아닌 것에 대한 차이는 크다고 생각한다. 개발자로 진로를 계획하고 있다면, 본인이 개발하는 것들을 Github 에서 관리하는 것을 추천한다. 

'개발 > My Dev Story' 카테고리의 다른 글

2019 웹 개발자는 뭘 해야할까  (0) 2019.05.22

웹 개발자는 크게 프론트엔드, 백엔드로 나뉘어진다. 풀스택 개발자라면 두 개 뿐 아니라 데브옵스까지 참고하면 좋을 듯 하여 가져와봤다.


인트로

 

우선, 형상관리는 Git을 안 쓸 이유가 없는 것 같다. 물론, 아직까지 국내에선 Spring Framework 기반 개발을 하면서 이클립스에서 SVN을 이용하여 관리하는 곳도 많을 것으로 생각된다. 하지만, Git은 branch를 나누고 merge 하는 방식 등 SVN에 비해 형상 관리가 훨씬 강력하다고 생각한다. 거기에 무료이니 안 쓸 이유가 없지 않을까? 그리고 다양한 오픈 소스를 공유하고 받을 수 있는 Github와의 연동을 생각하면 이젠 필수가 아닐까 한다. 이 외에는 인트로에서 특별히 언급할 것은 없는 듯 하다.

 


프론트엔드

전체적으로 PHP, Spring Framework 같은 무겁고 느린 느낌에서 React.js, Node.js 처럼 가볍고 빠른 형태로 바뀌어야 하는 상황이라고 생각한다. Spring도 Spring Boot 처럼 쉽게 쓸 수 있도록 개선을 하고 있지만, MVC(Model, View, Controller)패턴에서 벗어나기 쉽지 않아 보인다. 물론, 개발하는 입장에서는 하던 게 편하기 때문에 리액트보다 스프링 개발이 더 쉬울 수 있겠지만, 모바일 웹과 같이 반응형 화면을 만들기 위해서는 React.js 나 Vue.js 와 같은 자바스크립트 기반 라이브러리로 개발하는 것이 좋아보인다. 동일한 기능을 자바로 한 번, 안드로이드 네이티브로 한 번, 스위프트로 한 번 하는 것은 너무 비효율적이 되어버렸다.

 


 

백엔드

 

백엔드는 전문 분야가 아니지만 개인적인 의견을 써보려고 한다. 빅데이터, 인공지능, 머신러닝과 관련이 있는 사람이라면 어디에서든 핵심 인재가 될 수 있을 것 같다. 캐글처럼 초심자도 이런 것에 대해 쉽게 접할 수 있는 공간이 늘어가고는 있지만, 아직 이런 것을 어떻게 자신의 서비스와 연결시켜서 더 발전시킬 건지에 대해서는 쉽지 않아보인다. 챗봇처럼 이제 주위에서 서비스하는 것이 하나 둘 생겨가기 때문에 자연어 관련 전문가가 되는 것도 좋을 듯 하다. 이것과 관계없는 개발자라면 서버에서 클라이언트로 제공하는 API를 개발하거나 DB 관리 등을 할텐데 아직은 완벽히 넘어갈만한 것이 보이진 않는다. 사실 DB는 어떤 걸 써도 쿼리가 거의 비슷하기 때문에 회사에 따라 선택하는 것 같다. API는 RESTful API에서 GraphQL 로 넘어가는 추세 같지만 아직 주위에서는 RESTful API를 유지하고 있는 상황으로 보인다. 언어 자체는 실리콘밸리에서는 파이썬에서 이미 고랭으로 다 넘어갔다고 들었지만, 나에게 와닿은 것은 없다. 그냥 본인/회사랑 맞는 것을 선택하면 될 듯 하다.

 


데브옵스

 

데브옵스(DevOps)는 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 프로젝트 관리를 어떻게 할 건지, 개발 형상 관리를 통해 빌드 배포를 어떻게 할 건지, 테스트 및 릴리즈, 모니터링은 어떻게 할 건지 정하는 거라고 보면 되겠다. 이것은 프로젝트마다 다 다르기 때문에 뭐가 좋은지 말하기가 어렵다. 내가 써본 걸 명시해보자면 프로젝트 관리는 트렐로, 빌드 배포는 젠킨스 정도가 있겠다.

개발이라는 게 분야가 넓기 때문에 국소적으로 보안 쪽을 담당할 수도 있고, 풀스택으로 혼자 하나의 프로젝트를 완성해야 할 수도 있다. 그래서 막상 이렇게 본 것을 어떻게 더 공부해야 할 지 감이 안 올 수도 있을 것 같다. (사실 나도 그렇다) 같은 언어도 패치가 되면서 자주 내용이 바뀌는데, 언어 자체를 바꿔서 공부해야 할 경우도 생긴다. 그렇기에 뭘 하려고 하든 하나의 프로젝트를 완성해 나가는 것이 중요하다고 생각한다. 완성이란게 풀스택을 의미하는 것은 아니고, 자신이 정한 분야에서 온전히 독립적으로 기능을 할 수 있으면 되지 않을까한다. 그렇게 완성을 한, 두 개 늘려가다보면 자신의 커리어가 그 만큼 늘 것이라고 생각한다.

'개발 > My Dev Story' 카테고리의 다른 글

개발을 어떻게 시작해야 할 지 모르겠다면?  (0) 2019.07.09

+ Recent posts