Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
인생 첫 npm 패키지 배포입니다! ㅎㅎ
#side_projects
3년 전
2,659
3

RusultTs 

최근에 타입스크립트를 공부하기 시작했는데, 이거 참, 제가 가장 좋아하는 러스트와 아아주 약간이나마 느낌이 흡사하더라구요 ㅎ

확실히 모던 랭귀지들은 분위기? 타입과 인터페이스, 철학이 꽤 결을 같이 하는 느낌이었습니다.

최근에 공부한 놈 세 놈, Go, Rust, Typescript 연이어서 해서 그런가, 더 비교가 되었기에 제 느낌에 어느 정도 확신이 있습니다(?). 아무튼 오늘 하루 종일 이놈 붙잡고 끙끙댔더니(코드 짠 건 순식간이었는데 그놈의 웹팩과 제스트, 타입스크립트 삼박자 이루기와 npm 패키지 만드는 법 등으로 건강과 소중한 시간을 다 날려 버렸습니다) 현재 정신이 반쯤 나가 있는 상태로 글을 쓰고 있습니다...

아무튼 제 인생 첫 npm 패키지는 바로 Error-Handling! 입니다!

사실 패키지 자체는 약 한 달 전에 러스트 패키지(우리 Rustacean들은 crate라고 합니다ㅎㅎ) Utils-Results 라는 꼭 같은 Error-Handling 라이브러리를 생에 처음으로 올렸으므로 '인생 첫'이라는 타이틀이 무색하지만, 평소부터 우리 니코쌤과 함께 오질라게 npm install을 뚜드려대면서 나도 언젠가 npm library를 만들어보겠다 싶었던 마음에 온갖 설정 고생들은 다 해 가면서 겨우겨우 올릴 수 있었으므로, 전혀 무색하지 않다고 봅니다.

실상 지금 1.0.0 버전(0.1.0부터 해야지 했다가 npm init으로 만드니 1.0.0 default로 주기도 했고 전체적인 뼈대는 이걸로 고정이겠다 싶어서 바로 1.0.0 버전으로 했습니다) 몇 번이고 CI 돌리고 jest full coverage 돌리고 했음에도 막상 publish한 다음에 다른 프로젝트에서 import 해보니까,

Unexpected Token... 이 망할 잡것들이 연이어서 등장해서 한참을 구글링하다가 순수 타입스크립트 패키지는, 그러니까, 일단 어떤 패키지든 node_modules로 넘어가지니까, 이놈을 막상 사용자측에서 import하고 사용하는 것까지는 문제 없는데... ts -> js 컴파일하는 과정에서 webpack이고 jest고 다 node_modules는 기본 무시 경로로 지정해놔서(dependency지옥의 npm세상에서 당연한 것이었습니다) 어쩔 수 없이 눈물을 머금고 일단 싹 다 무시 경로에서 node_modules를 뺐습니다, 빼고 나니 깔쌈하게 동작하더군요.

제가 Typescript를 배우기 시작한지 진짜 얼마 되지 않아서(한 몇 달 전에 잠깐 만져봤다가 삼일 전에야 제대로 공부하기 시작했습니다), 인터넷 영상 등 보면서 공부하는데, 제 2016년형 듀얼 코어 맥북Air 4년 정도 됐나.. 이놈이 tsc만 돌리면 거의 십 초를 기다려야 해서 한 번 코드를 치고 컴파일 할 때마다 엄마야 답답해 미쳐버리는줄 알겠어서, 정확히 그저께서부터 Gaon 이라는 초-빠른 타입스크립트 Template만들기 프로젝트를 만들기 시작했습니다. 

찾아보니까 어느 우리 젊은 한국 대학생 분께서 러스트로 Typescript 컴파일러를 만드는 프로젝트를 꽤 오래 동안 진행하셨고, 지금은 무려 Nestjs에서조차도 사용하고 있는 바로 swc 가 있더라구요. 그걸 기준으로 해서 뭐 유용한 한방에 모아버릴 수 있는 일종의 통짜 Template을 구축해 봤는데, 진짜 지옥처럼 이건 초심자 입장에서는, doc들이 모조리 설명이 빈약해서 웹팩, 제스트, 컨커런틀리, 노디몬, 리액트 등 이거 저거 하나로 통합시키는 데에 오류를 거짓말 안 치고 수백 번은(심지어 구글링해도 찾기 어려운 것들만) 만난 것 같습니다.. 아니, 요 삼일간 거의 잠도 못자고 이 이 이놈의 타입스크립트 하나로부터 출발해 몸이 성 치가 않아부렸어요. 결국 오늘 방금 완성한 rusultts를 의존성으로 깔쌈히 추가하고 node_modules ignore 해제시켜서 컴파일을 마저 완성시키는 것으로 오류 하나 없이 몽땅 해결했지만 말입니다...

이것도 너무 욕심 부려서 노디몬과 웹팩을 함께 넣고, 리액트 컴프레싱은 어떻게 해야 할지 등의 문제에 직면해 있는데 처음 레포지토리를 만들 직전에 떠올린 아이디어로서 Nestjs처럼 제가 직접 cli를 만들어서 사용자가 커맨드라인에 단순히 단어를 입력하는 것으로 마치 레고를 조립하듯 템플릿을 실시간으로 조절할 수 있게끔 해보려고 합니다. Rust를 이용하면 cli는 식은 죽 먹기로 만들 수 있답니다 ㅎㅎ

...그런데 Rust로 만든 bin 파일을 npm에 어떻게 업로드시킬지를 아직 전혀 모르지만 말이죠.. ㅋㅋ 그냥 js파일을 만들어서, 따로 한방에 설치할 수 있는 .sh 쉘파일을 어딘가에 업로드시켜놓고 npm에 올릴 js파일은 fetch만 해서 다운로드하게끔...? 한다든가.. 전혀 감이 잡히지 않는군요. Rust 프로젝트랑 js프로젝트랑 마구 뒤섞인 swc 레포지토리를 슬쩍 봤는데 정말 감히 잡히지 않아요.. 항상 생각하는 거지만 빅 오픈소스 프로젝트 레포는 폴더 정리부터 너무 복잡해서 짜증나기 그지 없습니다 ㅠ

아무튼 여러 모로 우연과 우연에 엮여서 어찌저찌 코딩에 입문하고 단 하루도 빠짐없이 미친듯이 버그와 상상력에 주체 못해 이것 저것 만들다 보니까 여기까지 와 버렸네요. 내일도 코딩해야 하니까 이만 자야겠습니다 ㅠ 이상, blah-blah였습니다.

3 comments