커리어에 잡다한 분야가 섞인 7,8년차 FE가 생각하는 시니어 FE

By John

·
/images/post/thumbnail/john_home_cherry_blossom.jpeg

Table Of Contents

글을 시작하며

개발자란 이름을 달고 돈을 받으며 일을시작한지 이제 약 7,8년이 된것 같다. 첫 커리어의 시작을 백엔드로 했고, 이때 Devops 라 하는게 맞는진 모르겠지만 그냥 웹 어플리케이션에 필요한건 다했다. 컨테이너 운영은 당연하고 DB, es, redis, network 등등과 관련된 AWS 에 올라간 모든 리소스를 관리하는것 역시 내 롤이었으니 말이다.

어쩌다보니 지금은 Frontend 개발자란 이름을 달고서 FE 개발에 필요한 인프라 관련 업무를 맡고있고, 이 회사에 입사한 이후로 일반적인 화면개발을 한적이 거의 없다. 주로 터미널을 열고 호스트 OS 의 상태를 파악했으며, Jenkins 파이프라인을 구성하거나, 도커파일을 작성했다. FE 인데 커리어관점에서 화면을 만들지 않고 있는게 걱정되지 않느냐? 딱히 신경 쓰고있지도 않고, 걱정도 안된다.

요즘. 아니 좀더 긴 기간동안 종종 나는 이런 고민들을 하는 FE 들을 종종 만났다. FE 로 얼마나 더 일할 수 있을까?, FE 로 커리어를 쌓았을때 경쟁령이 있는게 맞나?, 시니어 프론트엔드 개발자는 뭘 얼마나 해야하지? 같은 고민들 말이다.

얼마전 동료와 이야기를 하다 들은 말인데 모 컨퍼런스에서 가장 인기가 있었던 세션이, FE 개발자가 BE 로 전직한 이야기를 하는 세션이었다고 한다. 다들 고민이 많다는 이야기를 여실히 보여주는듯 하다. 그래서 내가 이런현상을 마주하며 드는 생각들을 그냥 글로 풀어보려 한다.

미리 언급하자면 "걱정하지 마세요. FE 는 경쟁력 있어요!" 같은종류의 이야기는 하지 않을것이다. 어떻게 해석하느냐에 따라 나도 동의하는 부분이 있지만, 이런 이야기는 별 의미없다고 본다.

프론트엔드 개발자?

내가 개발을 시작할 당시만 해도 나는, Frontend 개발에 대한 관심을 전혀 두지 않았으며 시장역시 딱히 해당 직군에 대한 관심이 그닥 대단하지 않았다. 웹 퍼블리셔라 불리는 분들의 업무를 제외하곤 그냥 서버하시는 분들이 jQuery 를 활용해 웹페이지를 만드는 케이스를 더 많이 본것같다.

하지만 얼마지나지 않아 React, Vue 등의 기술들이 국내에서도 인지도를 높여가며 점점 시장에서 Frontend 개발자란 단어가 많이 들리기 시작한것 같다. 이때즈음 개인적으론 Backbone, Ember, Meteor 같은 비교적 요즘은 보이지 않는 기술들을 사용한 프로젝트들도 경험했는데 재밌었던것 같다.

뭐 어쨌든. 내가 처음 제대로 몸담았던 회사는 Naver 커넥트에서 운영하는 boostcamp 와 취업관련 연계가 되어있는 회사였고, 해당 과정을 겪은 분들을 면접관으로서 상당히 많이 만났다. js 기반의 풀스택 과정을 경험한 분들이었다. 우린 모든 팀원이 Full Stack 개발을 했으며, 경험한 언어와 상관없이 해당 직군을 채용하기에 FullStack 개발자만 채용하였다(FullStack이란 단어를 좋아하진 않지만 딱히 표현할 단어가 그닥 없어 그냥 사용하겠다). 이때 내가 면접관으로서 조금 놀랐던게, 약 3년간 면접을 본 취준생분들의 과반수가 BE 가 아닌 FE 를 하고싶다고 오는 분들이 많았다는 것이다.

