알차고 보람 있습니다.
프로그래밍 부트캠프에서 Educational SW Engineer (교육 엔지니어) 로 일 하고 있다. 일반적인 프로그래밍 교육 기관과 달리 부트캠프에서는 개발자가 어떤 일들을 하고 있는지 알아보도록 하자.
프로그래밍 부트캠프는 코딩, 웹, 개발, IT 백그라운드가 없는 분들이 수강생으로 많이 오셔서 단기간에 개발자가 되기 위한 훈련을 하는 곳이다. 기본 심화 코스를 8주 파트타임으로 진행 후, 12주 풀타임 심화과정에 임하게 된다.
전체 12주 중에서 대략 6주는 기본 코스에서 배운 javascript 기술을 가지고 자료구조, 웹개발을 위한 프론트엔드, 백엔드, 데이터베이스, 그리고 클라우드 배포를 빠르게, 집중력을 가지고 배운다.
그 뒤 6주는 다시 2+4주 프로젝트로 이어진다. (코드스테이츠에서는 4주 프로젝트의 경우, 다른 스타트업 기업 실무진과 기업협업 프로젝트를 진행하기도 한다)
그렇다, 이 12주는 매우 타이트한 스케쥴 안에서 돌아가기에 체력적으로나, 기술적으로나, 정신적으로 쉬운 과정이 아니다. 그래서 우리는 기본 코스 이후, 심화코스에 들어오고자 하는 분들을 IAT(Immersive Admission Test, 부트캠프 입학시험) 와 2차 인터뷰등을 통해, 수강생들의 정신적 의지와 기술적 준비 상태를 미리 확인하는 과정을 거친다.
시대는 변하고, 교육 및 학습의 모습들도 변하고 있다. 불과 몇 년전까지만 해도, 대학진학에 대해서 의심이 있지는 않았다. 교육적으로 보수적인 한국에서 대학을 가지 않는다는 것은 마냥 쉽지많은 않다. 소개팅 나갈 때 어느 대학 나왔느냐를 이야기하기 위해서라도 졸업을 해야만 했다. 하지만 특히 요즘 들어, 현장에서 일하다 보면 누가 어느 대학 나왔는지를 묻지 않는 것을 볼 수 있다. 시대는 변하고 있다. 어디를 나왔느냐보다, 무엇을 할 수 있는지를 묻는 오늘이다. 특히 SW 업계에서는 더더욱 그렇다.
비단, 소프트웨어 업계 뿐 아니라, 3–4년 만 직장생활을 해 본 사람들은 안다. 출신 학교나 경력이 퍼포먼스와 정비례하지 않는다는 것을. 해당 일에 지속적인 관심과 도전의식을 통해 끊임없이 배우고 나아가는 사람들의 퍼포먼스는 처음엔 별로 인상적이지 않아도, 시간이 지나면 자연스럽게 인상적인 퍼포먼스를 내기 마련이다.
부트캠프에는 여러 다양한 비개발 직업군을 경험하시다가 개발을 배우러 오시는 분들이 많다. 이런 분들이 12~20주 안에 소프트웨어 (웹 & 앱) 개발자로 커리어를 전환하게끔 돕는 곳이 바로 부트캠프다.
이 짧은 기간에 개발자로 커리어를 전환 시켜준다는 말을 불편해 하는 분들이 있다. 하지만, 이 일은 실제로 일어나고 있고, 우리는 졸업 이후 개발자로 취업을 원하는 분들의 90% 이상이 개발자로 커리어 전환을 이루고 있는 수치가 통계로 나오고 있다. 우리 부트캠프에 오시는 분들을 비전공자 라는 라벨을 붙이는 것은 사실 맞지 않다. 오히려 더욱 다양하고 풍부한 사회의 경험들을 하고 오시는 분들이 많다. 다양한 경험 위에 기술이라는 무기를 얹어 서비스적 마인드가 필요한 현대 IT 업계에 필요한 인재라고 볼 수 있다.
그럼 부트캠프는 취업을 시켜주는 곳인가? 라고 오해하실 수 있다. 국비지원 교육기관에서도 채용을 연계해 주지 않는가? 틀린 말은 아니다. 우리는 평소에 많은 파트너사들과 채용 추천 파트너쉽을 맺고, 졸업생을 추천해 드리고 있다. 하지만 조금 다르다.
졸업 후, 프리랜싱 개발 및 창업으로 빠진 졸업생들 말고는 대부분 서비스 중심의 스타트업 쪽으로 취업을 하시고 있다. 코드스테이츠의 목적은 건강한 자세(attitude)를 가진, 학습 속도가 매우 빠른, 끊임없이 공부하고 기술에 대한 글을 쓰고 공유하고 이야기 하는 것을 즐겨하는 슈퍼 주니어 개발자를 양성하는 것이다. 취업이 잘 되는 것은 그에 대한 결과일 뿐이다. 코스 운영 책임자인 나는 오히려 창업을 권한다. 실제로 취업을 생각하고 오신 분들께서 수강생들끼리 마음을 맞춰 수료 후 창업팀을 꾸린 사례들도 있다.
크게 두 가지로 나뉜다고 보면 된다. 하나는 교육, 그리고 두 번째는 개발 이다.
우리는 스타 강사가 없다. 능력있는 강사는 udemy, youtube 곳곳에 넉넉히 있기에 우리까지 스타 강사가 될 필요가 없다고 생각한다. 우리는 강의식이 아닌 자기주도적 학습 방법을 가르친다. 오해가 있을 수 있는데 ‘강의식’이 결코 나쁘다고 말하는 것은 않는다. 나 스스로도 무언가를 배우기 위해 강의식을 자주 활용한다. 단지, 이제 막 프로그래밍을 배우기 시작한 쥬니어에게 많은 내용의 지식을 배우게 하기 보다는, 자기 손으로 만들어가며 필요한 내용들 우선 순위로 배우는 것이 더 효과적이라고 우리는 믿고 있다.
엔지니어는 학습자가 적절한 시기에 적절한 고통을 겪을 수 있도록 (개고생) 커리큘럼을 설계한다. 물론 적재 적소에, 그리고 좋은 타이밍에 키워드를 던져주어 너무 다른 길로 가지 않게끔 도와준다. 하지만 여전히 문제를 직접 해결해 주지는 않는다. 강사분의 코드를 따라 치는 일은 없다. 어설프고 이상한 코드라도, 자신들이 직접 설계하고 써 나간다. 코드는 도구일 뿐, 진짜 시간을 많이 쓰는 것은, 문제를 해결하기 위한 전략이라고 생각하기 때문이다.
교육 엔지니어는 학생이 이번 프로젝트에서 얻어가야 할 기본적인 개념 및 작은 task등을 목표로 세운다. 학생들은 이 목표를 하나의 작은 서비스 프로그램들을 만들어 나가면서 자연스럽게 배우게 된다. 우리는 강사가 아닌, 선배 개발자로서 적절한 안내와 키워드 제시로 학습자를 ‘teaching(가르치는 것)’이 아닌 ‘coaching(코칭)’을 한다. 그들과 같은 눈높이에서 그들과 공감하며 그들의 어려움을 옆에서 함께 겪어 나가는 것을 목표로 하고 있다. 결국 해 내는 것은 본인들 스스로, 혹은 동료와 함께다.
코드스테이츠에서는 엔지니어들이 개발을 한다. 이게 무슨 뚱딴지 같은 소리냐고 물을 수 있다. 그럼 개발자가 개발을 하지 무얼 하냐고. 그런데 일반적으로 개발을 교육하는 곳을 보면, 강사분들이 개발을 하기 보다는 강의 자료 준비하기에도 시간이 부족하다. 그런데 부트캠프에서는 강의를 많이 제공하지 않는다. (전체 커리큘럼 시간의 5–10% 정도가 인트로와 세션 등으로 이루어져 있고, 나머지 대부분은 학습자 스스로 혹은, 동료와 함께 고민하고 직접 내 손을 사용해 가면서 무언가를 만들게 된다)
부트캠프의 개발자들은 강의에 시간을 많이 쏟는 대신, 학습자들의 퍼포먼스를 측정하기 위한 내부 학습지원 시스템, 그리고 학습 시험 자동화, 부트캠프 웹사이트, 어드민 대쉬보드 개발에 시간을 쏟고 있다. 우리가 개발하며 부트캠프 내에서 엔지니어들이 개발을 계속 하면서 실제 수강생들에게도 자연스럽게 노하우가 공유되는 것이 옳다고 믿고 있다. 우리가 직접 적용해 나가는 새로운 기술스택의 노하우를 미니세션, 인트로 등을 통해 수강생들과 공유하고 있다.
코드스테이츠 홈페이지(codestates.com)는 마케팅 팀의 요구사항을 토대로 매 주 스프린트를 거쳐 점진적으로 개발되고 있다. 초기엔 랜딩페이지 기능만 있어 별다른 복잡도가 없었지만, 결제에 대한 옵션을 추가하면서 결제 핸들링 서버, 그리고 학생 데이터를 관리자(admin) 대쉬보드에서 관리하기 시작하면서 운영팀에 도움을 주고 있다. 운영팀은 기존에 각종 스프레드시트 툴을 이용해서 관리하던 업무를, 스크럼을 통해 매 주 개선되는 웹사이트, 그리고 관리자 대쉬보드 기능을 통해 많은 업무들을 자동화 한다. 현재는 task migration의 과정을 겪고 있다. 기술 스택은 react, redux, styled component, express, MySQL, Sequelize 등을 사용 중에 있다.
수강생들에게 교과서와 같은 기능을 하는 서비스다. 커리큘럼 자료, 슬라이드, 레퍼런스 영상 등 펼쳐놓고 (read) 학습을 진행하게 된다. 기 지원되는 웹 소프트웨어를 사용하다가, 느리고 ui ux도 별로라 생각해 그냥 우리만의 학습관리시스템을 만들기로 했다. 기본적인 틀은 기존 서비스를 차용하되, 프로그래밍 부트캠프에 맞게끔 추가 기능들을 개발하고 있다. 핵심은 관리자 기능인데, 관리자가 학습 스프린트의 구조를 쉽게 짤 수 있고, 마크다운 에디터를 이용해, 손쉽게 코스를 제작할 수 있다.
현재 베타 서비스에서 학습자는 각 부트캠프 기수에 맞게 authorized view 만 가능하지만, 추가로 학생들의 코스 만족도, 코스 성과, 간단한 테스트 등을 추가로 개발할 예정에 있다. 현재는 부트캠프에서만 사용되고 있지만, 상용화가 되면 stage1 에서는 일반 다른 프로그래밍 교육 기관에서 사용이 가능할 것이고, stage2에서는 프로그래밍 교육을 넘어, 수 많은 교육 플랫폼 등에서 사용할 수 있도록 확장성을 고려해 개발 중에 있다. 기존 웹사이트와 독립적인 프로젝트인 관계로 GraphQL, Apollo, GraphQL-yoga 등을 이용하고 있다.
수강생들은 코드스테이츠에서 여러가지 단계에서 다양한 목적으로 시험을 보고 있다. 프로그램 개발에 있어 알고리즘 문제의 실효성 문제는 따져봐야할 문제이지만, 알고리즘을 위한 알고리즘 문제가 아니라면, 실생활과 연관된 다양한 문제를 우리가 배운 프로그래밍 언어로 고민하고 푸는 것은 반드시 도움이 된다고 생각한다. 그런 의미에서 우리는 기본(pre) 코스에서부터, 심화(immersive) 코스 입학, 중간 시험(hiring assessment) 그리고 심화 과정 중에서 문제 풀이 및 자동 테스트를 위해 아주 오래된 서비스를 사용하고 있었다. 레거시 서비스는 속도가 느리고 예약 시스템, 수강생의 문제풀이 녹화 등 여러 불편함과 기능의 부족함(lack of features)의 배경에서 코드스테이츠만의 시험 플랫폼을 개발하게 되었다.
단순히 코드 에디터 및 테스트케이스들이 도는 플랫폼을 넘어, 수많은 스타트업 사의 엔지니어 채용 프로세스를 턴키로 가져가는 서비스를 위해 핵심 기능이 될 것으로 예상하고 있어 개발팀에서 집중력을 가지고 개발 중에 있다. 프로젝트에선 node, express, sequelize, Mysql 와 react, redux, redux-saga, 그리고 aws, docker 등을 사용 중에 있다.
초기만 해도, 웹사이트 개발의 프로세스 없이 중구 난방, 필요한 때마다 고치고 배포가 되곤 했다. 개발팀을 이끌기 시작하면서, 이러한 무작위 배포 (무중단 배포가 아니다)의 문제점들이 곳곳에서 나오기 시작했다. 회사가 성장함에 따라 홈페이지는 더 많은, 그리고 효율적인 기능들을 요청받게 되었다.
aws-cli를 사용해 배포 프로세스를 짧게 줄이게 되었고, 코드리뷰가 끝나기 전까진 배포가 되지 않도록 변경했다. 배포의 시기도 이전에는 글자 하나 바뀌면 바로 바로 배포를 하곤 했는데, 이제는 중요한 major change가 아닌 이상, 일주일에 1번 정도의 주기로 기다렸다가 한 번에 배포를 하게 되었다. 수시로 방문하는 유저들이 큰 덩어리의 js 파일을 계속 다운로드 받지 않도록 위함이다. 홈페이지 특성 상, 기능과 관계 없는 일정 업데이트, 소식 업데이트 등이 자주 일어나는데, 이 때마다 chucnk.js 가 업데이트 되지 않도록 19년 초에는 자주 바뀌는 컴포넌트의 정보를 server에서 dyanamic 하게 보내주도록 변경 및 클라이언트 쪽에서는 추가적인 code split 을 목표로 하고 있다.
또한 본격적으로 애자일 스크럼을 도입하여 정확한 엔지니어링 리소스를 지속적으로 예측하고, 시도해 보고, 측정하고, 배우고 다시 예측하는 연습을 하고 있다. 2019년의 목표는 현재 개발 중인 모든 프로젝트에 CI/CD를 도입하는 것이다. 그러려면, TDD를 제대로 해야 한다. 각 담당 PM이 최소한의, 반드시 필요한 test case들을 점진적으로 쌓아 나가, 2018년 1쿼터 내에 CI/CD를 구축하려 한다.
우리는 코드 한 줄, 한 줄 어떻게 짜야 하는지 학생들에게 알려주지 않는다. 코드스테이츠 엔지니어의 역할은 유용한 기술, 새로운 기술, 키워드 등을 미리 학습하고 적용해 본 이후, 학생들에게 소개해 줄 수 있어야 한다. 오프라인 컨퍼런스, 세미나, 그리고 온라인으로 진행되는 각종 JSConf 등을 적극적으로 듣고 해당 내용을 정리하여 우리 프로젝트에 적용, 기술 블로그 작성, 이후 수강생들과 공유하게 된다. 어쩔 때는 수강생들의 요청이 있어 on-demand (요청)에 의해 엔지니어가 학습 후, 바로 공유하게 되는 경우도 있다. 이처럼 우리 개발팀은 새로운 기술을 배우는 데 있어 굉장히 민첩(agile)해야 한다.
그러나 언제나 그렇듯이, 새로운 기술이라고 해서 아무런 배경과 장점을 알지 못하고 적용하는 것은 지양하고 있다. 코드스테이츠는 엔지니어의 발전을 위해 스스로 스터디 그룹을 운영하거나, 혹은 스터디 그룹 참여를 지원하고 있다. 2018년 말 부터 시작될 AWS study (general service blocks)을 시작으로, React Optimization, RxJS, NextJS, CI/CD 스터디 등 다양한 기술 주제를 가지고 스터디 그룹이 열릴 것을 기대하고 있다. (학습을 위한 온라인 코스 지원 및 도서 지원, 컨퍼런스, 세미나 참여 등은 기본으로 지원하고 있어 굳이 언급하지 않도록 하겠다.)
이 세상엔 정말 다양한 사람들이 있다. 소프트웨어 엔지니어, 우리가 흔히 말하는 개발자들 역시 너무나도 다양한 모습들이 있다. 묵묵히 코딩은 잘 하지만, 말재주는 없어 코드로만 퍼포먼스를 증명하는 개발자, 실제 개발을 그럭저럭 하지만 말재주가 뛰어나 언제나 다양한 곳에서 인정을 받는 개발자들이 있을 수 있다. 우리가 같이 일 하고 싶은 엔지니어의 모습은, 부트캠프에서 필요한 소프트웨어 엔지니어의 그림은 아래와 같다.
개발을 사랑하고 내가 배운 것에 대해 이해하기 쉽게 그림으로 설명할 줄 알고 이를 많은 사람들과 공유하는 사람
하루가 다르게 새로운 기술들이 있지만 기본에 충실하여 내부 동작 구조에 대해 깊이 고민하는 사람
끊임없이 새로운 기술을 학습하여 빠르게 적용해 보고 그 경험을 잘 정리하는 사람
가능한 한 많은 반복은 자동화하고, 더 중요한 일에 고민하는 사람
자신만이 이해하는 코드를 짜는 사람이 아니라, 누구라도 이해할 수 있는 코드 블록을 쌓는 사람
개발에 대한 열정이 가득한, 내가 깨닫고 배운 개발 경험 노하우를 많은 사람들과 나누기를 원합니다. 빠르게 배우고 적용 하기를 주저하지 않는 개발자 분들을 모십니다.
특정 기능을 잘 구현하는 것을 떠나, 시스템을 설계할 줄 알고 관리 가능한 코드에 대한 욕심이 있는 분들이면 좋겠습니다. 출신 대학이나 개발에 대한 경력보다는 지금 현재 무엇을 할 수 있으며, 얼마나 빠르게 학습해 나가고 있고, 개인적으로 관심있는 기술 주제를 가지고 지속적으로 학습하고 적용하는 분, 그리고 커뮤니케이션이 뛰어난 분을 찾습니다. 무엇보다, 코드스테이츠가 이루고자 하는 현장을 위한 교육에 대한 열정(passion)이 있는 분들이 오셨으면 합니다.
가볍게 차, 혹은 맥주, 와인 한 잔 하시기 원하는 개발자 분들도 언제든지 연락 주시기 바랍니다.
구일모, 코드스테이츠 COO
johnnykoo@codestates.com