"터미널에선 되는데 앱에선 왜 안돼" - 6시간 삽질 끝에 찾은 해답
김솔

30분이면 끝날 줄 알았다.
Obsidian 이미지를 Cloudinary에 자동 업로드하는 '간단한' 설정. 6시간 후, 나는 macOS의 환경 변수라는 늪에서 허우적대고 있었다.
(이 글은 Node.js와 터미널을 다뤄본 적 있는 분들을 위한 삽질기입니다. 하지만 '남들이 만든 답이 내게 안 맞을 때' 해결법을 찾는 과정은 누구나 공감하실 겁니다.)
첫 번째 배신: "검증된 조합"이라더니
터미널을 열고 설정을 시작했다. PicGo 앱 설치, Cloudinary 플러그인 연결, API 키 입력. 포트 확인(lsof -i :36677)까지 완벽했다.
드디어 첫 이미지를 붙여넣었다.
![Uploading file...]()
...그리고 침묵.
로그를 확인하니 [PicGo ERROR] Unexpected field가 뜬다.
아, 제발.
구글링 10분. 원인을 찾았다. PicGo는 'pic'을 기다리는데 Obsidian은 'file'을 보낸단다.
"검증된 조합"이라며?
설정에서 필드명을 바꿀 옵션은 없었다. 플러그인 소스를 뜯어고칠까? 아니다. 그건 더 큰 수렁이다. 미련 없이 포기.
두 번째 시도: CLI가 답이겠지
PicGo-Core(CLI 버전)로 방향을 틀었다.
터미널에서 테스트:
picgo upload ~/Desktop/test.png
[PicGo SUCCESS]와 함께 Cloudinary URL이 뜬다!
"됐다!"
자신만만하게 Obsidian 플러그인에 PicGo-Core 경로를 입력했다.
이미지를 붙여넣었다.
Failed request: "Please check PicGo-Core config"
심장이 철렁했다.
터미널에선 완벽하게 돌아가는 명령어가 왜 Obsidian 앱에서만 죽는 거지?
3시간의 미궁: 범인을 찾아서
여기서부터가 진짜 지옥이었다.
경로 문제? → 심볼릭 링크 생성 → 여전히 실패
권한 문제? → 모든 권한 부여 → 여전히 실패
설정 파일? → 수십 번 검증 → 여전히 실패
구글링하다 문득, '설마...' 하는 생각이 스쳤다.
터미널에서 Obsidian을 직접 실행해봤다:
open -a Obsidian
이미지 붙여넣기.
성공.
뭐야, 이게 뭐야?!
진짜 범인: 보이지 않는 벽
그 순간 퍼즐이 맞춰졌다.
macOS의 GUI 앱은 터미널과 완전히 다른 세계에 산다.
우리가 터미널을 열 때마다 자동으로 로드되는 .zshrc 파일. 그 안의 nvm(Node Version Manager) 설정. 이 소중한 환경 변수들을 GUI로 실행한 Obsidian은 전혀 물려받지 못한다.
PicGo-Core는 Node.js가 필요한데, GUI Obsidian은 Node.js가 어디 있는지조차 모른다.
"설정을 확인하라"는 오류는 사실 **"Node.js를 찾을 수 없어!"**라는 비명이었다.
해결: 나만의 다리 만들기
답은 '래퍼 스크립트'였다.
단 8줄:
#!/bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
exec picgo "$@"
이 작은 스크립트가 두 세계를 이어주는 다리가 되었다.
Obsidian에 이 스크립트를 연결하자, 모든 것이 마법처럼 작동했다.
6시간이 남긴 교훈
"터미널에선 되는데 앱에선 안 된다" = 99% 환경 변수 문제다.
이 한 문장을 처음부터 알았다면 5시간 30분을 아꼈을 것이다.
하지만 이 삽질이 내게 가르쳐준 더 큰 깨달음이 있다.
이 과정이 '독학'과 똑같다는 것.
처음엔 누군가의 "검증된" 방법(PicGo App)을 따르다 실패했다.
다음엔 내 방식(PicGo-Core)을 찾았지만 예상 못한 벽(환경 변수)에 부딪혔다.
결국 내 환경을 이해하고, 나만의 해법(래퍼 스크립트)을 만들어야 했다.
우리가 무언가를 배우고 만드는 과정이 딱 이렇지 않은가.
남이 만든 '완벽한 답'이 내겐 맞지 않을 수 있다. 그럴 때 포기하지 않고 나만의 '래퍼 스크립트'를 짜내는 것. 그게 진짜 실력이다.
이제야 나는 Obsidian에서 마음 편히 이미지를 붙여넣는다.
당신의 주말을 지키고 싶다면, 아래 설정을 그대로 따라하시길.
🚀 5분 완성 가이드 (복붙용)
1. PicGo-Core 설치
npm install picgo -g
picgo install picgo-plugin-cloudinary
picgo set uploader # Cloudinary 선택 후 API 정보 입력
2. 래퍼 스크립트 생성 (nvm 사용자 필수)
# 한 번에 복사해서 실행
sudo tee /usr/local/bin/picgo-wrapper > /dev/null << 'EOF'
#!/bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
exec picgo "$@"
EOF
sudo chmod +x /usr/local/bin/picgo-wrapper
3. Obsidian 설정
- Image Auto Upload Plugin 설정 열기
- Default uploader:
PicGo-Core (command line) - PicGo-Core path:
/usr/local/bin/picgo-wrapper
끝.
참고 자료:
이 글이 도움이 되었나요?
관련 글

Day 3-4: 디테일이 만든 차이 - 48시간의 삽질 기록
Claude가 제안한 개선점들을 구현하다 만난 예상치 못한 벽들. Lightbox 재클릭 버그로 새벽 3시까지 삽질하고, macOS PATH 문제로 5시간을 날린 이야기

Day 1-2: 첫 삽질의 기록 - 옵시디언에서 웹사이트까지
프로젝트 초기화부터 첫 배포까지, 48시간 동안 일어난 일들. 위키링크 변환 삽질, 댓글 시스템 설계, 그리고 예상치 못한 Date 객체의 배신

"의사가 코딩을 왜 배워요?" 파이썬 까막눈이 장관상을 받기까지
9개월 전 "나도 저렇게 되면 좋겠다"고 적었던 목표가 현실이 됐다. 하지만 진짜 얻은 것은 상장이 아니었다.