brunch

You can make anything
by writing

C.S.Lewis

by 조인석 chris Jan 10. 2016

자바를 얼마나 배워야 취업이 되나요?

SW 개발자가 되고 싶은 후배들을 위한 이야기

필자에게 간혹 취업 관련 상담 메일이 오곤 한다. 취업을 준비하는 각자의 상황에 맞게 다양한 고민 및 노력들을 하고 있지만, 도움이 될 만한 정보가 많지 않기 때문에 어려움을 겪고 있는 것을 알 수 있었다. 최근에 만났던 한 친구는 컴퓨터 관련 전공으로 석사까지 졸업을 하였지만, 코딩 실력이 충분하지 않다고 판단이 되어서 강남에 있는 자바 프로그래밍 학원을 다니고 있다고 하였다. 그리고는 본 글의 제목과 같은 질문을 하였다. 


- 자바 공부를 시작하였는데 어느 정도 수준이 되어야 취업이 가능한지

- 좋은 회사를 찾는 요령

- 공부해야 할 것들


취업이 가능한 회사의 유형 및 각 회사의 장단점은 앞서 여러 글을 통해 소개를 한 바 있다. 아직 읽지 않았다면 참고하기 바란다.

https://brunch.co.kr/@insuk/1 (대한민국 SW 개발자 되기)

https://brunch.co.kr/@insuk/2 (어떤 회사를 선택해야 하나요? (1/2))

https://brunch.co.kr/@insuk/3 (어떤 회사를 선택해야 하나요? (2/2))


이번 글은 회사 관점이 아닌, 기술 관점에서 접근해 보려고 한다. 초보 개발자로 취업하여 어떤 일들을 할 수 있는 지  살펴보고 각 영역에서 공부해야 할 기술들이 어떤 것들이 있는 지  살펴볼 생각이다. 실은 이 정보들이 궁금하다고 윗 글에 댓글을 달아 주신 분들이 많았고, 당연히  궁금해할 것이라 생각이 든다. (귀에서 이 분들의 목소리가 들리는 것 같다..ㅡㅡㅋ)


참고로 필자가 이 모든 기술들을  섭렵하고 있는 것은 아니다. 만약, 잘못된 정보가 있다면 꼭 댓글로 알려주기 바란다. 본문에  반영하겠다. 그리고 너무 깊이가 깊은 기술들을  나열하지는 않을 것이다. 처음  공부해야 할 기초적인 기술들에 대해서 나열하는 것이 좋을  듯하다. 그런 기술들을 익히고 나면, 다음에 익혀야 할 기술들은 스스로 알 수 있을 것이라 생각이 든다.


그럼  시작해 보자.




여러분들이 회사에 취업하여 어떤 SW를  개발할 수 있을까? 필자가 처음 경력을  시작하였을 때는 MFC 기반의 C/S 시스템을  개발하였고, 데이터베이스를 다룰 줄 알았어야 했다. 그 후에는 자연스럽게 자바 기반의 웹 애플리케이션을 개발하게 되었고, 프로젝트마다 다양한 형태의 SW를  개발하게 되었다. 현재는 데스크톱과 모바일에 함께  사용할 수 있는 반응형 웹 애플리케이션과 머신러닝을 활용한 데이터 분석 프로그램 개발 관련 프로젝트를 수행 중이다. 하지만, 컴퓨터 관련 회사에 취업한다고 하였을 때 모두 다 SW를  개발하는 것은 아니다. 회사 소개 글에서 잠시  언급하였지만, 대형 SI 업체에 취직한다면 고객사의 시스템 유지보수를 하는 부분이 비중이 크기 때문에 SW를  개발하기보다는 서버 관리나 데이터베이스 관리 등의 일을 할 수도 있다. 또한, 하도급 계층구조의 갑, 을 형태의 회사에서 프로젝트에 투입이 된다면,  개발보다는 프로젝트 관리 쪽 일을 하게 될 수도 있다. 이런 모든 형태의 일은 SW 개발하는데 반드시 필요한 요소들이다. 이게 본인에게 맞는 일인지 아닌 지는 실은 겪어 보지 않는 이상 알기 힘들다. 필자도 가급적 이런 업무들에 대한 개인적인 생각은 배제하여 작성하고자 한다.


그럼 위에서 나열한 일들을 하나씩  살펴보자.



