컴퓨터를 공부하고자 마음먹은지 N일차

[180일차]프로젝트에 nestjs fastify를 도입하며 느낀점 본문

👨‍💻Personal Log/⛵️Retrospect

[180일차]프로젝트에 nestjs fastify를 도입하며 느낀점

졸린새 2021. 3. 12. 13:36
728x90

기술을 도입하게 된 계기

우선 저 로고부터 봐라 무려 치타다.
프레임워크나 기술들의 로고는 귀엽거나 단순한게 많다.
그런데, fastify는 무려 핵간지 치타다. 그런데 그저 내가 로고만 멋있냐고 도입했냐?(사실일정부분 차지함)
이름에서 느낄 수 있겠지만, 정말 단순히 빨라서이다
스택오버플로우 에서도 정말 빠르다고 했기 때문이다.

기술선택의 이유부터 프로젝트절망의 향기가 스멀스멀 느껴지는 사람이 있을거다..
하지만 똑같은 프레임워크에서 express와 fastify가 양립할 수 있다면, 당연히 fastify를 선택하는게 맞다고 나는 생각했다.
속도가 두배나 차이가 나기 때문이다.
하지만, 유명한 프로젝트에서 fastify를 안고른 이유들이 다 있었다.


커뮤니티 규모의 차이

가장 큰 이유를 꼽자면,
express와 fastify의 커뮤니티 규모를 따지자면 진짜 비교할 수 없다.
express관련해서 스택오버플로우에 검색하면 나오는것이, fastify로 검색하면 나오지않는다.
nestjs에서 사용하려고 하면 더더욱 그렇다.
주로 검색할때 'fastify + 할려고하는것' 이렇게 검색하거나 'nestjs fastify + 할려고하는것'
이런식으로 검색을 하는데,
검색결과의 양이 fastify와 express랑 비교했을때, 진짜 천차만별이다..
그렇다고 공식문서를 찾을려고 하면,


공식문서의 불친절함

우선 nestjs는 정말 내가본 공식문서중 가장 친절했다.
nestjs자체를 배울때는 공식문서의 내용을 습득하고 nest가 시사하는 '규격'이란것에 대해 어느정도 배울 수 있다.
또한, express도 공식문서가 엄청 친절하다.
nest와 express둘다 영어잼병인 나한테 가독성좋고 좋은 공식문서였다.
어느공식문서도 사실 리덕스공식문서와 비교해서는 나한테 다 좋을거다.
그런데 문제는 fastify였다.
nest공식문서 초장에서 fastify와 양립할수있는 기능들이 있다고 하지만,
사실 정말 한정적이다. 그래서 어쩔수없이 fastify기능을 직접 꺼내서 써야하는데,
fastify의 공식문서가 정말정말.. 읽기가 썩 좋지만은 않다.
그래도 리덕스보다 낫긴한데, express의 시원시원한 공식문서.. 그립기만했다


프레임워크 레벨에서의 한정적인 지원

그래 공식문서는 내가 제대로 못읽는걸로 그렇다치자.
fastify는 프레임워크 자체에서 제공하는 라이브러리도 정말 한정적일뿐더러,
지원하는기능도 한정적이다.

session

예를들면 session을 프레임워크레벨에서 지원을 하지않아서,
같은생태계인 라이브러리중에 최대한 좋아요가 많고 비교적 업데이트가 잘되는걸 찾아야 하는데,
그중 하나 골랐던게, api전체요청의 속도를 심각하게 저하시켰다.
처음엔 속도 저하의 원인을 모르다가, 전체요청의 속도가 느려진걸 판단하고,
미들웨어중 범인이 있겠다 싶어서 하나씩 지워봤는데,
아니나 다를까 session의 원인이었다.
물론 다른 방법이 있겠지만, session을 처리하는 라이브러리를 만들어낼 자신이 없어서,
과감하게 포기했다.

mulipart

이미지 업로드기능이 필요한 프로젝트라서,
multipart기능을 활용해서 formdata의 파일을 버퍼로 변형시켜야 되는데,
multipart통신을 fatify는 자체적으로 지원하지 않는다.
결국 fastify-multipart모듈을 다운받아서 활용하긴 했다.


결론

솔직히 정말 힘들긴 했다.
nestjs는 기본적으로 타입스크립트를 사용한다.
타입스크립트에 대한 학습이 제대로 되지않음과 더불어 fastify를 선택했음에,
완전 any스크립트코드가 되어버렸다.
하지만 장점이 없는게 아니다.
진짜 빠르긴 엄청빠르다.
가령 글의 좋아요 요청을 보내거나 post요청을 보낼때도,
기분상.. express보다 빠르다고 느꼈다..!
프론트에서 귀여운 로딩창을 만들었는데 지금은 너무 빨라서 로딩을 렌더할 시간이 없다.

정보가 없음에도 결국엔 검색과 삽질을 통해서 해답을 계속 찾아내며,
프로젝트도 막바지에 들어섰다.
가장 어려울것같았던 문제 두개를 꽤 오랜시간에 걸쳐서 풀어냈다.

적은 문서양과 협소한 커뮤니티지만,
한번쯤은 자신의 프로젝트에 도입해봐도 나쁘지않을것 같다.
그것또한 경험이기에

Comments