비전공자로서 프론트엔드 개발자가 되기로 결심한 당신. 프론트엔드 생태계에서 비전공자와 전공자는 정말 차이가 있을까? 진리의 ‘사바사’겠지만, 현실을 바라보면 분명 차이가 존재한다.

잠깐, 프론트엔드는 전공자 여부가 그렇게 중요하지 않다고? 임베디드, 하드웨어, 백엔드에 비하면 중요도가 낮은 건 사실이다. 그렇다고 중요하지 않은 건 아니다. 네트워크, 컴퓨터 구조, 알고리즘, 운영체제, 소프트웨어 공학 같은 지식이 있느냐 없느냐는 협업 단계나 개발 진행에서 차이를 만든다.

비전공자가 컴퓨터 공학에 대해 일가견이 있는 경우라면 몰라도 일반적인 상황에서 전공자보다 관련 지식 수준이 낮을 수밖에 없다. 이건 자연스러운 현상이다. 전공자는 4년 동안 배우면서 익힌 ‘기본값’을 갖고있기 때문이다.

하지만 경력이 쌓이면 격차는 줄어든다. 시간이 지나면 전공 여부는 중요하지 않다는 걸 깨닫는다. 오히려 개발에 대한 열정, 문제 해결 능력, 사고 방식이 더 중요하다. 그러나 지금, 당신은 전공자와 4년 차이를 두고 같은 그라운드에 선 주니어다.

하지만 포기할 필요는 없다. 나 역시 비전공자로 개발을 업으로 삼았다. 컴퓨터 관련 지식이 거의 없었지만 취업에도 성공했고 업무 수행도 큰 문제를 겪지 않는다. 주위 개발자 중에도 전공자가 아닌 사람이 많다. 혹시 비전공자라는 이유로 개발자가 되길 망설인다면 그러지말라고 싶다.

합리화 금지

10km 마라톤 대회에 친구와 나간 적이 있다. 나에게는 두번째 대회였다. 첫번째 대회 기록은 56분 47초. 두번째 대회에서는 기록 단축을 목표로 55분 언더를 노렸다. 내 기록은 50분 27초였다. 정말 죽을 힘을 다해 달렸다.

달리는 동안 한 가지 깨달은 게 있다. 인간은 포기하고 싶고 힘들때 자기 합리화를 통해 스스로 타협하도록 유도한다. 7km 지점, 숨이 턱 끝까지 차올랐다. 그러자 머릿속에서 끊임없이 변명거리가 튀어나왔다.

  • 앞에 사람이 많아서 속도를 못 낸다.
  • 배가 조금 아픈데 속도를 늦춰야겠다.
  • 이미 55분 언더로 들어갈텐데 천천히 달릴까?

옆에 같이 뛰던 친구가 부추겼다. “빨리 달려, 할 수 있어.” 죽을 것 같았지만 이를 악물었다. 그리고 다시 뛰었고 완주했다.

여기서 합리화의 위험을 느꼈다. 충분히 할 수 있는 능력이 있어도, 스스로 타협하면 거기서 멈추게 된다. 명심하라. 스스로 타협하지 말아야 한다.

비전공자가 개발을 처음 시작하면 낯선 개념이 많다. 컴퓨터공학(CS) 지식, 알고리즘, 실제 코드를 작성하는 일 조차 괴롭다. 처음에 숨이 턱 막히는 경험을 한다. 도무지 이해되지 않는다. 강의를 따라 코드를 치다가, 혼자 작성하려 하면 손이 멈춘다. 그럴 때면 자괴감과 무력감이 밀려온다.

  • 다른 사람들은 저렇게 잘 하는데 왜 나는 안될까?
  • 전공자와 격차를 어떻게 좁히지.
  • 계산기도 구현 못하는데 개발자를 할 수 있을까?

여기서 동기부여 받고 정진한다면 다행이다. 하지만 괴로움에 질려 포기하려 한다면 명심해야한다. 마라톤이 그렇듯 공부도 그렇다. 괴로움으로 도망치지 마라. 자신이 생각하는 것보다 더 큰 능력이 있다. 이 악물고 뛰면 결국 완주한다.

연습 또 연습

CS, 알고리즘은 필수 소양이다. 하지만 현업에서 가장 중요한 건 따로 있다. 바로 코드를 작성하는 일이다.

‘코드를 작성한다’란 무엇인가?

  • 기존 코드 수정과 변경
  • 서비스에 기능 추가
  • 안정된 서비스를 위한 에러핸들링/테스트 작성

더 나가면 컨벤션과 구조 설계 등 아키텍처도 코드 작성의 일환이다.

내 경험상, 이 일은 가장 중요한 일이다. 하지만 공부하기 까다롭고 어렵다. 이건 이론이 아니라 실무의 영역이기 때문이다. CS는 개념이다. 알고리즘은 수학과 가깝다. 문제 해결 방식에 대한 학문적 공부다. 코드 작성은 기술의 영역이다. 문제 하나에 다층적 문제가 내포되어 있다.