아울러 이때 시장에선 가장 뜨겁고 채용문이 활짝 열린 분야였으며, 굉장히 많은 분들이 Web Frontend 개발로 개발을 처음 접하신 분들이 기하급수적으로 늘어났다는 것을 피부로 와닿게 느끼는 시기였다. 이때부터는 프론트엔드 개발자 라는 단어가 너무나 자연스레 시장에 자리잡은것 같다.

프론트엔드 개발의 영역은 어디까지일까

프론트엔드 개발자란 직군은 어찌되었든 애플리케이션의 화면과 관련된 일을 한다. 사용자에게 노출되는 화면을 구현하며, 이 노출된 화면이 사용자에게 불편함 없이 제공되기 위한 여러부분을 신경쓴다. 나는 여기서 여러부분 이란 이 단어가 과연 어디까지인가를 이야기하고 싶다. 물론 개개인의 생각이 모두 다를수 있고, 또한 이 다른 생각들이 타당한 논리를 지니고 있을수 있다는것을 충분히 인지한다. 이 글에 적힌 내용은 현시점 내가 생각하는 개인적인 견해이다.

웹 애플리케이션 에 대해 생각해보자. 애플리케이션의 특성별 차이가 있을수는 있으나, 하나의 웹 애플리케이션이 사용자에게 제공되기 위해 필요한 최소한의 요소가 있다. 그럼 이중 화면만을 위해 필요한 최소한의 요소는 무엇일까? 예시를 들어보겠다.

개발한 Frontend 애플리케이션이 제공되기 위해선 브라우저에 주소를 입력했을때 부터 많은 요소들이 개입한다. 일단 사용자가 특정 주소를 입력하여 접근 가능하도록 Domain Name 이 필요하다. 이 도메인을 잘 찾을수 있도록 DNS 에 엮어줘야 한다. DNS 에 엮였다면 이 엮인 주소로 날아온 요청을 잘 응답해줄 서버가 필요하다. 정적파일을 서빙하는 서버이든 서버에서 화면을 그려 응답해주는 동적 서버이든 어쨋든 서버가 필요하다. 그럼 이서버가 운영되기 위해선, 클라우드든 온프렘이든 물리머신 역할을 해주는 호스트가 필요하다.

위 사항은 정말정말 최소한의 사항만을 언급한 것이다. 실제 서비스 운영을 하고 계신분들은 ha 를 위한 많은 처리, 트래픽 스케일링, 원활한 배포및 롤백을 위한 형상화, 애플리케이션 모니터링 시스템, 로깅시스템, ip 대역 분리, 방화벽, 인증서 등등등 많은 요소가 개입된 환경에서 애플리케이션을 운영하고 있을것이다.

그럼 나는 여기서 묻고싶다. 위 사항들을 본인이 직접 바닥부터 올릴수 있나? AWS 로 예시를 든다면 route53 에 cloudfront 엮어서 s3 에 올라간 정적파일 서빙하는 이런거 말고. VPC 내에 subnet 대역대 얼마나 줄지 고민해가며 쪼개고, public/private subnet 나누어 internet gateway 연결하고, nacl 설정하고, route table 설정하고, pivate 영역에서 외부로 트래픽 내보내야 할때 nat 를 직접 올릴건지 제공하는 서비스를 쓸건지 등등등을 고민을 해가며 작업해본적이 있는지 말이다. 전문가 수준까지는 아니더라도 가장 기본이 되는 환경구성을 해본적이 있는지 질문하고 싶다.

이런것들을 절대 할일 없는 회사만 다니겠다면 몰라도 실무를 하는데는 문제 없을것이다. 아울러 리드에 자리에 올라가 서비스 인프라를 바닥부터 세팅해야 할일이 평생 없을것이라면 몰라도 문제 없을것이다.