스탠드얼론 (Standalone) 시스템 개발

스탠드 얼론은 한국말로 바꾸면 '홀로서기' 정도가 될까. 여러분들이 설치 프로그램을  다운로드하여서 PC에 설치하는 SW를 말한다. Windows에 기본적으로 설치되어 있는 메모장이나 워드패드, 계산기 등이나 마이크로소프트의 파워포인트, 엑셀 등이 대표적인 예일 것이다. 이런 SW는 반드시 설치가 되어야 하고 기본적으로는 외부와 데이터를  주고받지 않는다. 이런 SW를 개발할 때 사용하는 기술은 여러 가지가 있는 데 가장 많이 볼 수 있는 닷넷이나 Java로도 구현이 가능하다. 실은 유명한 패키지 솔루션 판매 회사가 아닌 이상, 이런 시스템을 개발하는 것은 접하기 쉽지 않을 것이다.


클라이언트/서버 (C/S, Client / Server) 시스템 개발

PC에 설치한 애플리케이션이 단독적으로  실행되지 않고, 외부 서버와 데이터를  주고받는 형태의 시스템이다. 이런 시스템을 보통 C/S 시스템이라고 한다. PC에 설치한 애플리케이션이 서버의 클라이언트가 된다. 기본적으로 스탠드얼론 시스템을 구현한 언어로 구현이 가능하나, 서버 쪽 애플리케이션은 특정 데이터베이스가 될 수도 있고, C++, Java와 같은 시스템으로  개발될 수도 있겠다. 그리고 조금  생소할 수 있겠지만, 비쥬얼베이직이나 델파이, 파워빌더와 같은 언어로 개발이 되기도 한다. 필자가 예전에 베트남 쪽의 코어 뱅킹 시스템 제안 작업에 동참한 적이 있다. 그 당시 사용했던 언어가 파워빌더였다. 생각보다 이런 언어로 개발이 된 시스템이 의외로 많다. 초보자가 쉽게 배울 수도 있겠다.


웹 애플리케이션 개발

하지만 아무래도 가장 수요가 많은 쪽은 웹 애플리케이션 개발 쪽일 것이다. 여러분도 매일 매일 PC나 스마트폰의 웹 브라우저를 통해서 접속하고 있는 모든 시스템들을 말한다. 이 영역에서는 크게 세 가지로 엔지니어의 형태가 갈린다. 프론트 엔드 (Front-end), 백 엔드(Back-end), 풀 스택 (Full stack)이 바로  그것이다.


1) 프론트 엔드 (Front-end)

프론트 엔드는 보통 시스템을 사용하는 화면을 만드는 기술들을 말한다. 웹 페이지를 그리는 기술이다. 디자인 감각이 있고 사용자 인터페이스나 사용자 경험 등에 관심이 많고 눈에 보이는 화면을 만들고 싶다면 이쪽 기술들을 파야 한다. HTML5, JavaScript, CSS는 필수다. 간혹, 웹 디자이너의 업무와 헷갈리는 경우가 있는 데 웹 디자이너는 화면을 어떻게 그려야 하는 지  디자인하는 사람이다. 의상 디자이너의 역할과 같다. 어떤 옷을 그릴지 디자인 하지 디자이너가 직접 옷을 만들지는 않을 것이다. (물론, 만드는 사람도 있다. 웹 디자이너와 개발을 같이 하는 사람도 있겠다. 하지만 보통 웹 디자이너는 소스 코딩을 하지 않는다. 포토샵이나 일러스터를 주로 사용한다.) 혹시 웹 퍼블리셔라는 말을 들어 보았는 가? 이 롤은 화면을 어떻게 그릴지 표준을 잡아주고 소스 코드를 어떻게  작성할지 가이드를 주거나 직접 작업을 한다.


더 나아가 프론트 엔드 전문 개발자는 화면을 그리는  것뿐 아니라, 어떻게 하면 빠르게 화면을 띄울 수 있는 지 고민하고 성능 최적화나 웹 브라우저 호환성 관련 이슈 해결 등과 같은 깊은 수준의 기술을 요구한다. 이 쪽 기술은 과거보다 근래에  재조명받고 있고, 전문성을 갖춘 사람을 요구하고 있다. 필자는 프론트 엔드 쪽 전문인력은 아니다. 최근에 브런치에서 본 아래 글을 통해 프론트엔드 엔지니어가 어떤 일을 하고, 어떤 기술들을 알아야 하는 지 자세히  살펴볼 수 있을 것이다.

