[자바 웹 프로그래밍 CAMP/강사 인터뷰] “자바지기와 함께 Java 프레임워크를 직접 구현하며, 실력의 격을 높여라!” 박재성 강사님

웹과 함께 발전해 온 자바(Java)는 그 인기 또한 상위를 달려왔습니다. 그 어떤 언어보다도 과거의 유산이 많은 만큼, 학습해야 하는 양 또한 많은 언어이기도 합니다.

이미지 출처 : IEEE Spectrum ‘The 2015 Top Ten Programming Languages’

하지만 아무리 새로운 지식이라도 고통스럽기보다는 즐거워야 꾸준히 익힐 수 있습니다. [자바 웹 프로그래밍 CAMP]에서는 ‘자바지기’라는 닉네임으로 유명하신 자바 프로그래밍 교육의 최강자, 박재성 강사님으로부터 직접 꾸준히 발전하는 개발자가 되기 위한 학습 노하우를 배우실 수 있습니다.

이 과정은 웹 Front End, Back End, 원격 서버 배포 과정을 반복하면서 새로운 지식과 기능을 더하는 형태로 진행합니다. 교육 초반에는 이 같은 반복 과정을 통해 웹 애플리케이션 개발 전반에 대해 이해하고, 부족한 부분을 파악하는데 집중합니다. 기본 과정을 마친 후 서블릿부터 스프링 프레임워크까지의 발전 과정을 통해 MVC, DI 개념을 이해합니다. 마지막으로 HTTP 웹 서버를 직접 구현하고 리팩토링하면서 테스트, 리팩토링, 객체 지향 설계에 대한 경험을 할 수 있습니다.

프로그래밍 경험자라면, 서버 개발부터 배포까지 전 과정을 직접 경험하며 실전을 방불케 하는 이 CAMP에서 자바 프로그래밍 실력의 격을 높여 보세요! 강사님께서 때로는 멘토처럼, 때로는 선배처럼 여러분을 Java 웹 어플리케이션 개발자의 길로 이끌어 주실 것입니다.

현재 NHN NEXT에서 자바 기반의 웹 애플리케이션 개발과 소프트웨어 공학을 가르치고 계신 강사님으로부터 자바에 대한 생각과 독특한 교육 방식에 대해 직접 들어 보세요!

[자바 웹 프로그래밍 CAMP] 2기 자세히 보기 >>>


 

안녕하세요? 소개 부탁드립니다.

안녕하세요? ‘박재성’이라고 합니다. 뛰어난 개발자는 아니지만 새로운 개발 지식을 학습하고 적용하는 것을 즐기는 개발자, 무식함 속의 용기로 글쓰기를 하는 저자, 사람을 키우고 성장시키는 일을 좋아하는 교육자입니다.