코드 작성 능력을 키우려면 어떻게 해야할까? 매우 진부하지만 답은 연습, 또 연습, 그리고 더 연습이다. 처음부터 어려운 기능을 만들려하지 마라. 너무 어려운 과제는 동기부여를 꺾는다. HTML, CSS 정도만 할 수 있는데 갑자기 쇼핑몰, 블로그를 만들려 덤비지 말라. HTML, CSS로 완전히 새로운 페이지를 만들어보거나, 한두 단계 어렵지만 할 수 있는 웹사이트를 클론 코딩하면 충분하다.

교육심리학자 로버트 비요크(Robert Bjork)는 이를 ‘바람직한 어려움(Desirable Difficulty)’이라 불렀다. 학습 과정에서 적절한 도전은 정보 처리와 기억 능력을 향상시킨다. 너무 쉽지도, 너무 어렵지도 않은 수준이 학습 효과를 높인다.

DB, 서버, 배포, CI/CD까지 혼자 구현하고 배포할 수 있을 정도로 도달해야 한다. 모든 걸 전문가 수준으로 익힐 필요는 없다. 혼자서도 기본적인 흐름을 이해하고, 작은 프로젝트를 직접 배포할 수 있을 정도면 충분하다. 기본적인 이해가 있으면 협업 시 커뮤니케이션이 원활하고, 알고 있는 것과 모르는 것의 차이로 벌어지는 사고 폭도 달라진다.

여러번 프로젝트를 만들고 배포하면 코드 작성 능력을 자연스럽게 키울 수 있다. 동시에 다양한 고민도 만나게 된다.

  • 서비스의 첫 랜딩이 너무 느리다.
  • 내가 배포한 사이트에 내 도메인을 연결시키고 싶다.
  • 사용자가 버그가 터졌다는데 정작 나는 어디서 터지는지 모르겠다.
  • 기능을 추가하다 보니 한 파일에 코드가 천 줄이 넘어가서 보기 힘들다.
  • 매번 main으로 커밋 푸시하니 대부분이 무의미하고 정리되지 않아 히스토리 파악이 힘들다.
  • 협업 시 중구난방 스타일로 개발해서 본인 작업이 아니면 잘 쳐다보지 않는다.

이런 고민을 하나씩 부셔가면 자신만의 해결책이 생기고 철학이 만들어진다. 이 철학은 여러분이 프론트엔드 개발자로서 가지는 경쟁력 중 하나가 된다.

포커싱

비전공자가 마주하는 개발 세계는 망망대해와 같다. 누군가는 CS가 중요하다고 하고, 누군가는 알고리즘을 해야 한다고 하며, 또 다른 이는 React뿐 아니라 Vue까지 배워야 한다고 말한다. TDD, OOP, 웹 접근성, 디자인 패턴까지. 정보가 넘쳐난다. 하지만 시간은 제한적이다. 그리고 뇌 용량도 제한적이다. 우선순위를 정하고 집중해야 한다.

처음 개발을 시작할때 나도 모든 것을 하려 했다. React를 알았으니 Vue, Angular도 배워야 하고, Svelte도 배워야한다고 생각했다. 웹뷰를 개발하니 네이티브 언어를 배워야 할 것 같았다. 알고리즘, 디자인 패턴, OOP까지. 그러나 모두 배우려다 결국 아무것도 배우지 못했다. 공부하지 않는 자신만 채찍질했다. 그때 깨달았다. 중요한 건 무엇에 집중할지 선택하는 것이다.

남이 하니 나도 해야겠다는 건 좋지 못한 생각이다. 목적없이 항해하는 배가 될 뿐이다. 예를들면 1일 1잔디 심기, 매일 TIL 블로그 올리기가 그렇다. 하면 좋지만, Good to have보다 Must have를 우선 챙겨야한다. 시간은 제한적이다.

내 생각이지만, 대부분의 시간을 새로운 서비스를 만들고 코드와 제품 퀄리티에 집중하는 게 좋다 생각한다. 개발의 목적은 서비스 구현 그 이하 그 이상도 아니기 때문이다. 서비스를 만드는 능력과 퀄리티를 높이는 능력이 가장 중요하다. 기술 스택도 그렇다. 시장은 당신이 기술 스택을 어느정도 할 수 있는지에 대한 어빌리티를 보는게 아니라, 그 기술을 이용해 적절한 의사결정을 수행하고, 구현 시 활용하여 코드와 제품 퀄리티를 높일 수 있는가를 본다.

무엇에 포커싱하는게 좋을지 몰라 고민 중이라면, 제품을 만들고 제품 퀄리티를 높이는 능력에 집중하자. React로 좋은 제품을 만들 수 있다면, Next.js도 만들 수 있다. TypeScript로 좋은 제품을 만들 수 있다면, Python으로도 좋은 제품을 만들 수 있다.


새로운 시작은 언제나 어렵다. 특히 개발은 더 어렵다. 실무 영역을 중시하므로, 시험과 자격증 중심의 우리나라 환경과 다르기 때문이다. 그 덕에 기회의 문은 열려있다. 실력이 있다면 무대는 언제든 열린다. 반대로 처음 시작하는 사람에게는 어렵다. 어느정도까지 하면 되는지 기준이 없다.

합리화 하지 마라, 연습하고 또 연습하라. 우선순위를 정하고 거기에 집중하라. 만약 정하지 못하겠다면 우선 코드와 제품 퀄리티에 집중하라. 당신이 개발자가 되기로 결심했다면 이 세가지를 기억하길 바란다.