brunch

You can make anything
by writing

C.S.Lewis

by 마르코 Feb 11. 2016

한 눈에 개발 보기

<Imagine + Engineer> 첫 글

아래는 <Imagine + Engineer>의 목차


1. 한 눈에 개발 보기

2. 내게 딱 맞는 첫 프로그래밍 언어 찾기

3. 웹 프로그래밍이 뭔가요?

4. 공부하는 개발자

5. 좋은 안드로이드 개발자가 되는 법

6. 효과적으로 개발자의 시간 관리하는 방법

7. 알고리즘은 왜, 그리고 어떻게 공부하나요?

8. 당신이 개발을 알아야하는 이유

9. 나는 개발이 좋다

10. 우리는 지금까지 개발을 잘못 배웠다

11. 앱 그다음은 무엇인가?


같은 매거진 다른 시리즈 <내 손 안의 비서>의 목차이자 첫 글


같은 매거진 다른 시리즈 <개발 읽어주는 남자>의 목차이자 첫 글




개발을 공부하기로  마음먹었을 때 가장 곤란한 점은 '내가 무엇을 모르는지도 모른다.'라는 것이었다. 나의 경우 지인 한 분이 내가 본격적으로 개발을 배우기 전에 개발의 전체 과정을 알려주셨다. 그런데 실제로 개발 경험이 많지는 않으셨던 분이셔서, 설명을 듣고도 설익고 이해되지 않은 내용을 대충 집어삼켰던 것이 기억이 난다. 그리고 C 프로그래밍 책을 한 권을 보고, 2달 간 학원에서 자바를 공부했지만 이걸 가지고 내가 무엇을 만들 수 있을지 모를 때는 정말 참담했다. 내가 무엇을 모르는지 아는 것은 정말 중요하다. 특히 개발에서는 이것이 매우 중요한데, 소프트웨어 개발의 범위는 너무 광범위해서 모든 것을 잘하기는 사실상 불가능에 가깝기 때문이다. 그렇기 때문에 처음 프로그래밍에 대해서 배우기 시작할 때 여러 분야를 다양하게 조금씩 맛보며 내가 정말 관심이 가는 분야가 무엇인지 찾아가려는 노력이 필요하다. 아래에서는 간단하게 일반적으로 프로그래머로 경력을 시작했을 때 마주할 수 있는 분야에 대해서 정리해보았다.

주의! 아래의 설명은 비전공자에게 개발의 범위를 개괄적으로 보여주기 위한 것으로, 자세한 내용은 생략되어 있음



1. 서버 개발


서버 개발은 주로 백엔드(Back-end) 개발이라는 이름으로 불린다. 주로 하는 역할은 (데이터베이스를 다루는 SQL을 통해서) 데이터를 입출력하고 사용자가 사용할 기능을 내부적으로 작성한다. 우리가 웹사이트에서 사용하는 거의 모든 기능이라고 생각하면 되는데, 회원 가입, 글 작성, 파일(사진) 업로드 등이 여기에 해당한다.


서버 개발은 뒤에서 설명할 클라이언트 개발과 밀접한 연관성을 갖는다. 서버 개발은 정말로 데이터와 그 데이터를 처리하기 위한 내부 로직으로 이루어져 있기 때문에, 클라이언트 쪽을 이해하지 못하면 10년 전에나 만났을 거 같은 정말 못난 웹사이트를 만들  수밖에 없다. 다만 요즘은 Bootstrap(링크)이라든지 백엔드 개발자가 보다 간편하게 깔끔한 디자인을 구현할 수 있는 방법이 많이 생겨서, 중간 정도는 할 수 있다.


그리고 이후 시스템 관리에서 더 자세히 설명하겠지만, 아마존(AWS) 등 클라우드 서비스가 유행을 하면서 백엔드 개발자 한 사람이 맡을 수 있는 범위가 점차 넓어지고 있다.    


2. 클라이언트 개발


클라이언트는 앞서 설명한 서버에서 비해 조금 더 사용자에게 가까이 접해 있는 부분이다. 크게 웹과 모바일, 그리고 데스크톱 애플리케이션으로 구분할 수 있다. 웹의 경우 인터넷 익스플로러(IE), 크롬, 사파리 등으로 접근할 수 있는 모든 서비스를 생각하면 좋은데, 백엔드와 차별점은 버튼의 위치, 화면의 전환 애니메이션 등 보다 시각적인 요소에 치중한다는 점이다. 백엔드(Back-end)와 비교하여 프런트엔드(Front-end)라고 부르기도 한다. 그 외에도 사람들이 많이 사용하는 아이폰, 안드로이드 애플리케이션이나 윈도용, 맥용, 혹은 리눅스용 애플리케이션을 포함한다.


클라이언트 개발은 서버 개발에 비해 상대적으로 기술이나 프레임워크가 워낙 파편화 되어 있다 보니 하나의 프로그래밍 언어 혹은 단일 기술로 통합하려는 움직임이 있는데, 이에 해당하는 것이 웹에서 반응형을 적용한다든지, 하이브리드 앱을 만들어서 최소한의 비용으로 비슷한 기능을 구현하려는 움직임이 있다. 그리고 어마어마하게 트렌드가 빠르게 바뀌는 곳이기 때문에 항상 공부해야 하는 분야이다. 다른 한편으로는 초보로 들어와서 가장 빠르게 최고의 위치에 오를 수 있다는 의미이기도 하다.


3. 시스템 관리