https://brunch.co.kr/@techhtml/4

참고로 몇 가지 유명한 오픈소스 프론트엔드 도구로, JavaScript 라이브러리인  jQuery는 필수적이며, 잘 만들어진 화면들의 템플릿을 제공하는 부트스트랩 정도는 알아둬야 하지 않을까 싶다.


2) 백 엔드 (Back-end)

백 앤드는 눈에는 보이지 않지만 화면에서 입력한 값을 데이터베이스를 활용하여 처리하여 되돌려주거나 배치성으로 주기적인 작업을 처리하는 등의 서버 쪽 기술들을 말한다. 화면에서 볼 수 있는 정적 콘텐츠 (화면 레이아웃, 이미지  등)를 제외한 동적 콘텐츠 (상황에 따라 값이  변경됨)는 모두 백 엔드를 통해 생성된다. 가장 수요가 많은 기술은  Java이며, Spring 프레임워크를 활용하는 경우가 많다. Spring 프레임워크는 Java 소스 코드를 객체지향 관점에서 더욱 효율적이고 유연하게  작성할 수 있는 틀을 제공한다. 참고로 전자정부 프레임워크도 Spring 기반이며, 크레듀 멀티캠퍼스와 같은 교육 기관에서 해당 커리큘럼을 쉽게  확인할 수 있다. Java의 웹 개발이라 하면, JSP (Java Server Pages) 라는 기술도 들어 보았을 것이다. 이는 Java 소스 코드를 HTML에 삽입하여 웹 애플리케이션을 개발하는 기술이다. 하지만, 근래에는 HTML안에는  Java로 기술한 비즈니스 로직을 따로 분리하는 것이 표준처럼 되어있다. JSP도 많이  사용되지만, 필자는 Spring을 접한 뒤로는 사용한 적이 없다. 비슷한 기술로는 베이직 기반의 ASP, C++ 기반의 PHP가 있다. ASP는 현재 닷넷으로 웹 개발을 할 수 있는  ASP.Net으로 넘어가는 추세로 보인다. PHP는 세계적으로 보았을 때 가장 많이 사용하나, 국내에서는 다소 활용성이 떨어진다. 호주만 하더라도 구인공고의 반을 차지하지만 국내에서 PHP인력 찾는 건 흔하지 않은  듯하다. 이외에도 다양한 기술이 존재하나 이번 글에서는 이 정도만 다뤄보겠다.


 3) 풀 스택 (Full stack)

풀 스택은 프론트 앤드와 백 엔드를 모두 통칭하여 말한다. 특히 스타트업들은 인원이 충분하지 않기 때문에 풀 스택 엔지니어를 구하는 것을 쉽게 볼 수 있다. 대부분의 백엔드 엔지니어들은 프론트 엔드 기술들을 얕은 수준이라도 알고 있다. 필자도 가능한 수준이다. 하지만 '이쁘고 빠른 화면을 빠르게 개발' 하지는 못 한다. 반대로 프론트 엔드 개발자가 백 엔드까지 작업하는 경우도 있다. 근래에는 JavaScript를 백 엔드에서 사용하게 하는 Node.js나 다른 언어에 비해서 배우기 쉬운 파이썬의 웹 프레임워크인 장고와 같은 기술이 인기를 끌면서 풀 스택 기술로 활용이 되고 있다. 하지만, 백 엔드도 고가용성, 신뢰성, 성능 등을 고려하면서 개발하기에는 무리가 있지 않을까 싶다. 양쪽 다 풍부한 경험과 깊은 지식을 가진 풀 스택 개발자를 찾는 것은 필자 생각에는 욕심인  듯하다. 물론, 타협의 여지가 많은 영역인  듯하다.


모바일 애플리케이션

이제 모바일로 넘어와 보자. 모바일에서도 크게 3개로 나눠지겠다. 웹, 앱 그리고 웹앱이 바로 그것이다.


1) 모바일 웹 (Mobile Web)

