요즘 어떤 프레임워크를 선택해야할까?(2023을 되돌아보며)
개요
2023년은 인공지능이 판을 치던 해였던 것 같다. 매번 새로운 기술이 나왔고, 이를 어떻게 개발해야할지 모르겠다. 이에 대한 생각을 아래에 써내려가고자 한다.
한국의 시장은 안정적인 것을 추구한다.
2023년은 개발자로서 더 고민을 많이 하는 시간이 되었다. 아직 취업을 하고 있고, 현업 시장에 뛰어들지 않았지만, 한국 시장에 대한 내 생각은 “안정적이게 된다면 변하지 않는다” 이다. 안정적인 것은 이 프레임워크, 라이브러리를 통해서 다양한 문제를 해결해왔다는 뜻이다. 그래서 새로운 변화를 무서워 하며, 도전적인 것이 부족하다고 생각이 된다. 예를 들면 web frontend에서는 react, web backend에서는 spring을 쓰는 것이다. 사실 이미 충분히 잘 할 수 있고, 충분히 만족할만한 성능이 나오는데 바꿀 이유는 없다. 그럼에도 불구하고 고착화는 위험하다.
나는 user first 개발자라고 부른다. 그래서 사용자의 경험을 위해서라면 변화에 무릅쓰지 않고 개발하고 싶은 사람이다. 물론 여기서 사용자는 동료 개발자도 사용자라고 생각한다. 그래서 개인 프로젝트가 아니고 다른 프로젝트일 때는 최대한 많이 사용하고, 유명하며 안정적인 프레임워크를 고르고자 한다. 물론 팀들의 개발 능력 상황과 스펙또한 고려를 해야한다.
개발자의 신기술 따라잡기는 어떻게 해야할까?
사실 개발자는 새로운 기술에 대해 민감하게 반응해야한다고 생각한다. 매일 신문을 읽고, 어떤 프레임워크, 라이브러리의 star가 얼마나 있는지, issue는 몇개가 있는지 얼마나 큰 기업이 사용하고 있는지 알아야 한다. 그 뿐 아니라 현재 가지고 있는 기술이 어떤 장점이 있는지, 어떤 목적으로 만들었는지 또한 알아야 한다. 다양하게 알면 알 수록 다른 기술을 습득하는데 도움이 많이 될 수 있다고 생각하여 Readme나 why 정도는 읽는 편이다. 그 중에 관심을 가지고 있는 내용도 추가할 것이다.
다양한 기술들
현재 프론트엔드 시장은 React가 꽉 잡고 있고, 다른 프레임워크가 호시탐탐 그 자리를 잡으려고 노력하는 것 처럼 보인다. 필자가 좋아하거나, 관심을 많이 가지고 있는 프레임워크를 한번 보아보자.
Nextjs(react)
FE시장을 꽉 잡고 있는 react 답게 next는 올해도 혁신적인 일을 저질러 버렸다.
보라 sql이 보이는가? 얼마나 미친짓거리인지 모르겠다면 우리는 FE개발자라는 것을 다시 한번 명심해야한다. 어떻게 BE에서만 보일 수 있는 로직이 FE에 있을 수 있는 것인가? 이 프레젠테이션 이후 많은 사람들이 nextjs를 보고 “php가 되돌아 왔다” 라고 많이 말을 하였다. 필자도 이런 이상한 행보를 보이고 있는 next를 보면서 과연 써야할까 라는 생각을 다시 가지게 되었다.
Nextjs는 아직 실험적인 타이틀을 가지고 있는 React Server Component를 적극적으로 사용하면서 stable한 기술이라고 말한다. Remix의 개발자인 Kent C. Dodds의 Why I Won't Use Next.js을 읽으면 어느정도 끄덕 거리는 글이 될 것이다. 물론 현재 Remix에서도 React Server Component를 도입을 고려하고 있는 중이라고 한다. 현재는 Remix도 React Server Component를 도입했다고 한다.
Astro
FE시장은 Meta 프레임워크이 미래일까?라는 생각이 들정도로 sveltekit, solidstart등 많은 프레임워크가 나오기 시작한다. 이런 와중에 astro는 여러가지 독특한 컨셉으로 자리를 잡고 발전해나가는 중이다. Why Astro라는 글을 보면 좋은데, 다양한 라이브러리를 사용할 수 있는 UI-agnostic이 기능이 너무 매력적으로 보인다.
올해 astro도 파격적인 행보를 보였는데 View Transition이라는 쉬운 페이지 전환 기술을 보여주었다. 물론 js코드로 구현할 수 있지만, 이에 대한 계산은 머리를 지끈거리게 만든다. barba.js, swup에서 또한 마찬가지로 놀라운 전환 기술을 보여주었지만 CSR기준으로 사용하기 매우 귀찮다. 그러나 View Transition은 html에 태그를 넣는 것으로 끝나기도 한다. 아직 더 stable하기 전까지 지켜봐야 하겠지만 심미적 아름다움, 연속적인 경험 만큼은 좋을 것이라고 생각도니다.
React-query
이번에 5.0버전이 추가되면서 코드가 더욱 아름다워 질 수 있다고 생각한다. 4버전때부터 말이 많았던 suspense에 대한 지원은 이제 안정적이게 되었고, 더욱 코드가 이쁘게 보일 수 있게 되었다. 이제 개발자는 서버에 대한 상태인지, 클라이언트가 가지고 있어야 하는 상태인지 판단하여 저장을 하면 될 것 같다.
이를 사용하면 사용할 수록 jotai, zustand, redux, recoil등 state를 관리하는 라이브러리의 필요성을 느끼지 못하고 있다. 특히 useSyncExternalStore나 contextAPI를 사용한다면 웬만큼 크지 않는 이상 크게 사용하지 않을 것 같다.
Tailwind
tailwind가 utility first class CSS라는 개념으로 나온 이후 다양한 CSS툴이 나온 것 같다. gsap을 사용하는 입장으로서 사실 귀찮은 표현 방식이 늘어난 것이라고 생각하지만, markup에서 바로 보일 수 있다는 것은 디자인을 하는데 있어 엄청난 장점을 가질 수 있다는 것 같다. 또한 daisyUI와 같은 라이브러리를 통하여서 미리 사전에 정의되어 있는 UI를 통해 엄청난 개발 속도를 만들어 낼 수 있는 것도 또 하나의 장점이다.
하지만 class의 순서가 보장이 안되어 있어 css를 덮어 씌울 수 없다는 단점이 있다. 역시 이런 불편함은 나만 격는 것이 아니어서 그런지 twin.macro라는 라이브러리가 있다. 사실 npm의 다운로드 수만 보면 많지 않아 사용하기에 무섭지만, kakao의 tailwind 적용기를 보면 꽤나 사용할만한 라이브러리라는 것을 알 수 있다.
또한 shadcn/ui 를 보면 아름답고 미리 만들어진 것을 보여주지 않을까 생각이 된다.
Bun
찐빵이 얼마나 귀여운지 이제야 알았다. 번은 예전부터 사용하기 위하여 기웃거렸고 실제로 개발에 관련해서는 빠른 속도를 보여주었던 것 같다. 이 번이 올해 베타의 탈피를 벗고 1.0이 되었다. 이 bun는 zig라는 생소한 언어를 이용하여 개발을 진행하였고, JavaScriptCore을 이용한다고 한다. 최근 v8을 버리고 다른 javascript 엔진으로 넘어가려는 것 같다. 추가적으로 react-native도 이를 버리고 hermes를 만들기도 했다.
아직은 stable한지는 지켜보아야 할 것 같다. 현재 nodejs가 뿌리 깊고 확고하게 backend(web, desktop)을 잡고 있기도 하고 v8이 워낙 강력하고 안전하기 때문에 취미용으로만 남기며 지켜볼 예정이다.
Rust
갑자기 Rust가 나오는지 물어본다면, 필자는 현재 WASM에 대해 관심을 많이 가지고 있기 때문이라고 말하고 싶다. javascript의 엔진들은 성능이 강력하고 많은 내용을 처리할 수 있지만 실질적인 고성능, 그래픽을 사용하기에는 다소 아쉽다. 이에 미래의 기술로 나온 것 중 하나가 WASM과 WebGPU라고 생각을 한다. 사실 WebGPU는 Three.js가 매우 잘 지원해줄 것이라고 기대하여 깊게 공부하지 않을 것이지만 WASM은 다르다. 이는 기존에 있는 다른 언어들을 WASM의 VM위에서 돌아가게 해주는 것이기 때문에 어디서든 돌아가는 정말 만능의 위치까지 갈 수 있는 기술이다. 그 중 Rust가 가장 아름다워 보이고 미래처럼 보였다.
사실 나는 함수형과 모던한 프로그래밍에 대해 관심이 많이 가지고 있다. 예를 들면 match와 같은 문법 말이다. JS에서는 언어적 한계때문에 할 수 없지만 TS에서는 타입시스템의 도움으로 어느정도 구현이 가능하다. 이런 나의 니즈를 rust는 충족시켜준다. 그뿐 아니라 그 골머리 썩히던 메모리에 대해 잘 처리해주는 녀석이 아닌가? 그래서 이 언어를 계속 지켜보고 있다.
React-Native
flutter와 같은 우아한 코드가 아닌 react-native를 가지고 왔느냐 라고 물어보면 electron, tauri, QT와 같은 크로스플렛폼이 우세일 것 같지만 사실 react-native가 우세하지 않을까 라는 생각을 가지고 있기 때문이다. 일단 flutter은 구글이라는 이슈 때문에 넘어가도록 하겠다.(나는 아무리 그래도 일자리가 사라지는 것은 무서워한다) react-native는 0.72버전부터 성능에 대한 이슈가 정말 좋아졌다. 화면을 그리는데 있어 큰 작업을 하더라도 굳지 않고, 심지어 C++을 직접 부르는 코드까지 작성을 할 수 있다니. 까봐도 좋아질 영역밖에 보이지 않는다.
그리고 마이크로소프트의 PPT, 엑셀, word가 react-native로 만들어졌다는 사실에 대해 알고 있는가? 한번 밀고 가기로 했으면 어떻게든 끌고 가는 마이크로소프트의 정신을 보아하면 react-native의 데스크탑은 electron만큼 탄탄하게 갈 수 있을 것이라고 생각한다. 실제로 facebook의 메신저는 electron에서 react-native로 넘어왔을때 메모리나 성능면에서 엄청난 이점을 가지고 왔다고 발표하기도 했다.
마무리
먼가 주저리주저리 작성한 글이 되버렸지만, 2023년도의 기술이 나름 정리가 되는 것 같다. 2024년도는 더욱 활발하고 재미있는 주제가 많이 나올 것 같다. 23년도는 LLM의 시간이었던 것 만큼 24년도에는 활용하는 기술이 무궁무진해질 것이기 때문이다. 앞으로 24년도의 기술을 기대하며 글을 마치고자 한다.