Fast campus School

Node.js 웹 프로그래밍

Node.js는 프론트엔드와 백엔드를 동시에 접할 수 있는 최적의 기술입니다

Node.js 웹 프로그래밍 스쿨 박성백 강사님 인터뷰

2017.09.27 | 3363 명 읽음

풀스택 개발자라는 말이 나온 배경에 Node.js 기술이 발전한 부분이 큰데요, 
이제는 JavaScript 하나를 학습하면서 프론트엔드와 백엔드를 넘나드는데 
장벽이 거의 없어졌다고 해도 과언이 아니죠. 
이런 의미에서 Node.js는 프론트엔드와 백엔드를 동시에 접할 수 있는 최적의 기술입니다.



박성백 강사님 안녕하세요, 간단하게 소개를 부탁드립니다.


안녕하세요. 프리랜서 개발자이자 프로그래밍 강사로 활동하고 있는 박성백(블로그 링크)입니다. T academy(티아카데미, SK techx 소속 교육센터)에서 Node.js 서버 전문가 과정 강의를 담당해 왔으며, Node.js를 활용해 쇼핑몰, 안드로이드 앱, 모바일 게임 서버 등 여러 프로젝트에도 참여한 바 있습니다. 전공은 전산학과이며 기업 전산실에서 개발자로 근무하던 중 우연히 강의를 하게 되어 교육 분야에 매력을 느끼게 되었습니다. 10여 년 간 강의를 해왔으며, 최근 관심사를 빅데이터, 머신 러닝, clojure 언어 등으로 넓혀 나가고 있습니다. 



프로그래밍을 처음 시작하는 분들에게 백엔드는 무엇인지, 그리고 왜 Node.js를 배워야 하는지에 대해 간단하게 설명해 주실 수 있나요?


웹 프로그래밍은 분야를 크게 나누면 프론트엔드와 백엔드로 나눌 수 있습니다. 프론트엔드는 화면단에서의 처리에 중점을 둔 분야인 반면, 백엔드는 주로 저장 및 데이터베이스 처리 쪽에 중심을 둔 분야입니다. 자바스크립트라는 동일한 언어로 프론트엔드와 백엔드를 개발할 수 있는 풀스택 개발자로 거듭날 수 있습니다.


프론트엔드쪽에는 최근에 뜨는 3가지 유명 기술인 React, Angular, Vue.js 등이 대표적인 자바스크립트 기술입니다. Node.js는 자바스크립트 기반의 백엔드 기술로 개발 속도가 빠르며, 생산성이 높습니다. 또 다양한 모듈이 있어 조립해서 쓰면 되기 때문에 서비스에 집중할 수 있는 환경을 만들어줍니다.


Node.js가 생기고 발전하면서 자바스크립트 언어 하나로 프론트엔드와 백엔드 모두를 개발할 수 있다는 것 또한 큰 장점입니다. 풀스택 개발자라는 말이 나온 배경에 Node.js 기술이 발전한 부분이 큰데요, 이제는 자바스크립트 하나를 학습하면서 프론트엔드와 백엔드를 넘나드는 데 대한 장벽이 거의 없어졌다고 해도 과언이 아니죠. 사실 실무에서 서버 개발자가 된다고 하더라도 프론트엔드에 대한 이해는 필수적이며, 장기적으로는 프론트엔드 프레임워크와 같은 기술 또한 겸해서 공부하는 방향으로 가는 것이 맞다고 생각합니다. 이런 의미에서 Node.js는 프론트엔드와 백엔드를 동시에 접할 수 있는 최적의 기술입니다. 


Node.js는 프로그래밍을 처음 학습하고 괜찮은 수준의 포트폴리오를 만드는 데도 좋은 기술입니다. 프로그래밍을 공부하는 학생 입장에서 보자면, 취업을 하기 위해서는 어느 정도의 결과물이 필요할 텐데요. 개인 포트폴리오를 만들기 위해서는 제로부터 구축을 해나가야 하죠. Node.js의 경우는 정말 많은 좋은 모듈이 있기 때문에, 이를 가져다 쓰면 이틀 내에도 어느 정도의 결과물을 만들어 낼 수 있을 정도입니다.


학생들이 취업을 한다면 주로 스타트업 등 규모가 작고 개발자를 필요로 하는 회사에 갈 확률이 높을 텐데, 그런 의미에서 강점이 있다고 할 수 있을 것입니다. 물론, 큰 규모의 회사에 가더라도 자신이 주도하여 자리를 잡을 수 있을 만한 기술로 Node.js를 사용할 수 있을 겁니다. 