이 모든 것을 가능하게 한 것은 어느 날 우연히 시작했던 커뮤니티 때문입니다. 저는 지식을 공유하는 것이 결국 자신을 위한 것이라는 생각으로 커뮤니티 활동(https://slipp.net)을 즐기고 있습니다.

자바 웹 백엔드 개발자로 살다가, 최근에는 ‘NHN NEXT’라는 교육기관에서 학생들과 생활한 지 어느덧 3년이 넘었습니다.

 

강사님께서 생각하시는 ‘Java’라는 프로그래밍 언어는 무엇인가요? 왜 우리가 Java와 친구가 되어야 하나요?

가장 현실적인 대답은 ‘대한민국에서 프로그래머로 살기에 가장 좋은 언어’이기 때문이죠. ‘먹고 살기 좋은 언어’라고 할까요?

이미지 출처 : Coding Dojo Blog “The 9 Most In-Demand Programming Languages of 2016”

좀 실망할 수도 있겠지만, 현실이 그렇습니다. 세계적으로 웹 애플리케이션 개발에 있어 파이썬, 자바스크립트와 같은 언어가 급부상하고 있지만, 아직까지 국내의 현실은 자바 기반 웹 애플리케이션 개발자에 대한 수요가 가장 많은 것 또한 사실입니다.

자바가 지금과 같은 위치가 될 수 있었던 이유는 자바가 등장하면서 웹의 성장과 같이 발전해 왔기 때문입니다. 웹 애플리케이션 개발에 있어 지금까지 자바가 중심적인 역할을 해왔습니다. 그렇다보니 웹 애플리케이션과 관련한 많은 지식들이 자바 기반으로 축적되어 왔습니다.

이미지 출처 : Stone River eLearning “Top 5 Programming Languages Used In Web Development”

디자인 패턴, 테스트, 리팩토링, Clean Code 등과 관련한 많은 책과 온라인 문서들이 자바 기반으로 작성되어 있기 때문에 좀 더 깊이 있는 학습을 하는데도 많은 도움이 됩니다. 따라서 현재 주로 사용하는 언어가 자바가 아니더라도 새로운 지식을 학습하기 위한 목적으로 자바를 학습하는 것도 좋은 선택이 될 수 있습니다.

 

페이스북에 “Java 그거 쓰레기지”라는 게시물을 올리셨는데요, 무슨 의미인지 알고 싶습니다. 정녕 우리가 Java를 배워야 하는 건지요?

최근에 정말 많은 언어가 등장하고 있습니다. 언어의 춘추전국시대라 할 수 있죠. 어떤 언어가 주요 언어로 선택될지는 모르겠지만, 서로 경쟁하면서 발전해 가고 있습니다. 제가 자바를 쓰레기라고 표현했던 이유는 다른 언어를 접하면서, 자바의 제약에 따른 안타까움이 더해졌기 때문입니다.

새롭게 등장한 언어들은 과거의 유산이 적기 때문에, 좋은 점만 취하면서 발전할 수 있습니다. 하지만 과거의 유산이 많은 자바는 아무리 좋더라도 과거의 유산을 버리면서 급격한 변화를 할 수 없습니다. 이 부분은 인정할 수 밖에 없더군요.

Photo credit: Azhaaarry via VisualHunt / CC BY-NC-ND

하지만 이같은 제약이 자바의 장점이기도 합니다. 빠른 변화보다 안정성을 중요시하는 곳에서는 다른 언어보다 자바가 더 강점이 있습니다.

 

‘자바는 쓰레기’라는 격한 표현을 하긴 했지만, 아직까지 가장 좋아하는 언어는 자바입니다. 제가 스칼라, 클로저와 같은 언어를 학습하는 이유 또한 자바 프로그래밍을 더 잘하기 위해서일 정도입니다. 하지만 인생사를 어찌 알겠습니까? 다른 언어가 더 매력적인 순간이 온다면, 자바와 이별하는 순간이 올지도…

 

강사님께서는 어떤 교육 철학을 추구하고 계시나요?

대부분의 소프트웨어 교육과 같이 기초부터 하나씩 학습하는 접근 방법이 아니라, 반대로 접근해 보고 싶습니다. 즉, 현실의 문제를 직접 해결해 나가는 경험을 하면서, 관련된 기초 지식을 하나씩 습득해 가는 방식입니다.

이는 학생들의 주도하에 관련 지식을 습득하고, 학습 중 부족한 부분이나 도움을 요청하는 부분에 대해 멘토가 추가적인 피드백을 하는 방식입니다. 또한 가능하면 이론 중심보다는 경험 중심의 교육을 하고 싶습니다.

강사의 역할은 지식을 전달하는 것이 아니라, 학습에 집중할 수 있는 환경을 만드는 데 있습니다. 학업을 방해하는 원인이 무엇인지 파악해 해결 방법을 찾고, 로드맵을 제시해 주며, 흔들릴 때 면담을 통해 코칭을 해주는 것에 있습니다. 또한 코드 리뷰와 같은 피드백을 통해, 학생들이 가진 생각의 틀을 깨뜨리려 노력합니다.

현재 대학 교육과 같이 과목을 분리된 형태로 전달하는 것이 아니라, 여러 개의 과목을 통합해 프로젝트 형식으로 진행하면서 관련된 지식을 전달하려 합니다.

분리된 형태로 지식을 전달하는 경우, 각 과목간의 context switching 비용 때문에 학생들이 학업에 몰입하기 힘들며, 소프트웨어에 대한 즐거움을 느끼는데 한계가 있기 때문입니다. 그보다는 한 가지 주제 또는 문제를 소프트웨어를 통해 해결하도록 하면 소프트웨어에 대한 흥미를 느끼고, 깊이 있게 몰입할 수 있습니다.

이와 같이 한 가지 주제에 몰입하도록 해야 다양한 삽질과 새로운 시도를 하는 모습을 볼 수 있으며, 소프트웨어에 대한 동기부여도 가능합니다.

프로그래머는 끊임없이 학습해야 합니다. 따라서 새로운 지식을 학습하는 것 자체가 고통이 아니라, 즐거워야 합니다. 이같은 즐거움을 느끼려면 외부의 기준이나, 속도가 아니라 자신의 속도, 자신의 학습 스타일로 꾸준히 학습할 수 있도록 연습하는 것이 기술적인 지식을 하나 더 아는 것보다 더 중요합니다.

 

어떤 분들이 이 강의를 들으면 좋을까요? 어느 정도의 개발 경력이 있어야 강의를 들을 수 있나요?

이 강의는 이론 강의 위주가 아니라, 실습 위주의 강의인 관계로 프로그래밍을 시작하는 개발자에게는 적합하지 않습니다. 가장 적합한 대상은 다음과 같습니다.

1) 대학교, 독학, 학원과 같은 곳에서 짧은 기간 동안 자바 웹 프로그래밍을 학습한 개발자로, 자신이 사용하고 있는 기술의 기본 원리를 학습하고, 다음 단계의 학습 로드맵을 설계하고 싶은 개발자.

