최신 기술이 우리를 멍들게 한다.

고은연·2021년 12월 29일
18

기술 이야기

목록 보기
3/6

최신 기술

아, 이런 식으로 작성하는 코드는 마음에 들지 않는데, 더 좋은 방법이 없을까?

개발자로 살다보면 이런 경험이 한번쯤은 있을 꺼에요. 그래서 새로운 사상, 사용해보지 않은 언어, 신규 프레임워크를 찾아 헤매게 되죠.
정상이에요. 칼퇴근을 위해 같은 일을 더 효율적으로 하는 것은 엔지니어로서의 본능에 가깝다고 생각해요.

저는 개인적으로 기술 스택을 여러번 바꿨어요. 닷넷 개발자로 시작했고, 자바로 전향했어요. PHP를 겸용했으며, 파이썬을 사용하죠. 가끔 노드 코드를 들여다보기도 해요. DBMS도 그래요. MS-SQL도 써 봤고, 오라클도 사용해 보고, MySQL도 다뤄보고 MongoDB도 경험해 봤죠.
시간이 흐르면서 깨달은 건 최신 기술은 과거의 영광 아래 세워졌으며, 기존의 문제는 해결하지만 새로운 문제를 가지고 온다는 거에요.
그래서 무조건 최신 기술을 탐닉하기보다는, 조금 더 신중해질 필요가 있다고 생각하게 되었어요.

시간을 가지고 검증해라

매일 자고 일어나면 새로운 기술이 나와 있어요. 모두 각자의 사상에 의해 새로운 코드를 작성하고 공개하죠. 스스로 필요하기 때문에 만들어낸 결과물이에요.
하지만 시간의 검증을 받아 살아남는 기술은 굉장히 적어요. 필요없어서일 수도 있고, 발견되지 않았을 수도 있고, 컨트리뷰터들이 스스로 지쳐 그만두었을 가능성도 있죠. 한 때 하이브리드앱 세계를 이끌었던 폰갭을 어도비가 포기한 것처럼요.

그래서 저는 최신 기술이라고 무작정 도입하기보다는, 반드시 이 기술을 사용해야 할 이유가 있을 때가 바로 기술을 도입할 시기라고 생각해요. "사용하고 싶어서" 가 아니라 "이 기술을 도입했을 때 얻어지는 극적 효과"를 생각해야 해요.

모른다고 스트레스 받을 필요 없어요.

개발자 커뮤니티에는 유난히 타인의 의견을 잘 받아들이지 못하는 일부 사람들이 있어요. 엔지니어링 마인드로 가득한 사람들은 매사 판단을 bool 로 하죠. True가 아니면 무조건 False 라고 생각하더군요.
이분들은 본인이 알고 있는 혹은 본인이 사용하는 기술에 대해 잘 모르거나 본인과 의견이 다르다면 왜 그걸 모르나며 비난하는 경우가 종종 있는데요.
특히 신기술인 경우 먼저 접해봤다는 얼리 아답터 분들은 최신 기술을 사용해서 본인의 문제를 해결했으므로 (혹은 지적 호기심을 만족시켰으므로) 다른 사람들도 모두 사용해야 한다고 생각하시는 것 같아요.

하지만 우리네 인생이 늘 그렇듯이 선택은 아주 긴 선 중에 중간쯤 어디일 가능성이 높아요. 다른 사람의 문제를 해결했다고 내 문제를 해결하리라는 보장 같은 건 어디에도 없어요.

얼리아답터의 의견은 겸허하게 받아들이되, 비난은 무시하는 게 정신 건강에 이롭습니다.

우리에게 죄책감을 가지게 해요.

최신 기술 설파자들이 최신 기술을 따르지 않으면 마치 죄를 짓는 것 마냥 상황을 몰아가는 것을 많이 보아 왔어요.

설파자 : 내 기술이 최고에요.
나 : (당신의 현재 상황에는) 그럴수도 있죠.

설파자 : 내 사상을 따르지 않으면 개발 트렌드에 뒤쳐진 데다가 실력이 없는 개발자에요.
나 : 그럴리는 없어요.

왜 다른 사람의 사상에 따르지 않는다고 해서 형편없는 개발자 취급을 받아야 하는지 저는 잘 이해할 수가 없더군요. 합리적인 이유를 가지고 자기 주장을 하는 것이야 얼마든지 가능하지만 동의하지 않으면 죄인이 된다는 건 옳지 않은 일이라고 생각합니다.

최신 기술보다는 개발 사상 논쟁에서 이런 점이 더 도드라지는 경향이 있는데요.
MVC가 유행하기 시작했을 때 MVC 주창자들은 Presentation Logic, Process Logic, Data Logic이 한번에 섞여있는 소위 모델1 형태의 개발자들을 한심한 사람 취급하기 시작했어요. 사실 아주 간단한 페이지에는 굳이 MVC가 필요 없을 가능성이 높은데도요.
MVC를 도입함으로써 프로그래밍은 더 논리적으로 분리되었고 더 큰 규모의 어플리케이션을 구조적으로 구성할 수 있게 되었지만, 알아야 할 것이 더 많아졌고 단순한 HTML 페이지를 만드는데도 무조건 파일이 3개 이상 (실은 중간 레이어들과 미들웨어를 합치면 십여개도 넘을테죠.) 필요한 주객 전도 상황도 만들어졌다는 점에 대해서는 그당시의 강성 MVC 무적론자들은 아직도 입을 다물고 있죠.