앞서 살펴본 웹 어플리케이션과 같다. 대신, 화면 크기와 웹 브라우저의 성격이 다르기 때문에 프론트 엔드 쪽 개발이 다소 차이가 있을 수 있다. 화면  설계부터 차이가 날 것이다. 동일한 소스로 PC 나 모바일에서 함께 사용할 수 있는 반응형 웹 기술들도 많다. 화면 이 작아지면 알아서 컴포넌트 크기 및 위치가 바뀐다. 입문자에게는 다소 어려울 수 있겠다. 백엔드는 위에서 설명한 것과 거의 차이가 없다.


2) 앱 (App)

안드로이드나 iOS에 설치하여 사용하는 앱을 말한다. 여러분의 스마트폰에도 많은 앱들이 설치되어 있을 것이다. 시스템에서 어떤 이벤트가 생겼을 때 사용자에게 알람을 보내 주거나(Push), 스마트폰의 장치를 제어해야 하는 거나, 장치의 기능을 활용해야 하는 경우 등을 위하여 앱을 활용한다. 안드로이드 같은 경우는 Java로부터 영향을 많이 받은 안드로이드 스튜디오와 SDK를 다운로드하여  개발할 수 있고, iOS는 기존에 주로 사용하던 오브젝트 C 대신,  Swift라는 기술이 인기를 끌고 있다.


3) 웹 앱 (Web App)

간혹 웹  앱이라는 용어를 들어 본 적이 있을 것이다. 이는 웹 애플리케이션의 준 말이나 웹 사이트와는 차이가 있다. '웹 브라우저 상에서 구동하는 앱' 정도로 이해하면 되지 않을까 싶다. 사용되는 기술은 모바일 웹과 큰 차이가 없을  듯하다. 참고만 하도록 하자.


지금까지 SW 개발자로 처음 개발하게 되는 대부분의 SW 유형들을  살펴보았다. 물론, 이게 전부는 아니다. 하지만, 사회 초년생들에게는 충분하지 않을까 싶다.




여러분이 컴퓨터를 전공하고 IT 회사에서 입사하였다고 해서 무조건  SW를 개발하는 것은 아니다. 실은 앞으로도 쭉 개발을 하지 못 할 수도 있다. 그렇다고 개발을 하지 않는 것이 좋지 않다는 것은 아니니 오해하지 말자. 필자는 개발을 좋아하지만, 좋아하지 않는 사람도 분명 존재한다. 개발과는 조금 거리가 있는 포지션들을 한번  살펴보자.


시스템 엔지니어

필자의 앞 글에서 언급하였듯이 대형 SI 업체의 주 수입원은 계열사들의 시스템을 관리해서 얻는 SM분야라고 하였다. 당연히,  그쪽으로도 인력이 대거 투입된다. 대부분 하는 일이 개발이 된 SW가 장애 없이 잘 돌아갈 수 있게 하는 것이 주 미션이다. 크게 두 가지 롤 만  살펴보자.


1) 서버 어드민 (Server Administrator)

서버를 관리하는 친구들이다. 각 종 운영체제에 대해서 잘 알고 있어야 한다. Windows 서버, Linux (레드햇, 오라클 등), 각 메인 사의 유닉스(HP-UX, IBM AIX 등), 메인프레임 등이 될 것이다. 미리 공부를 하고 싶다면 유관 자격증을 따는 것도 나쁘지 않을 것이다. 이 분들이 관리하는 서버는 수십대 수백 대 일 수 있다. 필요한 서버를  할당해 주거나, 계정 및 권한 관리, 네트워크 트래픽 및 방화벽을 포함한 보안 관리, CPU, 메모리, 디스크 사용량 등을  모니터링하고 문제가 생기기 전에 미연에 방지한다. 장애 상황에서의 트러블슈팅 및 해결 능력은 필수다. 개발자들과도 커뮤니케이션이 많을  수밖에 없다. 그렇기 때문에 초반에는 개발을 시키는 경우도 있다. 처음 입문 자라면 레드햇 리눅스 서버 관리자 혹은 Windows 서버 관리자 관련 자격증 공부를 해보는 것도 좋겠다.


2) 디비 어드민 (Database Administrator)

