웹이 전례 없는 혼란을 겪고 있다고 많이들 이야기한다. 하지만 생각해보면, 데스크탑에서 모바일로 패러다임이 이동할 때에도 웹은 혼란을 겪었다. 그러던 게 이제 웹인 듯 웹 아닌 웹 같은 것들이 많이 생겨나면서 이게 웹이냐 앱이냐, 웹이냐 임베디드냐 하는 등의 다양한 혼란이 생겨났다.
사실 이런 과정은 특정한 기술이 발전하면서 당연히 발생하는 문제에 가깝다. 나는 이런 변화에 대해 매일 긍정적인 자세로 임하고 있다. 내가 가르치는 내용들도 HTML이나 CSS가 버전이 올라가면서 하나하나 수정되어가고 있고, Float로 레이아웃을 가르치던 걸 Flexbox로 가르친다던가 하는 등의 최신 기술을 최대한 반영하려고 노력하고 있다. 프론트엔드 라이브러리/프레임워크도 계속 발전을 이루고 있기 때문에, Angular냐 React냐 Vue.js냐 하는 등의 다양한 논쟁은 회사에 가서 하길 바란다. 솔직히 개인적으로는 가장 본인이 원하는 걸 쓰는 걸 권장한다.
오늘은 기술의 발전과 더불어 혼란을 겪고 있는 많은 웹 개발자들에게 이상한 나라의 웹이라는 주제로 이야기를 해보고 싶다.
기술의 발전 =/= 개인의 발전
어느 날 갑자기 기존의 패러다임을 완전히 뒤엎는 완벽한 (그런 일은 없지만) 프레임워크나 라이브러리가 나와서 전 세계 사람들의 주목을 받고 있다고 치자. 기술은 분명히 발전했다고 생각할 수 있다. 하지만 그걸 개인이 사용하는 건 의무가 아니다.
내가 요즘 외부 세미나, 혹은 강의를 나가면서 느끼는 가장 큰 공기의 차이는 “모두가 새로운 기술을 좋아하지는 않는다”였다. 사실 나는 기술을 전파하고 싶어 하는 사람으로서 ‘더 나은 새로운 기술을 모두가 사용하면 더 나은 미래를 만들 수 있지 않을까?’라는 생각을 했지만, 실제로 새로운 기술을 습득해야 하는 개인에 있어서는 그 자체만으로도 큰 부담이 될 수 있다는 점을 간과하고 있었다.
그럼에도 불구하고 새로운 기술을 배웠을 때 얻는 이점이 그렇게 하지 않는 이점보다 훨씬 더 크다. 그래서 대부분의 사람들은 새로운 기술을 배우고자 한다. 그런데 새로운 것을 배우는 상황에서 기존 일정에 쫓기게 되는 일이 벌어진다면, 사태는 심각해진다. 어찌 됐든 사용했으니 쓸 줄은 알지만, 이 기술이 어떻게 동작하는지에 대해서는 심화된 지식이 전혀 없는 이상한 상황이 발생하기도 한다.
그런 상황에서 펼쳐지는 것이 ‘이상한 나라의 웹’이다. 누군가는 새로운 기술을 먼저 접해서 그 기술의 장단점에 대해 어느 정도 이해한 상태로 도입하기를 희망하겠지만, 누군가는 새로운 기술을 늦게 접해서 그 기술의 장단점 혹은 사용법마저 모르는 상황이다. 그런데 갑자기 제 3자가 프로젝트에 그 기술을 접목시키려 한다. 그러면 그 기술을 사용함으로써 얻을 수 있는 장점은 오히려 죽고 단점이 극대화되면서 결국 “이걸 왜 사용해?”라는 상황에 놓이는 경우도 꽤 보인다. 다행히 나는 그 상황에서 누군가(사랑합니다)의 도움으로 잘 극복한 케이스다. 그럼 둘의 간극을 어떻게 메우면 좋을까?
우선 내가 추천하는 방법은, 조금 더 단순한 방법을 이용해서 그 기술의 장단점에 대해서 명확히 이해시킨 후 토이 프로젝트를 진행해보는 것이다. 최근에는 Google Firebase나 AWS lambda 같은 서버에 대해 높은 이해도가 있지 않더라도 서비스 자체의 코드에만 집중하여 개발할 수 있게 하는 다양한 도구들이 나와 있다. 그런 도구들을 잘 활용하여 기술이 어떻게 동작하는지 우선 파악하게 하는 것이다. 블로그를 생성하는 게 가장 쉽기 때문에 블로그를 만드는 걸 추천한다.
물론 그 기술을 반드시 익힐 필요는 없다. 하지만 어떤 기술을 동작시켜야 한다면, 그 기술이 어떤 특징과 장단점을 가지고 있는지에 대해 알고 사용하지 않는 것과 모르고 사용하는 것은 명확히 다르다. 게다가 특정한 기술이 새로 나왔을 때 그 기술에 대해 기본적인 지식을 가지고 있는 건 개인의 성장에도 큰 도움이 된다.
“우리 회사가 신기술을 사용하지 않아서 너무 싫다.” , “너무 뒤처지는 거 같다” 같은 생각은 잠시 접어두는 걸 권장한다. 신기술을 사용하는 게 반드시 정답은 아니다. 신기술을 적정한 시점에 적정한 서비스에 적절히 녹여내야 신기술의 시너지가 100% 이루어진다. 반드시 신기술을 써야 좋은 거야! 같은 건 너무나 잔인한 생각이다.
비주류
대체로 새로운 기술을 도입하는 건 리스크가 있고 비용 대비 만족도가 높지 않을 가능성이 비교적 높다. 그래서 대체로 주류 사업에서 많이 동떨어져 있다. 사실 새로운 기술을 도입하지 않는다고 해서 기존 시스템이 잘 돌아가지 않는 것도 아니며, 새로운 기술을 도입함으로써 느끼는 체감은 개발자가 더 크게 느낀다. 유저는 의외로 적게 느낄 수 있다. (물론 PWA나 AMP 같은 방법론들은 도입 즉시 유저가 체험할 만큼 빨라지거나 달라진다)
대표적으로 JSP 기반으로 잘 구현되어 있는 페이지를 Rest API로 전부 변경하고 React나 Angular 등을 이용해 페이지를 구현해야 한다고 하자. 그 어려운 걸 전부 진행하고 났더니 사람들이 “굳이 그렇게 해야 해?”라고 생각할 수 있다는 것이다. 실제로 개발에서 “반드시 그렇게 해야 해”라는 건 보안적인 이슈가 있다든가 여러 가지 if 문에 의해서 만들어지는 것이었지 처음부터 “반드시 그렇게 해야 해”라는 건 의외로 많지 않다.
그래서 나는 애초에 그런 기술을 도입해나가는 과정에서 여러 가지 고민을 해야 한다고 생각한다. 대표적으로는, 기술을 도입하는 이유가 있어야 한다는 것이다. 그게 단순히 유행에 편승할 수도 있겠지만, 회사 내부적인 사정, 유지보수를 고려하거나 IE를 대응해야 하는 경우, 우리가 만들어야 하는 제품에 가장 어울리는 기술, 빠른 개발을 위해서 등등 다양한 이유로 인해 기술을 선택할 수 있다.
기술을 먼저 선택하고 이유를 선정하는 것만큼은 피하는 게 좋을 거라 생각한다. 기술은 어디까지나 어떻게 개발할지 결정하는 수단이다. 결국은 유저가 어떻게 만족하고 개발자가 어떻게 유지 보수하는가의 줄다리기 과정이다. 이에 대해 가장 나은 기술을 선택하는 게 우리가 해야 하는 기술 도입 방법이리라 생각한다.
하지만 이상한 나라에서는 어디선가 들어본 지식으로 개발을 하는 경우가 꽤나 많다. “반응형 웹디자인으로 하면 PC/Mobile이 다 대응된다던데 우리도 그렇게 하면 안 되나?” 같은 류나, “Angular가 개발하기 편하다던데 이번에 새로 하는 프로젝트 Angular로 하면 빨리 개발할 수 있지 않으려나?” 같은 류.
실제로 자세히 알지 못하는 경우에는 저렇게 기술을 선정해나갈 수 있다. 하지만 더 넓은 범위에서 기술의 장단점을 파악하고 현재 내가 개발해야 하는 환경에 따라서 반응형 웹 디자인을 쓸지 서버 분기 처리를 할지 결정해야 한다. Angular냐 React냐도 마찬가지로, 내가 만드는 서비스의 특성을 고려하여 가장 어울리는 걸 선택하는 것이 좋다.
위에서도 언급했듯, 신기술을 쓰는 게 반드시 좋은 건 아니다. 만들어진 지 10년도 더 된 jQuery 1.x 버전을 IE 대응을 위해 여전히 사용한다거나 여러 가지 환경을 고려했을 때 최신 프레임워크나 라이브러리 사용이 어려워 옛 버전을 사용하거나 할 수 있다. 그런 부분에서 너무 최신 기술에 맹신하기보다는, 기존의 기술과 새로운 기술의 차이점을 잘 이해하고 어떻게 녹여낼 수 있을지 고민해보는 것도 좋은 방법이리라.
마지막으로
이 글을 쓰고 있는 나 자신도 마찬가지로 프론트엔드 개발자이다. HTML / CSS를 전문적으로 하기 때문에 JS를 이용한 개발은 마냥 잘한다고 말할 수는 없다. 하지만 이 글을 쓰는 이유는, 얼마 전에 올라왔던 일련의 글들이나 “최신 기술을 공부하기가 너무 힘들어요” 같은 류의 다양한 이야기를 들었기 때문이다. 그런 부분에 대한 잘못된 인식을 고치고 싶었다.
최신 기술은 좋을 수도 있다. 하지만 너무 맹신하지는 말자. 또 자신이 신기술을 모른다고 너무 두려워하지 말자. 우리는 모두 기술의 발전 위에서 움직이는 개발자이기 때문에, 누구보다 더 신중하고 덤덤하게 그 변화를 받아들인 뒤 함께 발전시켜나가야 한다. 그런 모습이 진정 뛰어난 개발자가 아닐까 생각해본다.
원문: 조은의 브런치