2) 실무에서 자바 기반 웹 프로그래밍을 하고 있는 개발자로, 이미 다른 개발자가 구축해 놓은 환경에서만 일하고 있기 때문에 내부 기술의 동작 원리를 학습하고, 다음 단계의 학습 로드맵을 설계하고 싶은 개발자. (경력으로 본다면 1년 미만의 자바 웹 개발자)

Photo credit: osde8info via Visual hunt / CC BY-SA

 

현재 자바를 사용하고 있는 실무자들이 느끼는 가장 큰 고충은 무엇일까요?

저는 3개월 동안 학원에서 자바 전문가 과정을 마치고 개발자의 길을 걷기 시작했습니다. 제 주위에는 어떤 로드맵을 가지고 학습하는 것이 좋은지, 학습해야 할 지식은 무엇인지, 각 지식의 우선순위가 어떻게 되는지에 대한 정보를 얻을 수 있는 곳이 없었습니다. 어쩔 수 없이 독학으로 하나씩 학습해 나갈 수 밖에 없었죠.

 

그저 감으로 ‘이 길이 맞겠지’라는 생각으로 파고 들었다가, 난이도가 너무 높아 포기한 경우도 부지기수입니다. 그렇게 끊임없이 도전했다가 좌절하고, 포기하기도 많이 했지만 성공했을 때의 성취감은 그 어느 것과도 바꿀 수 없었습니다.

제가 느꼈던 이같은 막막함은 지금도 큰 차이가 없습니다. 주변에 뛰어난 선배 개발자가 많지만, (또는 없는 경우도 많지만,) 개발자로서의 성장과 관련해 조언을 듣고, 방향을 제시해 줄 수 있는 선배는 많지 않습니다.

물론 자신의 성장과 관련해 스스로 노력할 때 빠르게 성장할 수 있지만, 지치고 힘들 때 고민을 나누고, 다음 단계로 나아가야할 방향에 대한 조언은 할 수 있지 않을까요? 각자 바쁜 일상이지만, 약간의 시간을 내어 고민을 나누고 지식을 나눌 수 있으면 좋겠습니다.

Photo credit: pheaber via Visual hunt / CC BY-SA

또한 자신이 구현한 소스 코드에 대한 피드백을 선배 또는 동료로부터 받으면 좋지 않을까요? 자신이 구현한 소스 코드에 대해 피드백을 받을 때 빠르게 성장할 수 있다는 것을 느꼈습니다. 코드 리뷰가 좋다는 것은 알지만 이 활동을 팀의 문화로 만들기는 쉽지 않습니다.

 


지금까지의 학습 방식과는 다른 접근 방식을 제시하고, 자바 웹 프로그래머가 학습해야 할 학습 로드맵을 제시하려 합니다.

앞의 교육 철학에서도 언급했지만 이론 지식부터 시작하는 것이 아닌 무엇인가 만들어 보고 배포하는 경험에서 시작합니다. 이 같은 경험을 통해 웹 애플리케이션 개발 전반에 대해 이해하고, 학습할 내용이 무엇인지를 먼저 파악합니다. 이미 알고 있는 내용을 반복하는 것은 효과적인 학습 방법이 아닙니다. 현재 자신이 가진 역량에서 약간은 두렵고, 부족한 부분에 집중할 때 한 단계 성장할 수 있습니다. 자신의 부족한 부분을 찾아 집중적으로 반복하도록 유도하도록 설계되어 있습니다.

