나는 현재 아마존 웹서비스(AWS) 내의 한 팀에서 프론트 엔드 개발자로 일하고 있다. 하시는 일, 혹은 직업이 뭔가요라는 질문을 다른 분야에서 일하는 분들께 받으면 그냥 소프트웨어 개발자라고 말하는데, 왜냐하면 프론트 엔드 개발자라고 말하면 이해 못하시는 분들이 대다수라서 그렇다. 사실 프론트 엔드 개발도 소프트웨어 개발의 한 분야이니 굳이 세분화해서 말할 필요는 없지만, 소프트웨어 회사에서 비개발자로 일하는 분이나 소프트웨어 분야로 취업하고 싶은 분이라면 프론트 엔드 개발자가 어떤 일을 하는지 정확히 알아두시는 것이 도움이 될거라 생각한다.
프론트 엔드(Front End)는 '전면' 혹은 '전방'으로 직역할 수 있다. 소프트웨어에 있어 전면은 사용자와 맞닿는 영역이다. 쉽게 말해 사용자가 볼 수 있고 경험할 수 있는 부분에 해당된다. 그의 반대 쪽에 백 엔드(Back End)가 있다. 백 엔드는 사용자에게 보이지 않는 영역이라고 할 수 있다. 프론트 엔드 개발이 백 엔드와 분리되는 직종으로 부상한 것은 사실 그리 오래 되지 않았다. 인터넷이 대중화되기 시작한 웹의 초창기만 해도 웹사이트의 목적은 정보제공이었고 디자인이나 기능면에서는 단순했기 때문에 웹사이트를 구현하는데 많은 기술이 필요하지 않았다. 소프트웨어 개발자라면 아주 기본적인 HTML 지식만으로도 웹사이트를 만들 수 있었다.
시간이 흘러흘러 웹사이트가 하나의 사업수단이 되면서 기능과 디자인이 점점 중요해졌고 자바스크립트(JS)와 CSS 같은 웹사이트 구현에 필요한 언어들이 계속 발전되면서 웹사이트 개발은 특화된 영역으로 굳어져갔다. 그러면서 웹사이트를 구현하는 일을 하는 개발자들이 웹 개발자라는 타이틀로 불리게 됐다. 프론트 엔드 개발이라는 용어가 쓰이게 된 것은 웹 개발이 단순히 HTML, CSS, JS의/앱 영역을 넘어 웹사이트와 앱이 소프트웨어로 쓰이게 되면서부터가 아닐까 싶다. 소프트웨어가 데스크탑에서 웹으로 옮겨가게 되면서 웹 상에서 구현되어야 할 기능의 폭은 훨씬 넓어졌고, 기존의 JS에 여러가지 기능이 추가된 통합형 도구가 나오기 시작하면서 기존 웹 개발의 영역은 어마무시하게 팽창했다. 그에 따라 웹 개발이라는 용어로는 더 이상 새로이 팽창된 영역을 설명하기 힘들어졌고, 더 폭넓은 의미로 쓰일 수 있는 프론트 엔드 개발이라는 용어가 등장하게 됐다.
그럼 본론으로 돌아가 프론트 엔드 개발자가 하는 일을 설명해보겠다.
1. 사이트/앱 디자인 구현
디자인 구현은 아마도 많은 분들이 프론트 엔드하면 바로 떠올리시는 역할일 것이고 눈에 보이는 가장 확실한 영역이다. 여기서 짚고 넘어가고 싶은 건 사이트 디자인과 디자인 구현은 다르다는 점이다. 사이트/앱 디자인은 그래픽 디자이너, 웹 디자이너, 혹은 UI (사용자 인터페이스) 디자이너의 영역으로, 프론트 엔드 개발자가 직접 디자인을 하는 경우는 아주 작은 회사가 아니고서는 사실 드물다. 프론트 엔드 개발자의 역할은 주어진 디자인을 웹사이트나 앱에 잘 구현하는 것이다. 그러기 위해선 기본적으로 HTML과 CSS를 마스터해야 하고 그림 파일이나 영상 파일에 대해서도 잘 알아야 한다.
디자인을 직접 하지는 않지만 어느 정도의 미적 감각과 디자인적 센스는 프론트 엔드 개발자에게 필요하다. 많은 경우 사용자 경험의 100 퍼센트가 디자인에 반영되기 어렵기 때문에 디자인이 놓친 부분을 개발자가 채워넣어야 할 상황이 빈번하게 생긴다. 그럴 때 디자인 감각이 있는 개발자는 더 완성도 높은 결과물을 구현할 수 있다.
2. 고객이 사용하는 기능 구현
쇼핑 카트, 결제하기, 검색, 슬라이드쇼, 동영상 보기, 이미지 확대, 등등 웹사이트/앱 상엔 다양한 기능이 필요하다. 프론트 엔드 개발자의 제일 중요한 역할이 바로 이런 기능을 구현하는 일이다.
이런 기능 구현을 위해서 가장 많이 쓰이는 언어가 자바스크립트(JS)다. JS만으로도 웬만한 기능들은 다 구현할 수 있지만, 좀더 편하고 효율적이고 빠른 개발을 위해 수많은 도구와 라이브러리가 쓰인다. React, Angular, TypeScript, jQuery는 그 대표적인 예라고 할 수 있다. 이제 JS만으로 구현되는 사이트나 앱은 거의 찾아보기 힘들만큼 사이트의 기능이 복잡해졌고, 때문에 프론트 엔드 개발자는 시시각각 쏟아져 나오는 도구와 라이브러리들을 잘 활용할 줄도 알아야 한다.
3. 사이트/앱 최적화
사이트/앱의 기능만 구현된다고 해서 사용자가 만족하지는 않는다. 로딩 속도와 반응 속도가 느리면 사용자의 불만이 쌓이고 심한 경우 사용자들은 사이트/앱을 쓰지 않게 된다. 사이트/앱의 성능을 최적화 하기 위해선 백 엔드의 역할도 크지만 프론트 엔드 개발자도 큰 몫을 담당한다. 예를 들어 사용자에게 필요없는 컨텐츠는 늦게 로딩한다든지, 불필요하게 큰 그림 파일은 사용하지 않는다든지, 비동기(Asynchronous) 코딩으로 특정 코드가 다른 코드의 실행을 막지 못하게 한다든지, 이렇게 다양한 영역에서의 최적화를 프론트 엔드 개발자는 항상 염두에 두고 실행해야 한다.
4. 사이트/앱 보안 관련 기능 구현
보안은 소프트웨어 모든 영역에 있어 다루어지지만 흔히 프론트 엔드와는 상관이 없는걸로 여겨지는데 프론트 엔드 개발자 역시 보안 관련 기능을 염두에 두고 구현해야 한다. 컨텐츠 보안 정책 (Content Security Policy, CSP), 교차 출처 리소스 공유 (CORS), 교차 사이트 스크립트 (XSS) 방지, 인코딩/디코딩 등이 그런 기능의 예다. 각각에 대해 설명하려면 너무 길어지니 일단 넘어가고 나중에 기회가 되면 따로 설명하겠다.
5. 다양한 브라우저와 운영체제 지원
내 개인적인 생각으로 프론트 엔드 개발에 있어 가장 힘든 부분은 사용자의 환경을 내 맘대로 제한할 수 없다는 사실이다. 물론 한 가지 브라우저와 한 가지 운영체제(OS)만을 지원하겠다 작정하고 웹사이트나 앱을 만들 수도 있다. 특히 앱의 경우는 운영체제에 따라 달리 만들어지는 경우가 많아 크게 문제되지는 않지만, 웹사이트의 경우는 다르다. 다수의 고객과 시장 점유율을 목적으로 한다면 다양한 브라우저와 운영체제를 고려해서 어떤 환경에서도 작동되는 사이트를 만들어야 한다. 그러려면 프론트 엔드 개발자는 각 브라우저의 기능과 차이점, 브라우저에서 지원되거나 지원되지 않는 기능엔 어떤 것들이 있는지에 대해 숙지하고 그에 맞는 구현 방법을 찾아야 한다.
다행이 지금은 브라우저들이 웹표준을 많이 따르고 있어서 개발자에겐 좀더 편한 상황이 되었다. 인터넷 익스프로러(IE)가 주류 브라우저였던 시기엔 웹표준을 잘 따르지 않았던 IE 때문에 골치가 아팠던 기억이..
6. 프론트 엔드 라이브러리 개발
라이브러리란 쉽게 말해 특정 기능들을 모아놓은 코드로 여러 소프트웨어나 다른 코드에서 사용될 수 있게끔 설계되고 구현된 코드다. 개인적으로는 라이브러리 개발할 때 가장 보람을 느끼는데, 아마도 다른 개발자들에게 도움이 되는 무언가를 설계하고 구현함으로써 장기적인 기여를 했다고 느끼기 때문인것 같다.
라이브러리 개발은 모든 프론트 엔드 개발자의 업무에 반드시 속하지는 않는다. 주로 프로젝트에 따라 이런 기회가 있기도 없기도 하는데, 라이브러리를 개발할 수 있는 능력은 당연히 개발자가 갖추어야 할 능력이기 때문에 언급한다.
7. 사용자 접근성 관련 기능 구현
접근성은 최대한의 사용자가 웹사이트나 앱을 쉽게 이해하고 사용할 수 있는 정도를 뜻한다. 접근성은 디자인 단계에서 일차적으로 중요하게 다루어져야 하고 구현 단계에서는 그 디자인을 구현하면서 기본적인 접근성 표준을 준수해야 한다. 접근성은 단순히 장애인을 위한 부차적 기능이라고 여겨지는 경우가 있는데 그건 아주 잘못된 생각이다. 접근성을 높이면 장애인 뿐만 아니라 모든 사용자들에게 도움이 되기 때문에 접근성은 가장 중요한 기능으로 간주되어야 한다.
이 정도로 프론트 엔드 개발자가 주로 하는 일을 크게 구분지어 봤다. 사실 실제 회사에선 여기 포함되지 않는 일도 많이 하지만 여기선 프론트 엔드에만 특별히 적용되는 일만을 간추렸다.
프론트 엔드, 백 엔드를 구분하지 않고 풀 스택 (Full Stack)이라는 명칭으로 개발의 모든 영역을 맡아 할 수 있는 개발자를 뽑는 회사들도 많은데, 프로젝트 규모가 작거나 대규모 채용이 힘든 회사들인 경우가 많다. 소위 일당백을 원하는거다. 요즘은 웬만한 규모의 회사라면 프론트 엔드 개발직을 따로 뽑는 추세다. 만약 개발직으로 취직을 하고 싶다면 프론트 엔드와 백 엔드 중 내가 더 관심이 더 있고 재미를 느끼는 쪽으로 촛점을 맞추어 취직 준비를 하는 것을 권한다.
----
프론트 엔드 개발에 대해 더 자세히 알고 싶은 영역을 댓글로 남겨주시면 답변해 드리겠습니다.
'개발자 이야기' 카테고리의 다른 글
Intersection Observer API 써보기 (0) | 2022.06.21 |
---|---|
한국의 조기 코딩 교육 열풍을 보며 드는 생각 (2) | 2021.12.05 |