하지만 내가 말하고 싶은 것은 위 영역은 모두 Frontend 개발자가 개발한 Application 을, 사용자에게 제공하기 위해 필요한 요소가 분명하다는 것이다.

시니어 프론트엔드 개발자는 어디까지 알아야할까

이글을 처음부터 읽었거나, 내 커리어를 살펴 보았다면 이렇게 생각할수 있다. "본인은 커리어에 백엔드나 인프라 관련 업무를 한 경험이 있으니 알고있는거 아닌가?" 하고 말이다. 내 대답은 "아니오" 이다. 나역시 여태 커리어를 쌓은 회사에서 해당 작업들을 처음부터 할 일들은 없었다. 뭐 static ip 가 필요해진다거나, 특정 트래픽은 특정 ip 대역대로 흐르게 해야 한다거나, 혹은 새로운 서비스 오픈을 위해 클러스터를 만들고 컨테이너를 올린다거나 하는등의 작업은 실무경험이 있으나 바닥부터 network 대역대를 쪼개고 무언가를 세팅한 경험은 없다. 이미 이루어져 있었기에 나머지 부분은 그냥 혼자 공부하고 실험했다. 백엔드 api 개발이야 허구언날 하던것이지만, DB 쿼리는 레코드가 많아질수록 혹은 복잡해질수록 문제를 만들어냈고, 서비스가 커질수록 서버는 복잡해졌다. 이런 문제는 그냥 공부하고 실험해가며 튜닝했다. 나뿐아닌 내 동료들 역시 그러했다.

나는 시니어 프론트엔드 개발자라면, 현재 내가 운영중인 프론트엔드 애플리케이션을 올리기위한 모든 요소는 어느정도 다룰줄 알아야 한다고 생각한다. 예로 SSR 을 하는 애플리케이션을 운영해야 한다면 해당 운영에 필요한 백엔드와 인프라 영역을 모두 일정수준 알아야 한다고 생각한다. 더 나아가 RDB 에 쿼리튜닝정도는 할수 있을 정도의, DB 지식은 갖추어야 한다고 생각한다. 즉, 웹서비스 하나를 내손으로 내놓을수 있을정도의 지식은 본인의 전문영역을 막론하고 어느정도 필요하다 본다.

SSR 애플리케이션 운영을 안한다 쳐도, 정적파일을 올리는 그곳이 서버다. "naver.com 을 브라우저에 입력했을때 어떤일이 일어나는가" 라는 흔하디 흔한 면접에 나오는 그 질문에 모든 단계에 서버가 엮여있다. 본인들이 만드는 모든 애플리케이션은 서버와 엮이지 않을래야 않을수가 없다.

Web 을 만드는 사람이, web 의 기본을 모른다고? 나는 FE 라 서버를 몰라도 된다고? 란말에 나는 동의하지 않는편이다. 당장 나만해도 사내 FE 분들이 업무를 하기 위한 일을 하며, Devops, SRE, NE, SE, DBA 분들과 이야기를 굉장히 자주 나눈다. 내게 web 서비스에 대한 전반적인 기본지식이 없었다면, 저분들과 일을 하고 이야기를 나눌때 많은 시간낭비와 답답함을 만들었을것이라 생각한다.

마치며

이 글에 남긴 내용은 지극히 주관적인 생각이다. 동의하지 않는다 해도 물론 그럴수 있고, 나역시 생각이 바뀔수 있다. 내가 이런 글을 작성했다 해도, 나역시 아직 모르는것 투성이고 예전에 공부했던 내용이 생각이 안나서 다시찾아 읽곤 한다.

하지만 결국 난 이런 생각을 한다. BE/FE 를 막론하고, Web 서비스를 만드는 사람이면 web 의 기본은 그래도 잘 알려고 노력해야 하지 않을까.

Juntae(john) Kim · © 2020 · DevLog