데이터베이스를 관리하는 분들이다. 대부분 Oracle DBMS는 기본적으로 다루고, Oracle MySQL, IBM DB2나 Infomix, 마이크로소프트의  MSSQL과 같은 상용 디비들이나 PostgreSQL,  MariaDB와 같은 오픈소스 관계형 디비나 SAP HANA, Oracle  Timesten과 같은 인 메모리 디비 등의 관리도 하는 경우가 있을 것이다. 근래에는 하둡과 같은 빅 데이터 플랫폼들이 자리를 잡으면서  커버해야 할 영역이 더 넓어지고 있는  듯하다. 이 분들은 데이터베이스 인스턴스 생성 및 테이블 생성 할당 및 관리, 테이블 스키마나 인덱스, 잡, 함수, 트리거 등의 생성 및 관리, 데이터를 읽을 때 사용하는 SQL문에 대한 성능 모니터링 및 튜닝 가이드 등을 주로 한다. 물론, 리소스 및 SQL 수행 시간, 테이블 락 등을  모니터링하면서 장애에 대한 방지 및 트러블슈팅, 이슈 해결은 필수다. 처음 입문자 라면, 오라클 데이터베이스 어드민 관련 자격증을 따는 것도 좋겠다.


이외에도 웹 애플리케이션 서버 (WAS) 관리자와 같이 특화된 영역에 대해 다양한 형태의 관리자들이 있다. 보통 프로젝트에서 인프라, 인프라 하면 이 영역이라고 생각하면 된다. 물론, 분업화가 안된 스타트업 같은 경우는 개발자가 다 맡아서 할 가능성이 높다.


기술지원

경우에 따라 입사한 곳이 특정 솔루션을 고객에게  납품하거나, 내부 고객 대상으로 전사 방법론을  가이드하는 것과 같이 외부의 요청에 의해 기술지원을 하는 경우도 많다. 최근에 필자가 구매한 상용 솔루션 구매 대행사에서는 필자를 위한 전담 엔지니어를 배치해 주었으며, 이슈나 궁금한 점이 생기면 유선이나 메일로 도움을 받고 있다.


관리자

사회 초년생이 관리자라니 좀 이상하게 들릴 수도 있겠다. 여기서 말하는 관리자는 프로젝트의 하도급 계층에 상위단에 위치한 회사라면, 함께 일하는 협력 업체들을 관리해야 한다. 대부분 프로젝트에는 PM (Project  Manager)의 프로젝트 관리를 도와주는 조직인 PMO 조직에서 일하게 된다. 일정대로 일이  준수되는 지 확인하고, 투입 인력에 대한 관리, 예산 관리, 프로젝트 수행 상에 이슈나 리스크를  도출하고 이를 해결한다. 코딩은 하지 않는다. 대신 엑셀이나 파워포인트를 주로  사용할 것이고, 예산 관리 시 ERP와 같은 전사 시스템을 다룰 줄 알아야 한다. 물론, 같은 조직에 속한 선배들을 도와주는 일이 대부분 일 것이다. 필자 생각에는 본인이 개발자로 성장하기로 마음을 먹었다면, 이 쪽 일은 하지 않는 것이 좋다. 하지만, 본인이 프로젝트 관리자로 성장하겠다면, 고려해볼 만하다. 해외는 대부분 나이와 상관없이 관리자의 길을 선택할 수 있다.




지금까지 SW와 관련이 깊은 포지션에 대해서  알아보았다. 물론, 훨씬 다양한 일들이 있지만, 보통 단계적으로 성장하면서 세분화되기 때문에 위에서 나열한 일들이 각 트랙의 시발점이 될 것이다. 그리고 어느 정도 레벨이 업 되면,  그다음 단계는 자연스럽게 알게 될 것이다.


그리고 어떤 롤을 하는 것이 좋을지는 개인 성향이나 관심, 커리어의 방향성에 따라서 바뀌는 부분이다. 그리고 경험하기 전에는 본인에게 맡는 일인지 아닌지 알기 어렵다. 각 기술에 대해서 스스로 알아보고 직접 가지고 놀면서 느끼는 것이 중요하다. 인터넷에 자료는 널렸다. 배우고 싶은 마음이 있느냐 없느냐가 중요한 요즘이다.


다음에는 기술들을 어떻게 배워야 하는지  살펴보겠다. 혹시 필자에게 부탁하고 싶은 내용이 있다면, 댓글로 알려주기 바란다. 글에 대한 긍정적, 부정적 피드백도 언제나 환영이다.


그럼 모두가 원하는 위치에서 일을 시작 하길 바란다.

파이팅!!



매거진의 이전글 어떤 회사를 선택해야 하나요?(2/2)

작품 선택

키워드 선택 0 / 3 0

댓글여부

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