치킨모임
682
2020-02-05 13:35:17
10
7062

자바 개발자에서 리엑트 개발자 전향하기


누구나 한번쯤은

다른 직종, 혹은 다른 일을 꿈꾸며 살아가는 순간이 올 수 있다고 생각합니다.

특히 이런 

개발자로써 언어를 뛰어 넘어 직종을 바꾸는 일은 매우 간단하거나 쉬운일은 아닌데요.

그 직종 전환에 대해서 이야기 해보려고 합니다. 


먼저 

자바 개발자

리엑트 개발자 


두가지 직종의 차이점을 간단히 설명하고 이야기를 해볼까 합니다.

기존에 자바 개발자라면 사실 굳이 리엑트 개발자로 전향할 필요는 없을 텐데요.

그래도 새로운 기술을 추구하거나, 계속 자바만을 고집하기 싫은 분들의 입장에서는

한번쯤 읽어볼만한 이야기가 될 수도 있겠네요.



자바 개발 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 에 대해서 약간 부족할 수도 있는데 이런 부분들이 차이가 있었다고 볼 수 있습니다.


더보기 : https://brunch.co.kr/@chickenmoim/17




8
  • 댓글 10

  • Iggnuoy
    30
    2020-02-05 20:28:39
    초보 자바 개발자입니다. 
    리액트를 쉽게 입문하기 위해 뷰를 공부한다면 더 효율적이라고 생각하시나요?
  • 앙앙이
    4k
    2020-02-06 03:31:56

    angular 를 먼저 공부하셨는데 무슨 불만 사항이 있어 react 로 넘어 가신건가요?

  • 치킨모임
    682
    2020-02-06 12:27:19

    답글이 태깅이 안되어 불편하네요. 그래도 최대한 답변 드릴 수 있는 거 답변 드릴께요.


    @Iggnuoy

    일단 뷰를 잠깐 보긴 했는데요. 리엑트 엥귤러 뷰 - 전체적으로 다르긴 한데 알고 있으면 상대적으로 프론트 진입장벽이 낮아지는것 같긴해요. 근데 리엑트를 공부하기 위해 뷰를 공부하는건 리엑트를 공부하기 위해 리엑트를 바로 보는 것보다는 좀 효율은 떨어질듯하네요.


    @앙앙이

    아 불만이 따로 있지는 않았고, 엥귤러나 리엑트 둘중 하나로 갔으면 하는 바람이 있었는데요.

    엥귤러를 뽑는 국내 업체가 생각보다 많지 않은 점이 하나로 작용했고,

    언어에 맞추어서 지원을 한건 아니었어서 리엑트로 가게 되었네요.


    감사합니다 ㅎ



  • ignoreOrange
    2k
    2020-02-10 15:50:35

    잘읽었습니다.

    저도 자바개발에서 노드/리액트 (자바스크립트쪽) 공부도 하고 해외취업도 준비하고 싶은데

    노드를 먼저 해야하는거겠져?

  • 치킨모임
    682
    2020-02-11 10:41:23

    리엑트를 먼저 하시면 노드의 이해는 조금 더 수월하게 될꺼 같아요! 

  • smasma
    2k
    2020-02-27 03:36:04

    리액트 하면 자바개발 안해도 되나요? 요즘엔 그게 가능한가?

  • 밥도둑계장
    717
    2020-02-27 20:17:40

    리액트는 프론트고 자바는백인데..흠

    이건그냥 기술스텍이 바뀌는거아닌가.ㄷㄷㄷ

    차라리 자바에서 노드 라면 모르겠는덷ㄷㄷㄷㄷ

  • 화이트데이
    1k
    2020-03-05 08:15:29

    이건 뭔 소리지? 자바는 자바고

    화면단에서 쓰는 프레임웍은  react 인거고 당연 둘다 공부해야지  ㅋㅋ

  • 벨제부브
    2k
    2020-03-20 14:26:40

    저도 자바개발자인데 그냥 다함

    제가 짬이많은것도아니지만 프로젝트할때마다 고객의 요구에따라 설정하고하는게 다임

    최근 저도 노드기반 뷰를하다보니 느낀건

    그냥 스프링프레임웤 기반의 프로젝트가 똑같으나 프론트부분에서 리액트나 뷰나 기타등등등

    프레임웤을쓰면서 좀더 재생산이 가능해졌다는거임

    html에서 주로 제이쿼리를 이용해서 개발했었는데 제이쿼리에 대한 비생산적인걸 깨닫고

    리액트나 뷰같은 모듈형식을 요즘 하는추세가된거임

    몽고디비다 이런건 그냥 다 취향차이고 디비는 서버는 aws로 대부분 넘어가는추세고

    이제 내부서버같은설정은 프로젝트차이

  • 열렙전사
    429
    2020-04-13 23:24:08

    본문에 가로 스크롤 저만 생기나요??

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.