"터미널에선 되는데 앱에선 왜 안돼" - 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 객체의 배신

디자인 감각 제로, AI 도구 3개로 랜딩페이지 3시간 만에 완성한 방법
mobbin에서 레퍼런스 훔치고, AI Studio에서 코드 뽑고, Antigravity로 Next.js 변환. 디자인 못해도 됩니다.