뭘 만들어 보고 싶으신가요?
개발자가 되고 싶은데 뭐 부터 해야 해요?
개발자로 일하면서 자주는 아니지만 가끔 듣는 말입니다. 다른 개발자들도 공감할만한 질문일 것입니다. 그리고 이런 질문은 다시 되물음으로 끝나게 됩니다.
그렇다면 만들어 보고 싶은게 뭔가요?
이러한 것에 선뜻 대답하기 어려운 사람이라면 그 사람은 아마 영화나 드라마 만화책 등 다른 매체에 등장한 프로그래머, 해커의 모습을 보고 프로그래머가 되고 싶었거나 막연히 프로그래머의 연봉 등을 생각하고 프로그래머가 되고 싶다고 말을 했을 가능성이 높습니다.
아무래도 좋아요. 어떤 계기로 프로그래머라는 직업이 눈에 들어왔다면 그 이후부터는 자신과 잘 맞는지 안 맞는지 살펴보면 되는 것이기 때문입니다. 그렇지만 이쪽 업계는 같은 프로그래머라고 하더라도 너무나도 많은 종류의 갈림길이 있습니다.
의사라고만 해도 내과 의사, 외과 의사 등 많은 의사 종류가 있듯이 개발자도 마찬가지 입니다. 단순히 개발자가 되고 싶다고 해서 모든 분야를 다 배우는 것은 거의 불가능 할 뿐더러 그렇게 할 이유도 없습니다. 특히 프로그램을 처음 배워보겠다면 한 분야로 시작하는 것도 좋고요.
그래서 여기에서 모든 방향과 길을 설명할 수는 없지만 자주 물어보는 것 위주로 그리고 아직 개발에 대한 지식이 부족한 상태에서는 뭘 먼저 배워야 하는지 간략하게 설명 해보려고 합니다. 실제로는 더 많은 방법과 방향이 있지만 그걸 여기에 다 설명하면 복잡해질 뿐이니까요.
그리고 이 설명 뒤에 가장 중요한 것이 하나 나옵니다.
1. 웹 개발자
웹(Web) 사이트란 일반적으로 브라우저를 통해 홈페이지 주소를 입력하여 접근하는 사이트를 말합니다. 예를 들어 인터넷 창을 열고 주소창에 brunch.co.kr 을 입력했다면 브런치 메인 페이지로 이동하게 될 것입니다.
그리고 거기서 눈으로 보고 있는 그 화면과 구성 전반을 만들어 내는 역할을 웹 개발자라고 합니다. 또한 웹 개발자는 크게 두 부류로 나뉘어 집니다.
1) 프론트엔드(Front-end) 개발자
프론트엔드 개발자는 주로 화면을 구성하고 사용자가 버튼을 누르면 어떤 것을 동작시키는지, 화면의 어디를 손가락으로 드래그하면 어떤 모습으로 보여줘야 하는지 등의 업무를 진행하게 됩니다.
사용자가 가장 먼저 만나는 부분을 작업하기 때문에 이름도 프론트엔드 개발자라고 불리게 됩니다. 그럼 프론트엔드 개발자가 되기 위해선 어떤 지식들을 배우는 것이 좋을까요?
HTML, CSS, Javascript 에 대해서 먼저 배우는 것이 좋습니다. 그리고 여기서 프로그래밍, 즉 컴퓨터에게 연산과 명령을 직접 내리는 역할을 담당하는 것은 바로 Javascript 입니다. Java라는 것도 있기 때문에 혼동해서는 안 됩니다. 자바와 자바스크립트는 매우 다릅니다.
2) 백엔드(Back-end) 개발자
백엔드 개발자는 프론트엔드 개발자의 나머지 부분을 담당하는데 주로 눈에는 잘 보이지 않는 부분을 개발하게 됩니다. 프론트엔드에서 요청한 자료를 저장하고 취합하고 제공하는 일들을 주로 하게 되는 것이죠.
눈에 보이지 않는다고 해서 결코 중요하지 않다는 것이 아닙니다. 백엔드 개발이 없다면 홈페이지는 완성되지 못합니다. 어느 한 쪽이 더 좋다고도 말씀드릴 수 없을것 같아요. 두 분야 모두 소중하고 홈페이지에서 없어서는 안 될 역할입니다.
그리고 이 두 가지를 모두 하는 사람들을 풀 스택 개발자라고 합니다.
어쨌든 백엔드 개발자는 배울 수 있는 프로그램 언어가 조금은 다양하지만 그래도 가장 유명하고 많이 사용하는 것 몇 가지만 알려 드리겠습니다. 프론트엔드는 가장 중요한 것이 자바스크립트 하나였지만 백엔드는 다음 중 하나만 우선 접근하시면 됩니다.
Java, Javascript, PHP
Java는 대표적인 프로그래밍 언어로 역사가 꽤 오래되었고 여전히 많이 사용하고 있습니다. 또한 Javascript 역시 프론트엔드 개발 뿐만 아니라 백엔드쪽까지 진출하여 활용되고 있습니다. PHP는 초기의 홈페이지 개발부터 함께했지만 지금은 인기가 조금 식어 있습니다. 하지만 여전히 많이 사용하고 있고 필요로 하는 곳이 많습니다.
그 외에도 정말 많은 백엔드 개발용 프로그래밍 언어가 많습니다. 다양하게 아는 것은 좋지만 처음부터 너무 많은 것을 배우려고 하면 배워지지도 않을 뿐더러 오히려 방해만 되는 경우가 많으니 우선은 쉬운 방법부터 찾아가는 것이 좋습니다.
이러한 개발을 하다 보면 자료를 저장하는 도구로써 데이터베이스 라는 것을 접하게 됩니다. 그 때 가장 많이 사용되는 것은 Mysql, MariaDB 가 있습니다. 그 외에도 PostgreSQL, 기타 NoSQL등 너무나도 많은 데이터베이스가 있기 때문에 이 곳에서 다 소개하기는 어렵습니다. 이것도 나중에 따로 시간을 내서 정리해보도록 할게요.
2. 게임 개발자
게임 개발자는 다양한 범위(휴대폰 게임, 콘솔 게임, PC게임 등)로 게임을 접할 수 있듯이(이를 플랫폼이라 합니다) 각각 분야가 다르기도 합니다. 그래도 다행인 점은 일일이 모든 플랫폼에 맞춰 게임 개발을 하는 수고를 덜어줄 수 있도록 도움을 주는 도구들이 있다는 것입니다.
그 중 가장 유명한 것이 바로 유니티와 언리얼입니다. 두 가지 모두 게임 엔진이라고 하며 해당 게임 엔진을 다루는 방법과 프로그래밍 언어를 학습하면 게임 개발이 가능한데 해당 엔진을 가지고 PC, 모바일, VR게임도 개발할 수 있습니다. (콘솔 게임은 조금 다릅니다)
1) 유니티
유니티는 유니티 엔진과 C#으로 게임을 개발할 수 있습니다. 최근에는 소스코드를 직접 짜지 않고도 게임을 개발할 수 있는 Bolt 라는 비주얼 스크립팅 시스템을 공개 했습니다. 하지만 아직까진 활성화 되어 있지 않고 비주얼 스크립팅이라 해도 논리적인 개발 개념이 없다면 개발을 하기 어렵기 때문에 개발자의 길을 걷고 싶다면 C#을 배워보시는 것도 추천합니다.
유니티로는 다양한 게임을 만들 수 있지만 언리얼이 3D게임에 초점을 두는 것과는 달리 2D게임 역시 지원을 많이 하기 때문에 소규모 게임 개발 회사나 1인 게임 개발자들이 많이 사용합니다.
2) 언리얼
언리얼 엔진은 게임을 좋아하시는 분들이라면 들어봤을 포트나이트가 이 엔진으로 만들어져 있습니다. 그런데 사실 굉장히 많은 게임이 언리얼 엔진으로 개발되어 있고 대부분의 게임이 훌륭한 그래픽과 물리엔진을 자량합니다. 그래서 AAA급 게임이라 불리는 대형 회사의 게임들이 주로 언리얼 엔진으로 개발되곤 합니다.
언리얼 엔진은 C++ 을 이용해서 개발하게 되며 이 엔진 역시 프로그래밍을 하지 않고도 개발할 수 있는 블루프린트라는 비주얼 스크립팅 시스템을 가지고 있습니다.
3. 모바일 앱 개발자
모바일 앱은 아마도 현재는 가장 많은 사용자 층을 가진 어플리케이션이지 않을까 합니다. 수많은 사람들이 이제 스마트폰을 가지고 다니고 그 스마트폰으로 앱을 실행시키기 때문입니다.
그 안에서 개발할 수 있는 것은 게임을 포함해서 무궁무진 하지만 게임의 경우엔 앞서 소개해드린 게임 엔진으로 개발이 가능합니다. 하지만 모바일 앱 개발에 대한 지식이 조금은 있어야 하겠죠.
그리고 모바일 앱 개발은 안드로이드, iOS가 있는것처럼 개발자 역시 나뉘어집니다. 그리고 그 둘을 하나의 언어로 개발하는 개발자도 있어요.
1) 안드로이드
안드로이드는 구글에서 개발한 모바일 운영체제(OS)입니다. 안드로이드 앱을 개발하기 위해서는 자바(Java)나 코틀린(Kotlin) 언어를 사용하는 것이 일반적입니다.
안드로이드 개발자는 안드로이드 SDK(Software Development Kit)를 사용하여 앱을 개발하고, Google Play Store에 자신이 만든 앱을 올려 안드로이드 사용자들에게 제공할 수 있습니다.
2) iOS
iOS는 애플(Apple)에서 개발한 모바일 운영체제(OS)입니다. iPhone, iPad, iPod touch 등 애플의 모바일 기기들은 iOS 운영체제를 탑재하고 있으며, iOS 앱을 개발하기 위해서는 Objective-C나 Swift 언어를 사용하는 것이 일반적입니다.
iOS 개발자는 iOS SDK를 사용하여 앱을 개발하고, App Store에 배포하여 iOS 사용자들에게 제공할 수 있습니다.
3) 하이브리드
하이브리드 앱은 네이티브 앱과 웹 앱의 장점을 결합한 것으로, 하이브리드 앱을 개발하기 위해서는 HTML, CSS, JavaScript 등 웹 개발 기술을 사용하는 것이 일반적입니다. 그렇지만 다른 경우도 있기 때문에 꼭 이런 기반으로 하이브리드 앱을 만든다고 볼 수는 없습니다.
하이브리드 앱은 네이티브 앱과 달리 하나의 코드로 여러 플랫폼에서 실행할 수 있으며, 네이티브 앱보다 비용이 적게 들고 개발 기간이 더 짧은 것이 장점입니다.
하이브리드 앱은 Flutter, React Native, Ionic 등의 프레임워크를 사용하여 개발할 수 있습니다.
4. 다른 수 많은 개발자
운영체제, 응용 소프트웨어, 하드웨어에 들어가는 소프트웨어 개발, 인공지능 등 아직도 제가 못해본 분야의 업무들은 수도 없이 많습니다. 그리고 이 일들을 평생 다 해볼 수 없음은 분명합니다.
그 만큼 개발자로서 할 수 있는 일이 무궁무진 하다는 것입니다. 그리고 저는 멈춰있는 기기에 살아 숨을 쉬게 해주는 것이 프로그래머라고 생각합니다.
가장 중요한 것
사람에 따라 다르겠지만 미리 공부를 해서 시작한다는 것은 쉬운 일이 아닙니다. 다른 직업들도 마찬가지겠지만 직접 하면서 배우는 것이 훨씬 자연스럽지 않던가요? 그렇기 때문에 프로그램도 자신이 만들고 싶은 것 하나를 정했다면 그걸 조금씩 만들어 보는 것이 쉽게 시작하는 방법입니다.
프로그램 언어를 몰라도 좋습니다. 처음엔 그저 시키는 대로 하나씩 따라서 만들어 보세요. 그것이 첫 퍼즐 조각을 얻는 것이 될 겁니다. 그리고 그 조각들을 하나씩 하나씩 얻다보면 언젠가는 자신만의 완성품을 가질 수 있게 될 거예요.
꼭 성공하셨으면 좋겠습니다.