Node.js 서비스가 주로 일어나는 곳은 스타트업을 비롯한 규모가 크지 않은 회사라고 할 수 있습니다. 규모가 작은 회사에는 개발자가 부족한 경우가 많으므로 기존 백엔드 서비스에서 많이 쓰는 Java, Spring처럼 여러 명이 협업하기가 힘든 구조일 가능성이 높습니다. Node.js는 그런 부분에 두각을 나타내는 기술이라고 할 수 있습니다. 그렇다고 해서 대기업에서 전혀 안 쓴다는 의미는 아닙니다. 최근에는 '마이크로 서비스'라고 하여, 부서별로 팀 단위로 기술을 쓰는 경우가 많은데요. 예를 들어, 한 부분은 Java와 Spring을 쓰고, 또 어떤 부분은 Python과 Django를 쓰며, 다른 서비스에는 Node.js를 쓰는 식입니다. 대기업에서는 주로 Node.js를 우리 눈에 안 보이는 내부 시스템이나 협업 프로그램 등에서 쓸 확률이 높아서 겉으로 드러나지는 않을 것입니다. 스타트업이나 작은 규모의 회사에서는 바로 드러나는 편이지요. 


Node.js는 최근에 발전하고 있는 기술과도 잘 융합이 됩니다. 프론트엔드 프레임워크인 Angular, Vue.js, React와 같은 SPA(Single Page Application) 개발에도 용이하며, MongoDB나 Redis 등 오픈소스 NoSQL 데이터베이스와도 잘 붙습니다. 그리고 모바일 서버를 만들기에도 좋고, Socket.io를 활용하면 실시간 프로그래밍이 가능하기도 합니다. 다른 환경보다 빠르게 서비스를 만들 수 있다는 장점이 있습니다.


페이팔(Paypal), 마이크로소프트(Microsoft)와 같은 글로벌 기업에서도 Node.js를 사용하고 있을 정도로 안정성 또한 검증이 되었습니다. 아마존 웹 서비스, 구글 클라우드, 애저 등 유수의 클라우드 서비스에서 당연히 Node.js를 서비스하고 있습니다. 


강사님은 본 과정에서 어떤 내용을, 어떤 방식으로 수강생분들께 전달 드릴 예정인가요?


저는 철저히 실습 위주의 강의를 진행합니다. 강의 경험에 비춰보면, IT 전공이 아닌 학생들도 HTML, CSS나 Java Script는 한 번쯤 만들어본 경우가 많았어요. 그런 상황에서 백과 사전식으로 지식을 나열하는 형태는 매우 지루해하게 마련이죠. 또 최종적으로 만들어 낼 수 있는 결과물이 없는 경우도 있습니다. 저는 하루 혹은 2~3일마다 하나의 프로젝트를 만들어보는 것을 위주로 진행을 합니다. 이론은 핵심 위주로만 간단하게 정리하고, 빠르게 만들어가면서 익히는 식으로 강의하는 스타일입니다. 실습이 많았을 때의 장점은 프로그래밍에 자신감이 생긴다는 것인데요. 저는 '친절한 강의'를 모토로 하고 있고, 비전공자인 학생들도 따라갈 수 있도록 도움을 주려고 하고 있어요. 


본 과정의 최종 목표는 취업일 것이라고 생각하는데요. 취업을 해서 써먹을 수 있는 기술을 최대한 채워가는 것이 목표입니다. 수업에서 면접 특강도 진행하면서, 학생들이 최종적으로 잘 성장할 수 있는 방향으로 이끌고 싶습니다. 


제가 수업에서 강조하는 것 중 하나가 '코드를 잘 짜는 개발자가 되어야 한다'는 것입니다. 그냥 돌아가는 코드는 조금만 배워도 어느 정도 다 짤 수 있어요. 하지만 다시 봤을 때, 그리고 누구나 봤을 때 이해할 수 있도록 코드를 짜는 것은 참 어려운 일이에요.  그러기 위해서는 테스트 주도 개발 방식으로 코딩을 하거나, 코드를 리팩토링하는 등 더 좋은 소스를 만들기 위한 노력이 계속 필요해요. 리팩토링은 청소 같은 개념인데요. 청소와 정리의 달인들의 비법은 그 순간 바로 정리하는 거예요. 리팩토링을 생각하면서 코드를 잘 짜려고 하면 매우 머리가 아파요. 일단은 돌아가게 코드를 짠 후 동일한 부분은 호출을 하고, 복사-붙여넣기했던 코드를 정리하는 식으로 계속 정리를 하는 거예요. 그 순간 정리를 못하면 기술 부채라고 부르는 부분이 계속 쌓여요. 그걸 계속 두면 파산하듯이 프로젝트가 망합니다. 