저는 새로운 개념을 학습할 때 관련 문서를 읽어도 도저히 공감되지 않고, 이해되지 않는 경험을 한 적이 있습니다. 예를 들어 MVC 패턴 기반의 스트럿츠 프레임워크를 학습하게 되었는데, 관련 문서를 읽어도 도저히 이해가 되지 않았습니다.

Photo credit: P!XELTREE via Visualhunt / CC BY-NC-SA

MVC 구조에 대한 이해도를 어떻게 하면 높일까 고민하다, 제가 이해한 정도의 수준으로 MVC 프레임워크를 직접 구현해 봤습니다. 정말 간단한 구조의 MVC 프레임워크였지만, MVC 구조의 핵심을 담고 있었기 때문에 MVC 패턴 자체를 이해하는 데 많은 도움이 되었습니다.

이 일을 계기로 새로운 무엇인가를 학습할 때, 내가 이해한 수준까지 직접 라이브러리 또는 프레임워크를 구현해 봄으로써 학습에 대한 깊이를 더해가는 방식으로 학습하고 있습니다. 직접 구현해 봄으로써 자신이 이해하고 있는 부분과 모르는 부분을 명확히 알 수 있으며, 애플리케이션이 어떻게 동작하는지에 대해 깊이 있게 이해할 수 있는 계기가 됩니다.

이렇게 지금까지 제가 학습해 온 방식과 경험을 나누고 싶습니다. 하지만 아무 것도 없는 상태에서 무작정 구현하라고 하면 저 또한 막막했습니다. 이같은 막막함을 덜고자, 실습을 시작할 수 있는 기반 코드를 제시하고, 이 상태에서도 힘들면 다음 단계로 도전할 수 있도록… 다양한 힌트를 통해 문제를 해결할 수 있도록 유도하는 방식으로 교육 과정을 설계하였습니다.

마지막 단계에서는 각자 실습을 통해 구현한 결과물과 제가 구현한 결과물을 비교하면서 자신이 미처 고려하지 못했던 설계, 구현 방식에 대해 학습할 수 있습니다. 개인별로 코드 리뷰를 상세하게 받기 힘들겠지만, 제가 구현한 코드와 비교해 보는 것만으로도 다른 시야를 얻으실 수 있을 겁니다.

이 과정에서 실습을 통해 HTTP 웹 서버를 직접 구현하는 경험을 합니다. 웹 개발자가 반드시 학습해야 하는 주제가 HTTP인데 HTTP를 이론으로만 학습하는 것이 아니라 HTTP 웹 서버를 직접 구현해 보면서 HTTP에 대한 이해와 더불어 단위 테스트, 리팩토링, 객체지향 설계 경험을 하게 됩니다. 이와 더불어 구현한 코드를 AWS와 같은 원격 서버에 배포 자동화하는 경험도 단계적으로 진행합니다. 배포 자동화에 대한 실습을 병행하는 이유는 웹 개발자가 친숙하지 않은 리눅스 개발 환경과 쉘 스크립트에 조금이나마 친숙해지길 바라기 때문입니다. 최소한의 배포 자동화 실습이지만, 구현, 빌드, 배포까지의 전체 과정을 경험할 수 있습니다. 배포 자동화와 관련해서는 직접 실습과 동영상을 통해 학습할 수 있도록 설계했습니다.

이 같은 실습 과정을 통해 지금까지 학습하던 것에 비해 훨씬 더 많은 것을 얻을 수 있습니다. 하지만 직접 실습을 하기 때문에 많은 시간을 투자해야 합니다. 주 2회이긴 하지만, 회당 3시간씩 진행되는 수업으로 모두 소화하기 힘들 정도입니다. 강의 시간 외에도 많은 시간을 투자해야 하기 때문에 이 강의를 듣는 동안 업무에 대한 부담을 낮추거나, 체력 안배를 잘해야 합니다. 이 과정에 참여하고 싶은 개발자라면 이같은 부분을 고려하신 후에 수강신청하시는 게 좋습니다.

노력은 배신하지 않습니다. 각자가 시간을 투자한 만큼 더 많은 것을 경험하고 얻어 가시리라 믿습니다.

[자바 웹 프로그래밍 CAMP] 2기 자세히 보기 >>>

Recent Posts