다른 사상들도 다들 비슷해요. REST, GraphQL, DDD, ORM ... 본질은 단순한 것을 그럴듯하게 펼쳐놓고 모르면 악당 취급하는 건 나빠요.

장단점을 잘 파악하고 도입해요.

세상에 무조건 장점만 있는 기술 따위는 없어요.
하다 못해 어셈블리어도 "작성하기는 어렵지만 속도는 엄청나게 빠른" 장단점이 있거든요.
동적 타입을 가지는 스크립트 언어들은 개발 속도를 빠르게 해 주지만 디버깅 속도로 개발 속도를 다 잡아먹는다는 단점이 있습니다.
nodejs는 "비동기로 동작함으로써 프로세스 하나에 여러 요청을 처리할 수 있다는 장점이 있지만 사고방식이 비동기로 전환되어야 한다는 치명적인 단점"이 있죠.
DDD는 작은 단위를 잘 개발할 수 있게 해 주지만 애그리게이트 영역끼리의 복합 개념이 섞일 때 혹은 비즈니스 논리가 변경되어서 애그리게이트의 범위가 변경되었을 때는 속수 무책이라는 단점이 가지고 있어요.
복잡하다는 이유로 일부 설정 파일을 제외하고는 JSON에 밀려서 사라져버린 XML도 의미를 추론하지 않고 기술할 수 있는 장점이 있죠.

"이런 기술 혹은 방법론은 장점 있어요." 라는 건 세상에 없어요. 이런 주장은 거짓말이거나 혹은 기술을 주장하는 사람이 처한 상황에서만 그럴 겁니다.

레퍼런스가 없다는 점은 지독한 약점이 됩니다.

신기술이라는 단어는 新기술, 즉 새로운 기술이라는 뜻이죠.
새로운 기술이라는 건 써 본 사람이 상대적으로 적다는 이야기이고, 써 본 사람이 상대적으로 적다는 건 "특정한 문제에 처했을 때 해결해 본 사람이 적다는" 이야기이며, "해결해 본 사람이 적다는 건 찾아볼 참고 자료가 적다는 뜻" 이 되는 것이며, 결론적으로 "신기술을 쓰는 우리도 해결 못할 가능성이 높다"는 의미가 되어요.
신기술을 도입함으로써 생기는 잇점을 레퍼런스 부족이 모두 상쇄하고도 남을 가능성이 꽤 높다고 생각해요.

추가로 신기술을 쓰는 사람이 적기 때문에 구인에도 큰 문제가 있을테죠.

신기술에 무지하란 이야기가 아닙니다.

다만 신중하라는 이야기에요.
어떤 기술이 나왔는지 매일 지켜볼 필요는 없겠지만 요새 유행하는 게 뭔지 가끔 서점이라도 가서 둘러보세요.
가끔 개발자 커뮤니티라도 가서 어떤게 유행하는지 살펴보는 것도 좋아요.
대신 뭔가를 접할 때는 반드시 필터를 장착하세요. 필터의 기준은 "내가 처한 상황에 어울리는가" 입니다. 그리고 장점과 단점이 무엇인지도 잘 살펴보고요.

신기술로 이득을 보는 사람

신기술을 도입해서 이득을 보는 사람은 여러분이 아니라 기술을 파는 사람들일 가능성이 높습니다.
책을 팔 수도 있고, 강의를 팔 수도 있으며, 강연을 다닐 수도 있고 기술 자체를 팔 수도 있습니다.

신기술을 도입하는 사람들은 어떤 이득을 볼까요? 멋진 베타테스터가 될 수 있습니다. 써보고 마구 욕할 가능성 농후

설레발 주도 프로그래밍

실은 최신 기술들 일부를 무턱대고 받아들이는 걸 설명하는 단어가 이미 있어요. 설레발 주도 개발 - Hype Driven Development 이라고 부르죠.
설레발 주도 개발을 피하려면, 베타 테스터가 되기 보다는, 얼리 아답터가 되기 보다는 조금 신중할 필요가 있다고 생각해요.

profile
중년 아저씨. 10 + n년차 웹 백엔드 개발자. 자바 스프링 (혹은 부트), 파이썬 플라스크, PHP를 주로 다룹니다.

8개의 댓글

comment-user-thumbnail
2021년 12월 30일

묘하게 반성하게 되네요 ㅎㅎ
잘 읽었습니다!

1개의 답글
comment-user-thumbnail
2022년 1월 4일

정말 공감가고 좋은글이네요!
집중해서 야무지게 읽었습니다
감사합니당!

1개의 답글
comment-user-thumbnail
2022년 1월 7일

좋은 글 잘 봤습니다!!

1개의 답글
comment-user-thumbnail
2022년 3월 2일

많은 공감이 가는 글이네요..

제 경우는 너무 빨리 신기술을 도입한 경우에 속하는데 19년도인가
베타버전의 flutter를 도입했다가 flutter에 맞는 버전의 dart 언어 라이브러리 중에 희소행렬 연산을 지원하는 것이 없어서 구 버전의 다트 라이브러리를 직접 컨버팅해서 사용했던 기억이.. 흑흑

1개의 답글