테스트 주도 개발은 사실 다른 사람을 위한 것도 있지만, 스스로의 자신감을 위해서도 필요해요. 개발을 할 때 무슨 에러가 날 지 모르면 자신감이 떨어집니다. 내가 수동으로 간단히 테스트했을 때 오류 없이 작동되는 듯해 보여도 코드에 대한 확신이 부족하고 예상하지 못한 버그가 나타날 수 있다는 생각이 드는 겁니다. TDD를 수행하며 개발을 진행하면 자신 있게 '된다!'고 이야기를 할 수 있는 자신감이 생기죠. 그래서 필요하다고 생각해요. 대부분 테스트를 시간 낭비라고 생각하는 경우가 많아 자꾸 정착이 안되는데요. 저도 개발하면서 그런 유혹에 빠질 때가 있어요. '어쩌다 한 번 쓸 것 같은데, 그냥 때마다 테스트 한 번 돌려보면 되지 않겠어?'라고 말이죠. 하지만 이런 생각을 자꾸 다잡으려고 합니다. TDD는 낭비가 아니라 필수다. 나의 자신감 향상을 위해서 꼭 필요하다. 이런 마인드 컨트롤을 스스로 해요. 


제가 지금 이야기하는 부분은 처음 코딩하는 사람들 귀에는 들어오지 않을 수 있어요. 실제로 경험이 있어야 이러면 안된다고 생각이 들 텐데, 저는 수업을 하면서도 이런 부분을 끊임없이 강조하면서 수업을 할 예정이에요. 코드를 잘 짜는 개발자가 되는 길은 멀고 험난한 게 사실이지만, 현업에서도 그런 개발자 수가 매우 적기 때문에 그 길을 노려야 해요. 


마지막으로, 저는 제 강의에 대해 평생 A/S를 해드려요. 이메일로 질문을 주시면, 바로바로 답변해드릴 수 있도록 노력합니다. 그리고 되도록이면 재밌고 즐거운 수업이 될 수 있도록 노력한다는 점도 있습니다. IT 분야는 딱딱하고 재미가 없을 수 있어요. 그래서 (안 웃길 수도 있지만!) 최대한 유머를 통해 분위기를 부드럽게 만들어나가려고 노력합니다. 



이 수업은 어떤 분들에게 도움이 될까요?


백엔드 개발자는 주로 뒤에서 받쳐주는 역할을 하기 때문에, 꼼꼼한 스타일이 잘 맞는 것 같습니다. 외향적인 사람은 맞지 않는다는 말이 아니라, 큰 바탕 그림을 그리고 틀을 잡는 데 재미를 느끼는 사람이 더 재미를 느낀다는 의미라고 할 수 있습니다. 프론트엔드와 백엔드를 둘 다 잘 할 수 있습니다. 특히, 자바스크립트를 기반으로 한 프론트엔드(React, Angular, Vue.js)와 백엔드(Node.js)는 둘 다 JS 기술이기 때문에 Java+Spring 이나 Pyhton+Django 보다 훨씬 유리한 것이 사실입니다. 프론트엔드든 백엔드든 결국 개발 직군이기 때문에 어느 정도는 비슷합니다. 그에 비해서 디자인, 기획 등은 완전히 다른 세계인 것 같습니다. 프론트엔드 개발자와 디자이너의 유사성보다는, 프론트엔드 개발자와 백엔드 개발자가 비슷한 부분이 훨씬 더 많은 편입니다. 물론, 어떤 직군이든 다른 사람들과도 협업을 잘 하고 오픈된 마인드를 가지고 있는 사람이면 잘 할 수 있습니다.


