본문 바로가기

IT/개발상식

[개발상식] 라이브러리와 프레임워크에 관한 건

안녕하세요. FoxMon 입니다. 이번 글 제목은 약간 회사 이메일 제목 느낌으로 적어봤어요. 그냥 별 이유는 없어요. 코딩을 할때나 블로그 글을 쓸때나 항상 글 제목이 가장 문제거든요. 어떻게 쓸까. 항상 고민이 된답니다. 그래서 그냥 이렇게 지어 봤어요. 제목에서도 유추가 가능하겠지만, 이번 글의 주제는 라이브러리와 프레임워크 선택에 대한 건 입니다.

항상 프로젝트를 진행할 때 어떤 라이브러리를 선택해야 하는지, 혹은 어떤 프레임워크를 선택해야 옳은 것인지 항상 고민이죠? 그리고 프레임워크나 라이브러리를 선택했다면 기술 면접에서도 항상 질문이 나옵니다.

"왜 이러이러한 라이브러리를 선택하셨나요?"
"왜 이러한 프레임워크를 선택하셨나요?"

사실 이 질문에 대한 답은 없는 것 같아요. 사실 기술 선택이라는 것이 팀의 방향성. 혹은 팀의 숙련도가 가장 중요하다고 판단이 되거든요. 어떠한 기술을 선택하든 아래와 같은 상황을 제외하고는 큰 문제가 될 것 같지 않습니다.

  • 팀원 모두가 모르는 기술을 선택해버린 경우
  • 너무 오래된 기술을 선택하여 해당 기술에 대한 생태계가 너무 작은 경우
  • 혹은 너무 새로운 기술을 선택하여 생태계가 작은 경우
  • 릴리즈 된지 얼마 지나지 않아 버그가 너무 많아 프로젝트 진행이 어려운 경우
  • 더 이상 업데이트 해주지 않는 기술을 선택한 경우

사실 이러한 이유 모두 어지러운 상황이에요. 프로젝트를 진행하면서 문제 해결 상황마다 이러한 이슈에 직면하게 된다면 너무 어지럽거든요. 저도 저 중에서 하나의 상황에 직면해 봐서 너무나도 잘 압니다. 해결 하려고 할때마다 스트레스에요. 그래서 위와 같은 상황을 제외하고는 어떤 프레임워크나 라이브러리를 선택하든 큰 이슈가 없을 것 같아요.

대표적으로 프론트엔드의 경우 Vue vs React 가 가장 많을 것 같은데요. 저는 둘 다 경험을 해봤는데 사실 큰 차이는 없어요. 사람 취향차이 같아요. 물론 생태계는 React가 압도적으로 넓은 것 같습니다. 백엔드의 경우 Express or Nest vs Spring Boot 가 대표적일 것 같네요. 저는 개인적으로 Node를 사랑합니다만 둘도 큰 차이가 사실은 없어요. 물론 CPU 잡이 많은 경우 차이는 있을 수 있겠습니다만 기본적으로 간단한 API를 구성한다 하면 큰 차이는 없을 것으로 판단됩니다. Node는 Node만의 강점을 살려서 대처할 수 있는 방법이 꽤나 많거든요. 아, 물론 회사의 기술을 따라가는 것이 기본적이긴 합니다만, 차후에 여러분에게 선택권이 주어졌을 때 자신의 견해를 자신있게 말할 수 있으면 좋겠다 싶어 저의 생각을 공유하려고 해요.

서론이 꽤 길었는데요. 본격적으로 이러한 기술 선택에 대한 저의 견해에 대해서 간단하게 공유를 해보려고 합니다.


기술이란 무엇인가

프로그래밍을 익히고 경험이 많아 질수록 사실 기술이란 무엇인가에 대한 근본적인 의문이 생기는 것 같아요. 그리고 개발자의 특성상 자신의 기술에 대한 프라이드 및 고집이 웬만큼 존재하기 나름입니다. 저는 우연히 다양한 기술을 접하고 이를 활용하여 프로젝트를 만들어 볼 수 있는 기회가 꽤 많았는데요. 사실 새로운 기술을 접할 때마다 꽤나 스트레스가 있는건 분명합니다. 왜냐하면 저는 저의 주 스택인 JavaScript, TypeScript를 기반으로 하는 프레임워크가 아닌 다른 언어가 베이스인 프레임워크를 사용한다고 하면 이를 배우기까지 꽤나 시간이 오래 걸릴 뿐더러 적응하기 까지도 스트레스가 있거든요.

하지만 이러한 고통도 잠시일 뿐입니다. 다른 프레임워크를 학습하고 이에 적응하는 순간 본인이 원래 익숙하게 하던 스택과 큰 차이가 없다는 것을 느끼기 마련이라고 생각해요. 즉 가장 큰 것은 언어의 차이일 뿐 기본적으로 프레임워크가 동작되는 것은 비슷하다고 생각이 드네요. 물론, SPA와 같은 기존의 개념과 전혀 다른 패러다임이 나온다면 이야기는 달라지겠지만요.

