최근에 NPM(Node Package Manager)에 아주 특별한 경험을 통해 패키지를 배포했어요. 바로 Rust 언어로 만든 한글 분리기 'ganadala'인데요, 제가 Rust를 전혀 모르는 상태에서 인공지능과 함께 이 프로젝트를 완성했답니다. 이번 글에서는 그 과정을 공유하고, AI를 활용한 개발과 학습에 대한 저의 생각들 정리해봤어요.
🟦 왜 Rust로 NPM 패키지를 만들었을까?
요즘 JavaScript/TypeScript 생태계에서 Rust나 Go 같은 언어로 백엔드 로직이나 성능이 중요한 부분을 개발하여 NPM 패키지로 배포하는 게 유행인 것 같더라고요. 주로 더 빠른 속도를 얻기 위함이라고 알고 있었는데, 저도 이 흐름에 동참해보고 싶었어요. 그래서 비록 Rust는 전혀 몰랐지만, '속도'라는 키워드에 끌려 Rust로 패키지를 만들기로 생각했어요.
🟦한글 분리기를 만든 계기
한글 분리기 아이디어는 NPM 패키지 중 ckiic라는 라이브러리(https://www.npmjs.com/package/ckiic?activeTab=versions)에서 얻었어요. "나도 이런 걸 만들어보면 재미있겠다!"라는 생각이 들었고, 마침 Rust로 패키지를 만들 계획이 있었으니, 속도라는 장점을 가진 특별한 한글 분리기를 만들어보자고 결심했어요.
🟦Rust? 하나도 몰랐어요!
솔직히 말씀드리면, Rust 언어에 대해서는 아무것도 몰랐어요. 제가 참고한 것은 http://rust-lang.xyz/rust/basic에서 아이디어만 가져오고 실제 코드 작성은 전부 Gemini를 사용했어요
🟦Gemini와 함께한 개발 과정
Gemini에게 다음과 같은 프롬프트를 주었어요.
프로젝트 목표
rust로 js, ts용 패키지를 만들어서 npm에 올릴 꺼야. 왜 하고 싶냐면 npm 패키지를 오픈소스로 만들어 보고 싶었어.
간단하게라도 말이야. 그리고 속도를 빠르게 하기 위해서 rust로 만들고 싶어.
나는 rust언어를 하나도 몰라. 하지만 대부분의 패키지들이 rust로 만들어져서 빠르다고는 알고 있어.
그래서 만드는 핵심 아이디어가 문자열이 한글인지 아닌지 판별해주는 패키지를 만들고 싶어.
문자열을 주면 한글이면 true 아니면 false 이런식으로 말이야.
그리고 한글 문자열을 쪼개는 함수로 만들어보고 싶어.
<https://www.npmjs.com/package/ckiic?activeTab=readme>. 이 패키지 처럼 말이야.
한글 문자열을 쪼개는 기능과, 그걸 역으로 만드는 기능을 패키지로 만들고 싶어.
유지보수성을 높이고 테스트 코드가 필수적이야.
이렇게 프롬프트를 주니, 제가 Rust를 전혀 모름에도 불구하고 라이브러리 코드부터 테스트 코드까지 한 번에 만들어주었습니다. 정말 감탄할 따름이었죠! (멋져요 Gemini)
코드를 완성한 후 NPMJS에 올리려고 보니 README.md 파일이 허전했어요. 그래서 Gemini에게 다시 README.md를 한글판과 영어판 두 가지로 작성해달라고 요청했고, 그 결과 완성도 높은 README 파일을 얻을 수 있었습니다.
처음에는 패키지 이름을 'ganada'로 하려 했는데, 이미 7년 전에 같은 이름의 패키지(https://www.npmjs.com/package/ganada)가 존재한다는 사실을 알게 되어 'ganadala'로 변경했습니다.
🟦AI와 함께한 개발, 그리고 느낀 점
AI를 활용해 간단한 기능을 NPM에 올려보니, 새로운 종류의 '장인 정신' 같은 것이 생기는 것을 느꼈어요. 이전에는 저 혼자 쓸 기능을 만들 때 대충 만들어도 괜찮다고 생각했지만, 다른 사람들도 사용할 수 있는 오픈소스 공간에 제 결과물을 공개하려니 하나라도 더 친절하고 완벽하게 보이고 싶은 마음이 들더라고요. 문서 하나라도 더 신경 쓰고, 더 깔끔하게 만들려고 노력했어요
이 과정을 통해 Rust로 만든 패키지가 NPM에 올라가면 바이너리 형태로 올라가기 때문에 코드를 직접 볼 수 없다는 사실을 알게 되었습니다. 만약 Rust로 만든 패키지의 내부 코드를 보고 싶다면, 반드시 해당 패키지의 GitHub 저장소로 가서 확인해야 한다는 것을 깨달았어요.
하지만 한편으로는, AI가 대부분의 코드를 작성해주었기 때문에 '이게 정말 내 코드인가?' 하는 생각이 들었어요. 제가 Rust를 전혀 모른 상태에서 만들어진 코드이다 보니, 오히려 다른 사람의 코드를 분석해야 하는 상황과 비슷했어요. 이게 과연 공부가 되는 것인지, 아니면 단순히 기능을 만들어내는 도구로만 AI를 활용한 것인지 고민이 되었습니다.
그렇다면 Rust 문법을 직접 배우고 코드를 작성하는 것이 더 올바른 길이었을까요? 그렇게 했다면 단시간에 이 기능을 만들지는 못했을 거예요. 기능을 빠르게 만들어보는 경험을 쌓는 것과 새로운 언어 기술을 깊이 배우는 것 중 어떤 것이 더 효율적인지, 더 다양한 프로젝트를 경험하고 경험을 토대로 선택해야 할 것 같아요.
만약 '배움' 자체에 초점을 맞춘다면 AI의 도움을 최소화하고 직접 부딪히는 것이 좋겠지만, '빠르게 무언가를 만들어보고 싶을 때'는 AI를 적극적으로 활용하는 것이 분명한 강점이 있어요. 저는 빠르게 만들면서도 배움이 있을 것이라고 생각했지만, 지식이 마치 모래처럼 흩어지는 느낌을 받았어요. AI가 생성해준 파편화된 지식들을 다시 모아서 스스로 학습해야 하는 형태가 되는 것이죠.
AI를 활용한 공부 방법은 무궁무진해요. 저처럼 일단 만들고 나서 역으로 분석하며 배우는 방법도 있겠고, 아이디어만 AI에게 얻는 방법도 있을 거예요. 지금은 일단 AI로 만들고 후에 분석하는 형태로 사용하고 있는데, 제가 생각지도 못한 방식으로 코드를 만들어서 도움이 될 때도 있어요. 하지만 제 머리에서 나온 것이 아니다 보니 금방 잊어버리기도 해요. 더 많은 지식을 효과적으로 얻으려면 어떤 방식으로 AI를 사용해야 할지 계속해서 경험을 쌓아가야 할 것 같습니다.
'웹 > Nodejs' 카테고리의 다른 글
| [Node] nodemon이나 tsc-watch에서 파일 변경을 감지하고 다시 시작을 못할 때 (0) | 2024.12.05 |
|---|---|
| [npm] Error: EPERM: operation not permitted, mkdir '\node_modules' 에러가 날 때 (0) | 2023.03.15 |
| npm과 npx의 차이점 (0) | 2023.03.14 |
| 🟩 sequelize에서 bulkUpdate할 때 필요한건 unique 키!! (0) | 2022.12.26 |
| ✅ [Nodejs] Sequelize에서 값 증가,감소 update 하기 (0) | 2022.12.20 |