시스템 관리는 서버를 '사용자가 이용하는 기능 중심'이 아니라 '물리적'으로 관리하는 것을 말한다. 구글, 네이버 등 거대한 IT회사는 모두 각자의 데이터센터를 갖고 관리하고 있다. 서버는 결국 컴퓨터인데, 매일 컴퓨터를 써봐서 알겠지만 다양한 이유로 에러가 발생하거나 꺼지는 경우가 있다. 서버도 똑같다. 죽는다. 만약에 서버에 서비스를 올렸는데, 서버가 죽어버린다면? 그것이 바로 접속이 되지 않고, 사용자는 서비스의 안정성에 의문을 제기하고 떠날지도 모른다. 그래서 우리가 사용하는 대부분의 서비스는 다수의 서버 컴퓨터로 이루어져 있는데, 그걸 관리하는 사람들이 존재한다.


보다 작은 회사나 서비스의 경우 한국에서는 카페 24(링크) 같은 호스팅 서비스를 많이 이용하기도 한다. 직접 카페 24 서비스를 사용해본 적은 없지만, 해당 서비스를 이용하여 서버를 세팅하면 서버 유지에 대한 책임은 호스팅 업체가 일정 부분 관리해주는 것으로 알고 있다.


최근 시스템 관리 쪽에 클라우드 서비스가 크게 약진하고 있다. 처음에는 데이터 센터의 할부 버전으로만 생각이 되었지만, AWS(Amazon Web Service), Google App Engine, Firebase, Docker 등의 서비스가 등장하면서 비용도 합리적으로 바뀌고 점차 서버 관리도  자동화되고 있는 추세이다. 이런 서비스를 통해서 실제로 서버를 구입하거나 호스팅 업체를 이용할 필요 없이, 언제나 원하는 만큼 서버를 가상의 공간에 만들고 사용할 수 있다. 비용은 사용량에 따라 과금되는 것이 일반적이다. 다만 서비스마다 정도의 차이는 다르지만, 안정성 관리를 할 수 있어야 한다.


4. 네트워크와 보안


서버(백엔드), 클라이언트(프런트엔드), 시스템 관리 이렇게 3가지가 서비스를 이루는데 가장 기본적인 요소라면, 네트워크는 이런 서비스가 사용자를 만날 수 있게 해준다. 네트워크에 연결되지 않은 서버는 사실 상 비싼 계산기에 불과하다. 네트워크에 연결이 되면, 사용자가 요청하는 데이터를 넘겨주고 필요한 데이터를 가공 및 저장할 수 있다.


네트워크에 연결된다는 것은 필연적으로 보안과 직결된다. 사용자와 상호작용 할 수 있다는 것은 악의를 가진 해커로부터 공격에도 열려있다는 의미이고, 이런 해커들의 공격을 막기 위해서 보안 분야도 해를 거듭  할수록 각광받고 있다.


5. 운영체제


앞선 4가지가 서비스를 만들고 운영하는데 초점을 맞추고 있다면, 운영체제 개발은 보다 컴퓨터의 근간을 만드는 일이다. 운영체제는 크게 Windows, Unix, Linux로 구분이 된다. Windows는 우리가 주로 사용하는 그 윈도가 맞고, Unix는 맥에서 사용한다. Linux는 Unix의 형제 뻘로 오픈소스로 발전하고 있다.


Windows나 Unix를 개발하고 싶다면, Microsoft나 Apple에 입사해야 한다. 그만큼 문은 좁지만 컴퓨터 자체를 움직이는 기반을 개발하는 것은 분명 흥미로운 일이다. 이쪽에 관심이 생긴다면 오픈 소스로 개발되는 Linux로 먼저 운영체제의 작동 원리를 먼저 살펴보면 어떨까? 오픈 소스라는 말은 프로그래머가 짜놓은 코드에 직접 접근이 가능하다는 뜻이다.


6. 빅데이터


앞서 서버, 클라이언트, 시스템 관리 3가지를 서비스의 기본 요소라고  이야기하였다. 빅데이터는 이렇게 만들어진 서비스에서 나오는 방대한 양의 사용자 행동 정보를 처리하는 기술이다. 비즈니스 목적에 맞게 각 서비스는 사용자의 서비스 이용 패턴 및 사용 시간 등 다양한 정보를 파일로 만들어서 저장한다. 이렇게 파일로 만들어진 정보는 기존에는 주로 서비스의 에러나 성능 개선에 초점을 맞춰  활용되었는데, 최근에 들어 사용자의 행동에 기반하여 서비스를 개선하기 위한 용도로 많이 활용되고 있다.


생각보다 한 명의 사용자가 만들어내는 데이터는 많다. 수많은 사용자가 만들어내는 방대한 데이터를 처리하기 위하여 하둡(Hadoop)이나 스파크(Spark)를 이용하여 데이터에서 연관성을 찾고, 서비스 개선에 활용할 인사이트를 도출한다.


7. 게임


게임 개발은 서버, 클라이언트, 시스템 관리 3가지가 모인 서비스의 한 가지 형태이다. 


다른 웹이나 모바일 서비스와 다른 점은 유저 1명이 다른 서비스에 비해 월등히 많이 서버를 사용하고, 동시 접속자 수도 많고, 현란한 그래픽 등 신경 쓸 부분이 많다는 것이다. 그리고 게임도 데스크톱 컴퓨터를 기반으로 한 하드코어 게임부터 시작해서 애니팡과 같은 모바일 게임에 이르기까지 상대적으로 가벼운 게임들도 다룰 수 있다.


8. 그 외


그 외에도 하드웨어와 결합한 사물인터넷(IoT, Internet of Things) 등이 있다.




개발자가 되고 싶으신가요? 좋은 개발자에 대해서 항상 고민합니다.

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