제가 전달하고 싶은 이야기는 "기술 간의 큰 차이가 없다."가 아니라, 자신이 익숙하지 않은 기술이라 하여 기피해서는 안된다는 말을 전해 드리고 싶어요. 간혹 "내가 해보지 않은 기술"이라고 하여 이를 회피하고 익숙하지 않다는 이유로 시도조차 해보지 않는 것은 저는 정말 어리석다고 생각하거든요. 그리고 프로젝트 진행 과정에서 이것이 변명이 되면 안된다고 생각해요. 저는 근본적으로 라이브러리의 도입이나 프레임워크의 도입이 기존의 불편한 방식을 개선하여 사람들이 만들어 놓은 기술이라고 생각하기 때문이에요. 즉 불편한 것을 개선하여 기술이 나온 것인데, 이것이 익숙하지 않다고 하여 적용하기를 망설이고 학습하기를 회피한다면 개선된 기술을 익힐 수 있는 기회마저 날려버리는 것이라고 생각하기 때문입니다.

처음에는 누구나 고통스럽습니다. 그것은 제가 경험해 봐서 더욱 잘 알아요. 하지만 태도는 달리해도 괜찮지 않을까요?


학습

개발자는 끊임없이 학습해야 한다는 말을 자주 들으셨을 텐데요. 왜 그런 걸까요?

사실 위에서 이미 언급한 사항입니다만, 기술의 변화가 끊임없이 일어납니다. 제가 본격적으로 웹 이라는 것을 공부하기 시작했을 때를 생각해 본다면 그때와의 차이점도 정말 많아요. 물론 제가 경력이 오래된 개발자는 아닙니다. 다만 React는 메인 버전이 2개나 올라갔구요. JavaScript를 주로 사용하던 시절에서 현재는 TypeScript를 빼놓을 수 없게 됐습니다. 그 시절에 이미 많은 분들이 ORM의 세계로 넘어가기 시작했네요. 그래서 새로운 신입분들을 보면 대부분 Database의 프로시저를 모르시더군요. 그리고 프론트엔드를 지망한다고 하시면 대부분 React, Vue를 기본적으로 학습하고 오시더군요. 프로그래밍의 패러다임도 많이 바뀌고 있는 추세입니다. 익숙하게 명령형으로 작성하던 신입생 시절의 트랜드와 달리 현재는 선언형 프로그래밍이 대세입니다.

프로그래밍의 트랜드가 바뀌면 당연하게도 코드 작성 방식 또한 달라집니다. 학습을 안할 수가 있을까요? 현재에 안도해도 괜찮을까요?

사실 프로젝트를 완성하는데 있어서 정답은 없다고 생각합니다. 어떠한 방식으로 시스템을 만들든 완성은 되기 마련이고, 동작 또한 문제없이 동작될 수 있죠. 버그 또한 현저히 적을 수도 있겠습니다. 트랜드가 바뀌고 더욱 테크니컬하게 변화했다 한들 이에 비례하여 시스템의 완성도가 올라가는 것 같지는 않아요. 왜냐하면 근본적인 코드 동작은 변함이 없을테니까요. 이러한 이유라면 굳이 새로운 것을 학습하지 않아도 되겠다는 생각이 들기도 합니다. 하지만 저에게 왜 끊임없이 학습하냐 묻는다면 제가 위에서 언급한 이유이기 때문이에요.

어떤 특정한 문제를 마주하게 됐을 때, 기술이란 것이 솔루션이 될 수 있습니다. 즉 저는 라이브러리를 도입하려고 하는 시점에서는 제가 해결해야 하는 특정한 문제가 있고 이를 해결하기 위해선 어떤 라이브러리를 써야 하는데, 이를 이해하기 위해선 이러한 트랜드의 흐름을 놓쳐선 안되겠습니다. 평소에 끊임없이 학습했다면 제가 해결하고자 하는 문제를 더욱 빨리 찾을 수 있을 테고, 해당 기술의 동작 원리도 더욱 빠르고 정확하게 이해할 수 있다고 생각하거든요.

여러분들이 익숙하다고 하는 현재의 기술에 얽매일 필요가 있을까요. 혹은 본인이 현재 익숙한 기술에 대해서 프라이드를 가지되, 다른 기술을 내리 깎아도 괜찮을까요. 전혀 그럴 이유가 없습니다. 물론 한가지 기술에 대해 스페셜리스트가 되는 것도 좋습니다만, 그렇다고 해서 다른 기술을 전혀 몰라도 되는 것은 아니라고 생각해요.


마무리

이번 글을 꽤나 진지하게 작성하게 됐네요. 요즘 많은 생각이 들어서 더욱 그런 것 같네요.

그럼 오늘도 급하게 마무리하도록 하겠습니다.

감사합니다~~!!

'IT > 개발상식' 카테고리의 다른 글

무엇이 개발자를 힘들게 할까  (0) 2024.06.30
[개발상식] 완벽한 프로젝트와 기술 스택  (0) 2024.05.12
프론트엔드, 백엔드  (0) 2024.03.26
의존성 주입  (0) 2024.02.25
Class  (0) 2024.02.06