직종 전환에 대한 이야기
누구나 한번쯤은
다른 직종, 혹은 다른 일을 꿈꾸며 살아가는 순간이 올 수 있다고 생각합니다.
특히 이런
개발자로써 언어를 뛰어 넘어 직종을 바꾸는 일은 매우 간단하거나 쉬운일은 아닌데요.
그 직종 전환에 대해서 이야기 해보려고 합니다.
먼저
자바 개발자
리엑트 개발자
두가지 직종의 차이점을 간단히 설명하고 이야기를 해볼까 합니다.
기존에 자바 개발자라면 사실 굳이 리엑트 개발자로 전향할 필요는 없을 텐데요.
그래도 새로운 기술을 추구하거나, 계속 자바만을 고집하기 싫은 분들의 입장에서는
한번쯤 읽어볼만한 이야기가 될 수도 있겠네요.
자바 개발 9년, 자바 개발자가 알아야 할 것들
자바 개발자에 관련된 이야기는 종종 써왔는데요.
아직 개발자가 아닌 분들의 입장에서는 어떻게 하면 자바 개발자를 할 수 있을지 물어볼 수 있을것 같네요.
시대적인 흐름이나 어떤 방향성들로 직종간 변화가 일어나고 있는지 늘 주의 깊게 보아야 한다고 생각을 하는데요. 자바 개발자의 경우, 우리나라가 흔하고 많은 개발자의 직군이라고 볼 수 있습니다.
주로 큰 기업들의 경우 자바기반으로 코드가 되어져 있습니다. 그렇다고 해서 모든 기업들이 자바를 사용하는 것은 아닌데요. 국가 프로젝트의 경우, 자바 개발이 꽤 많은 부분을 차지하고 있습니다.
보통 학원 수업, 학교 수업을 토대로도 자바의 이모저모들을 접할 수 있는데요.
회사내에서 사용하는 경우 일반 자바 언어만 알아서 되는 것은 아닙니다. 다양한 프레임 워크들을 알아야 하는 경우들이 있는데요. 스프링 프레임워크, 스트럿츠 프레임워크, 스프링 부트 등등 자바 프레임 워크들에 대한 이해와 지식이 필요합니다.
자바 개발자로써 알아야 할 기본적인 내용들에는 스프링 관련 서적들을 보면 잘나와있지만, 객체 지향에 대한 이해, 그리고 myBatis 와 같은 ORM 에 대한 이해, 데이터베이스를 다룰 수 있는 쿼리를 작성할 수 있는 기술적 지식에 대한 이해, 그리고 산업이나 해당 프로젝트의 성향과 그것에 따라서 데이터를 확인하고 데이터 베이스를 설계할 수 있는 능력등등이 기본적인 내용들이라고 할 수 있습니다.
그리고 보통은 자바의 개발의 경우는 jsp형태로 화면을 많이 사용하고, 그리드 솔루션들을 많이 사용하는데요. 전체적으로 jquery, ajax 통신 각종 라이브러리에 대한 이해들이 요구되는 사항들입니다.
이런 과정중에 젠킨스나, 빌드, 배포 등등 CI/CD 와 같은 배포 및 자동화에 대한 이해가 필요하기도 하고, git, bitBucket, github, svn, cvs 같이 소스 형상 관리를 비롯한 툴들을 설치하고, 학습하고, 관리하는 부분이 필요하기도 합니다.
그리고 이클립스, 인텔리제이와 같은 툴 사용법들을 공부할 필요성도 있는데요.
결국 서비스를 만든다는 것에 대해서 전반적인 이해와 함께, 그것들을 사용하는 도구, 그리고 그것에 대한 활용 능력에 대해서 능력들이 필요하게 됩니다.
사실 이런 정보들의 나열만으로도 검색을 통해서 많은 정보들을 접할 수 있습니다.
이 자바 개발을 할 때 필요한 추가적인 정보들로는 그래들, 메이븐과 같은 라이브러리 의존성 관리에 대해서 이해가 필요한데요. 이런 라이브러리들을 잘 사용함으로써, GSON, JSON, XMLParser 등등의 데이터 관리 포멧에 대해서 이해할 수도 있고, 다양한 이미지 라이브러리나 파일 업로드, 혹은 엑셀 다운로드 등등의 다양한 부분들에 대해서 학습할 수 있게 됩니다.
리엑트가 필요한 이유!
자바 개발자로써, 대부분의 서비스들은 만들 수 있었습니다. 웹상의 서비스는요. 물론 앱도 자바로 된 부분은 어느정도 개발이 가능하긴 했지만, 한계를 느꼈던 부분이 있습니다.
그건 백엔드와 프론트엔드가 구분되기 시작하면서부터, 역할에 대한 논란이 가중되기 시작한 거죠. 그냥 일반 자바 개발자와 클라우드 백엔드 개발자 등의 경계가 모호해 지기 시작합니다.
시장은 클라우드 개발자를 뽑으면서 백엔드 개발자를 뽑고, 자바 개발자를 뽑으면서 클라우드 서비스에 대한 이해도가 높은 사람을 요구하고, 데브옵스라는 이름이 대두되면서, 사실상 백엔드, 프론트엔드, 클라우드 개발자, 데브옵스 개발자 등등의 영역간의 모호성들이 많아지기 시작했습니다. 그냥 자바 개발자, 이 타이틀와 그 어떤 시스템을 만들수 있는 능력만으로는 약간 부족하다는 느낌이 들기 시작한거죠.
이미 많은 업체들에서는 이런 전문성을 바탕으로 전문 영역들을 고도화 하고 있는데, 백엔드면 백엔드, 프론트면 프론트 확실한 업종들이 분별될 수 있는 상황과 시점으로 시장의 분위기는 바뀌어 가고 있었습니다.
SPA - 싱글 페이지 어플리케이션 이라는 개념들이 대두 되면서, Vue, React, Angular 등의 프론트 언어가 대두 되기 시작했는데요. 물론 SSR 을 적용하게 되면서 큰 의미없는 논쟁이 되어버리긴 했지만, SPA 의 적용은 웹 푸시를 비롯해서 다양한 장점들을 가지고 있습니다. 확실히 페이지 이동간에 깜박임도 적긴 합니다!
이런 상황에서 기존 자바 개발자로써, 자바 개발을 할 때 jsp 를 고집하는 것 자체가 매우 지금의 시대랑 동떨어진 일이라는걸 매번 느끼고 있었는데요. 상황에 따라서 어쩔 수 없이 jsp 를 써야 하는 환경 자체는 기술적인 부분에 있어서 조금은 고통스러운 일이었습니다.
3년 전, 그래서 엥귤러에 대한 공부를 시작했는데요. 프론트 언어에 대해서 새롭게 이해할 필요성이 있었고, 그냥 자바 개발자가 아니라, 최소 백엔드에서 백단은 자바로 개발하고, 프론트단은 다른 언어로 개발할 필요성을 느끼게 된거죠.
그리고, 엥귤러를 했던 경험을 토대로, 리엑트를 공부하다보니, css 를 다루는 방식, 컴포넌트나 라우팅 방식이 매우 흡사했고, 전체적인 구조적인 부분들을 공부하는데 있어서 조금은 편하게 학습을 할 수 있었습니다.
자바와 리엑트의 차이점
이런 자바와 리엑트에 대해서 몇가지 차이들을 나열해 볼까 합니다.
개발 툴의 차이
개발툴이 사실상의 큰차이가 있을까 싶지만, 엥귤러를 사용할때, 이클립스 상에서 angular cli 를 이용했었는데요. 리엑트를 사용하게 되면서 거의 VSC(Visual Studio Code) 를 쓰게 되었습니다. 파이선 사용자나 기타 예전에 아톰과 같은 툴을 쓰던 분들도 많았을텐데요. VSC 도 거의 비슷하게 여러가지 설치가 가능하고, 설치된 정보를 토대로 다양한 명령어들을 실행할 수 있습니다.
가장 큰 차이점이라고 보는 부분은 이런 자바는 이클립스, 리엑트는 VSC 이렇게 사용하는 툴 자체가 변하다보니, 이클립스에서는 여러가지 세팅에 대해서 프로젝트 세팅에서 신경써주어야 할 부분이 많았다고 한다면, VSC 의 경우는 몇가지 언어를 사용할 수 있도록 세팅하는 부분, 그리고 터미널코드를 많이 사용하는 부분이 좀 많은 변화라고 볼 수 있습니다.
깃 사용 방식의 차이
이클립스에서는 대부분의 명령어들을 마우스와 UI 로 처리가 가능합니다. git 에 올리거나 내리는것도 UI 를 통해서 가능하죠. 물론 소스트리 같이 도와주는 것들을 설치해서 진행할 수 있는데요. 주로 VSC 에서는 UI 보다는 커맨드 창을 통해서 깃을 더 많이 사용하게 됩니다.
배포 방식의 차이
배포의 경우는 회사별로 다양한 부분이 있었습니다. 직접 배포를 하는 곳부터 젠킨스 배포를 하는곳까지, 리엑트쪽을 사용하게 되면서 pm2 를 사용하게 되었는데, 젠킨스와 같이 매우 편리하게 배포하는 기능을 탑재하고 있었습니다.
DB 의 차이
기존에는 주로 mysql, oracle 을 많이 사용해왔는데요. 그러다 보니 데이터를 만들거나 조인하거나 하는 과정들이 툴을 통해서도 많이 진행을 하고, 그렇지 않더라도, 데이터 구조 자체가 테이블 형태이다 보니 그런 사고 방식에 익숙해져 왔습니다. 리엑트로 전환하면서 mongoDB 를 사용하게 되었는데요. 그러다보니 기존의 체계와는 확실히 다른 느낌의 데이터 가공을 느끼게 되네요.
개발 방식의 차이
개발 방식의 큰 차이는 없습니다만, 전반적으로 기획 - 개발 설계 - 개발 진행 - 개발 완료 - 개발 반영 - 운영 반영의 프로세스에 있어서는 큰차이가 없습니다. 내부적으로 자바를 개발할때는 우선적으로 어떤 것을 개발해야 하는지 개발 화면을 보고, 데이터가 있는지 디비를 만들어야 하는지, 혹은 데이터를 어떻게 뽑아 낼지를 생각한 다음에 해당 쿼리를 만들고, 해당 쿼리를 xml 에 담아서 매퍼로 연결한 뒤에 바인딩한 정보를 토대로, 해당 쿼리 아이디를 호출하고, 그것들을 인터페이스화된 매퍼 정보 - 그리고 서비스 객체를 통해 컨트롤러 단에서 모든것들을 불러오게 되어있습니다. 그리고 그 정보를 기반으로 페이지간 전환도 하고, 그 데이터를 가지고 jsp 화면단에서 뿌리던지 아니면 json 형태로 가공하던지 하는 방식들을 선택하게 되어있는데요.
이렇게 리엑트 방식에서의 개발의 경우 데이터 가공에 대해서는 비슷하지만 만약 스프링 - 리엑트였다면 훨씬더 비슷한 방식으로 데이터를 가공하고, 리엑트 상에서는 바인딩된 데이터만 뿌리면 될텐데요. 현재는 Meteor 를 사용하고 있습니다. 즉 미티어 상에서 해당 데이터를 선택하고, 가져오는 방식이 크게 달라졌습니다. JSON 방식의 데이터를 선택 조회 하는 부분에 대한 이해도가 조금 더 필요하게 되었고, 프론트 상에서는 prop, state 같은 리엑트에서 데이터를 다루는 방식에 대한 이해가 더 많이 필요하게 되었는데요. 기존에 jsp 같은 경우는 하나의 jsp 즉 html 파일 같은 파일안에서 구조를 만들다 보니 전체 구조가 jsp 파일 내 순서와 연관성이 있어서 하나의 구조를 이해하면 되었는데요. 리엑트의 경우 컴포넌트 단위의 개발이 쉽고 용이하게 개발이 가능하다보니, Table 하나를 만들더라도 컴포넌트 방식으로 만들어서 불러올 수 있고, 랜더링 방식이나 호출 순서들에 대해서 이해가 많이 필요한듯합니다. 처음 데이터를 매핑하고 하는 부분이 어렵긴 하지만, 실제로 데이터를 가져와서 프론트에 뿌려준 이후에는 그 데이터를 활용하는 것이 기존의 jsp 에 비해서 훨씬 쉽고 재밌어 졌다고 볼 수 있는데요. 이런 과정들을 이해하는게 개발의 묘미인 부분이 아닌가 싶네요.
라이브러리의 차이
라이브러리의 경우 앞서 위의 자바 개발에서 언급했지만, 기존에는 gradle이나 maven 과 같은 것들로 라이브러리들의 의존성들을 관리해왔습니다. 즉 라이브러리의 업데이트나 최신화부분을 해당 gradle, maven 으로 진행을 했었는데요. 리엑트를 사용하면서 VSC 를 사용하다보니, 해당 부분에 대해서는 npm 즉 패키지 파일을 통해서 노드 패키지 메니져를 통해서 모듈 단위로 설치하고 삭제하게 되었다는 점입니다. 그러다보니, nvm 이라는 노드 버젼의 충돌을 막기 위한 버젼 관리에 대한 이해, 그리고 모듈들이 설치되고 삭제되지 않을때 발생하는 여러가지 문제들에 봉착하게 되는데요. 기존의 자바 프로젝트의 경우 이런 모듈들이 안정화 되어있기때문에 거의 수정할일이 없지만, 이렇게 오픈소스들을 활용한 프로젝트의 경우는 버젼단위로 달라지는 여러가지 이슈 문제로 인해서 해당 부분에 대해서 검색하거나 찾아보아야할 부분이 많아졌습니다. 덕분에 다양한 모듈과 컴포넌트들을 경험해 볼 수 있는 기회들이 생기게 된거죠.
scss 의 차이
공고를 보면 Scss 에 대한 이해를 요구하는 경우를 종종 보게 되는데요. css 에 대한 계층간 구조와 미디어쿼리등등에 대해서 이해도가 높다면 크게 어렵지 않습니다. 자바에서는 css 만을 쓰다보니, scss 에 대해서 약간 부족할 수도 있는데 이런 부분들이 차이가 있었다고 볼 수 있습니다.
고려해야할 사항
언어를 바꾼다는 것에는 리스크가 존재합니다. 즉 다른 언어로 돌아가기 어려울 수 있다는 부분입니다. 물론 회사의 사정에 따라서, 기존에 노드 베이스에서 백엔드를 자바로 바꾸기도 합니다. 아마도, 지금 있는 회사에서도 데이터 트래픽이 많아진다면 그렇게 전환 할 수도 있겠죠. 문제는 이런 기존의 데이터들을 새롭게 정형화 시키고 또 다시 API 형태로 가공하는건 매우 중복적이고 지루한 일이 될 수도 있다는 것입니다.
그럼에도, 기존에 안정적을 언어를 알고 있었다는 점과, 그리고 리엑트에 대한 경험을 할 수 있게 되었다는 점자체가 큰 매리트입니다.
현재 페이스북, 리엑트 개발자의 연봉들이 꽤나 높게 측정되었다는 점을 고려해본다면, 이렇게 전향한다는 것, 매우 고무적인 일이 아닌가 싶네요. 국내 서비스중에 리엑트로 된 서비스가 얼마나 많은지는 아직 잘 모르겠습니다. 아마도 엥귤러, 뷰, 리엑트 이 세가지 언어들은 프론트 상에서 계속 발전할 것이라고 생각합니다. 최근 연봉 순위에도 해외에서는 꽤나 높은 연봉으로 나왔으니 말이죠.
아직 국내에서는 SI 시장에 개발자들이 많이 있고, 기존의 자바 개발자의 입장에서 새로운 언어, 리엑트 같은 것들을 배워서 다시 이직을 한다는 것이 작은 리스크로는 여겨지지 않을 것입니다. 꽤나 큰 리스크로 생각이 들텐데요. 프리랜서를 하고, 정규직을 가고, 또 언어를 배우게 되고, 또 새로운 일을 해보게 되는 것.
협상을 잘 할 수만 있다면, 충분히 고려해 볼 일이 아닌가 합니다.
프로젝트 이력서를 보다보면 다양한 이력들이 있는 분들이 있습니다. 다양한 컨포넌트와 다양한 경험과 경력들이 마이너스 요소가 되진 않으니 말이죠.
물론 웹개발자 - 앱개발자 전향시의 리스크는 자바 개발자에서 리엑트 개발자의 전향보다 얼마나 큰 리스크로 작용할지는 또 경험해보아야 할 수 있는 대목일 것 같네요.
맺음말
개발자로써 10년째를 맞이하고 있습니다.
10년전에 개발자로 몇년이나 먹고 살 수 있을까? 전전 긍긍하면서 이 직업을 선택했는데요.
그 당시 눈감고 10년까지만 일한 다는 생각으로 개발일을 해보자 이렇게 생각하고 벌써 10년해가 되었네요.
그나마 다행인건, 그냥 동사하지 않았다는 것 같습니다.
그리고 여전히 개발하는 일이 재밌다는 것. 이 두가지가 흥미로운 점이 아닌가 싶네요!
시대를 가로 지르고, 재미있는 일들에 새로움을 쫓는 분들 응원합니다!
* 현재 제가 있는 회사에서 또 새로운 일에 대해서 함께할 사람을 찾고 있습니다!
리엑트 베이스다보니, 리엑트 네이티브를 할지도 모르고, 요새 뜨고 있는 flutter 를 할지도 모르겠네요~!
* 함께 할 분들은 아래 공고를 참고해주세요~!
https://www.notion.so/igogo/8d8f7668d82b4399a3d21806875d26de