2025. 3. 13. 09:09ㆍ개발기록/Youtube Thumbnail Generator
발단
주말에 유튜브 주소를 전달하면 yt-dlp로 음원을 다운로드한 뒤, whisper.cpp을 사용해서 자막을 추출하는 express.js 서버를 만들었다. ChatGPT한테 이것 저것 물어보다가 데이터베이스로 뭘 쓰면 좋을지 고민이었는데, Prisma가 확장성이 좋다는 얘기를 듣고 Prisma로 결정하게 됐다. Prisma를 사용해서 데이터베이스에 파일 경로, 처리상태 등을 저장한 뒤 업무 시간보다 일찍 출근한 김에 노트북에도 환경을 구축해놔야겠단 생각이 들었다.
기억나는대로 환경변수를 설정하고, Docker를 사용해서 Prisma를 실행한 뒤, npx prisma generate를 실행하는 순간 Maximum call stack exceeded라는 에러가 뜨는게 아닌가. 딸랑 에러가 한 줄만 남아서 어떻게 해야할지 도통 감을 잡을수가 없었다.
AI에게 도움을 요청하자
우선 ChatGPT한테 물어보니 현재 사용하고 있는 node 버전은 v22.14.0으로, 최신이라서 문제가 발생할 수 있다는 얘기를 한다. Prisma 역시 ^6.5.0 버전을 사용하고 있었는데, 역시 좀 더 안정적인 버전으로 낮춰보자고 한다. 물론 문제는 해결되지 않았다. 현재의 생성형 AI는 근본적인 문제 해결법을 찾아주는 게 아니라, 학습된 일반적인 문제 해결 방법을 제시해주기 때문에 그런게 아닐까. 아무튼 AI는 크게 도움이 되지 않았다.
지나가던 Prisma 개발자인데요
프로젝트 진행 상황을 X에 조금씩 정리하면서 올리고 있었는데, Prisma와 관련된 문제를 겪고 있다는 내용을 올렸더니 Prisma 개발자분이 무슨 문제를 겪고 있는건지 물어보는 답글을 남겼다. 처음에는 프로필을 안봐서 Prisma 개발자인줄은 몰랐지만, 아무튼.
ChatGPT와 비슷하게 Node 버전을 낮춰보는 방법과, Prisma 버전을 낮춰보는 방법을 제시해줬다. ChatGPT의 힘을 빌려서 이미 둘 다 버전을 낮춰서 테스트해봤지만, 여전히 npx prisma {명령어}를 실행하면 에러가 난다고 답신했다.
이상하다며 혹시 Discord에 지금 겪고있는 문제상황을 공유해줄 수 있냐는 요청을 받았다. 영어를 하나도 못하는 내가 그래도 되는걸까? 싶긴 했지만 지금 문제를 해결하고싶었기에, 야근 후 집에 도착해서 노트북을 켜고 에러 화면과 지금까지의 진행상황을 갈무리해서 올리기 시작했다. 물론 부족한 영어는 ChatGPT의 힘을 빌렸다.
질문을 올리려는 순간 주의문이 눈에 들어왔는데, Prisma debugging & troubleshooting 페이지를 참조해서 디버깅 로그를 함께 올려달라는 게 아닌가? 이런게 있었구나... 터미널에 export DEBUG="*"을 입력해서 환경변수를 설정한 뒤, npx prisma generate를 실행하자 이전과는 달리 에러가 추가된 걸 볼 수 있었다. 우선 질문 내용의 작성이 끝난 뒤에, 다시 한 번 살펴보기로 했다.
디버깅 로그를 통해 의외로 쉽게 해결!
Export DEBUG="*"을 설정하면 어디서 에러가 발생했는지 StackTrace가 출력된다. 아무래도 빌드 결과물이다보니 90000번째 줄이라는 라인 수가 압박이긴 하지만, Vim으로 열면 큰 문제없이 처리가 가능하다. 대충 훑어보니 interpolate에서 String.match를 호출하는 과정에서 에러가 발생한 모양.
에러가 발생한 88371번째 줄을 따라가보니 dotenvExpand 함수 내에 선언된 내부 함수 interpolate에서 envValue라는 변수를 정규표현식에 넣고 돌리는데, 함수 및 변수명으로 미루어보건데 환경변수를 불러온 뒤 정규표현식으로 문자열을 처리하는 과정에서 문제가 발생한 것 같았다. console.error로 envValue를 출력하는 코드를 출력하고 npx prisma generate를 실행해보니, 아니나다를까 환경변수로 설정해놓은 WHISPER_BIN_PATH가 좌르륵 찍혀나온다.
.env에 WHISPER_BIN_PATH=${WHISPER_BIN_PATH}로 설정을 해놨는데, 아무래도 fish shell에 환경변수 설정을 잘못해놔서 그런지 순환참조가 발생한 모양이다. .env에 WHISPER_BIN_PATH와 WHISPER_MODEL_PATH를 하드패스로 지정해주고나니, 문제가 해결됐다.
딱히 아무도 관심가지지 않을 줄 알았던 디스코드 질문글에는 불과 몇십 분 사이에 댓글이 달려서, 부랴부랴 문제가 해결된 것 같다며 현재 상황을 ChatGPT의 힘을 빌려 설명했다. 댓글을 다신 분은 알겠다며, 이슈는 자기가 닫겠다는 내용을 달았다. Prisma 커뮤니티는 엄청 활발하구나... 라는 생각을 했다.
거진 이번 사이드 프로젝트는 ChatGPT Driven Development로 진행하고 있는데, 코드를 작성하거나 구조를 짤 때도 제로베이스인 상황에서는 할루시네이션을 구분하지 못해서 에로사항이 꽃폈다. 어찌됐건 문제상황이 발생했을때는 문제 상황을 파악하는게 중요한데, Prisma debugging & troubleshooting 페이지처럼 공식 문서에 문제를 해결할 방법들이 제시되어있는 경우가 많다보니, 새삼스럽게 공식문서를 읽는 중요성에 대해 생각해본다. :)