저는 수강생분들이 끈기를 가지고 해냈으면 좋겠어요. 무언가를 만들겠다고 결심하면 밤을 새워서라도 만들어내는 학생들이 결국은 성공하고 잘 하더라고요. 꼭 컴퓨터 공학이나 전산학을 공부하지 않았더라도, 결과가 나올 때까지 노력하는 것이 중요하다는 것을 많이 느꼈어요. 그리고 부끄러움 없이 질문을 잘 하는 사람들이 많이 얻어 가는 것이 많았고요. 마지막으로 개발에 흥미와 재미를 느끼는 친구들이에요. 그냥 월급쟁이로 살기에 좋아서 이 분야를 공부하겠다는 사람보다는, 재밌는 것을 하고 싶은 마음에 개발 공부하는 사람들이 잘 하는 것을 많이 보았어요. 저 또한 개발이 재밌다는 것을 일깨워주고 싶고, 방향을 제대로 설정해서 끝까지 해낼 수 있도록 도움을 주고 싶어요. 



강사님이 생각하는 '개발 공부 방법'이란 무엇인가요?



초보 개발자를 먼저 얘기하면, 초보 개발자는 기반 개념이 없는 경우가 많은 것 같아요. 강의하면서 보면, 어떤 학생은 윈도우 탐색기 사용법도 잘 모르고, 윈도우 탐색기에서 확장자(.txt)를 나오게 하는 방법도 잘 모르는 경우가 있었습니다. 실제로 그런 것도 안 해본 학생들도 많아요. 웹은 구글이나 네이버에서 검색은 해봤지만 본인이 어떤 원리로 돌아가는지에 대한 생각이 없기도 하고요. 저는 폭넓게 IT 지식을 이해하는 과정이 있어야 더 잘 나갈 수 있다고 생각합니다. 기초부터, 모르는 용어가 나오면 찾아보면서 채워가는 열의가 필요할 것 같아요. 채워지고 나면, 뭔가 만들어봐야 한다고 생각해요. 아주 작은 거라도 말입니다. 작은 성공이 계속 쌓여서 큰 게 된다고 생각하거든요. 그런 걸 통해서 재미를 느낄 수 있습니다. 영어를 잘하려면 원어민하고 말을 해봐야 하는 것처럼 용어를 많이 안다고 되는 게 아니라 대화를 하는 것처럼 개발도 비슷하다고 생각해요. 작게 작게 만들다가 그걸 합치는 과정을 해보면서 크는 것이라고 생각합니다. 


다른 언어를 했거나 성장이 멈췄다고 느끼는 사람들의 경우는 분야가 어떤 쪽이냐에 따라 다를 텐데요. 예를 들어, 웹이 아니라 다른 분야를 공부했다면, 웹에 대한 개념을 파악하는 게 중요합니다. 분명 초보자는 아니지만 영역이 한정되어 있다 보니 모를 수 있어요. 관심을 가지고 영역을 넓혀보는 시도가 중요합니다. 그리고 최신 트렌드에 대해 무관심했을 수도 있어요. 그러다 갑자기 트렌드가 쏟아지면 압도될 수 있거든요. 그럴 때는 트렌드는 조금씩만 따라가고, 지식들을 채워가는 게 중요합니다. 기업에서 부품처럼 작은 걸 하고 있어 매너리즘에 빠지거나 재미가 없는 개발자도 종종 봤는데요. 조금만 관심을 가져도 보는 눈이 확실히 달라질 것이라 생각해요. 현재 경향이 어떻게 되는지 파악하는 열린 마인드가 필요합니다. 다른 언어를 하다 이쪽으로 오면 빠지는 함정 중 가장 많은 게, '기존에 본인이 잘 아는 프로그래밍 언어와 비슷하겠지 혹은 대충 하다보면 되겠지'라는 생각이에요. 아예 싹 비우고, 제로 상태에서 시작하는 게 필요합니다. 예를 들어, 함수형 언어 개념이 올라가면 이전에 객체지향했던 사람은 적응하기 어렵거든요. 패러다임 자체가 완전 변화했기 때문이에요. 그런 부분에 대해서 비우고 받아들이는 마인드가 필요하지 않을까 생각해요. 특히 경력자들은 기존에 가지고 있는 걸 비우는 게 중요하다고 생각해요. 비우고 나면 더 빨리 채워질 겁니다. 



마지막으로 Node.js 웹 프로그래밍 SCHOOL 예비 수강생에게 한 말씀 부탁드립니다.


마지막으로 한 마디만 하겠습니다. 들을지 말지 고민되면, 그냥 들으세요. 최선을 다해 강의에 임하겠습니다. 감사합니다.  





Node.js 웹 프로그래밍 스쿨 바로가기

http://school.fastcampus.co.kr/dev_wpsn/