Rapg: TUI 기반 시크릿 매니저
Source: Dev.to
우리는 모두 그런 경험을 해봤습니다. 새로운 프로젝트에 합류했을 때 가장 먼저 듣는 말이:
“Slack에 고정된 메시지에서
.env파일을 확인해 주세요.”
또는 드라이브 여기저기에 흩어져 있는 여러 개의 .env.local 파일 때문에 실수로 GitHub에 커밋할까 두려워합니다.
개발자로서 디스크에 평문 비밀을 저장하면 안 된다는 것을 알지만, “정식” 엔터프라이즈 솔루션은 로컬 개발에 너무 무겁기 때문에 매일 그렇게 하고 있습니다.
그래서 저는 Rapg를 만들었습니다.
Rapg란?
Rapg는 터미널에서 동작하는 개발자‑우선 비밀 관리자입니다. 개인 비밀번호 관리자와 DevOps 비밀 저장소 사이의 격차를 메워줍니다.
텍스트 파일을 관리하는 대신, 비밀을 안전한 로컬 금고에 저장합니다. 애플리케이션을 실행해야 할 때 Rapg는 해당 비밀을 프로세스 환경에 직접 주입합니다.
텍스트 파일 없음. 실수로 커밋되는 일 없음. 오직 코드만.
핵심 기능: 프로세스 인젝션
Rapg의 핵심 철학은 비밀은 메모리 안에만 존재해야 한다는 것입니다.
.env 파일을 읽어들이는 대신, 명령어를 rapg run으로 감싸기만 하면 됩니다:
# Before: 무시하도록 설정된 파일에 의존
$ npm start
# After: 비밀이 실시간으로 주입됨
$ rapg run -- npm start
이 명령을 실행하면 Rapg는:
- 금고를 잠금 해제합니다(캐시되지 않았다면 마스터 비밀번호를 요청).
- 현재 환경에 필요한 비밀만 복호화합니다(예:
DB_PASSWORD,STRIPE_KEY). - 해당 변수들을 환경에 추가한 뒤
npm start프로세스를 실행합니다.
비밀은 디스크에 절대 기록되지 않으며, 프로세스가 종료되면 비밀도 사라집니다.
현대적인 TUI
CLI 도구는 사용하기 힘들어서는 안 됩니다. Rapg는 Bubble Tea로 제작돼 아름답고 키보드 중심의 인터페이스를 제공합니다.
- 검색: 비밀을 즉시 찾을 수 있습니다.
- 생성: 강력하고 무작위인 비밀번호를 만들 수 있습니다.
- 복사: 휴대폰을 꺼내지 않고도 2FA/TOTP 코드를 복사합니다.
- 감사: 금고 내 비밀번호 재사용 여부를 검사합니다.
내부 구현: 은행 수준 보안
보안에 민감한 분들을 위해 Rapg는 Zero‑Knowledge Architecture를 따릅니다:
- Argon2id – 마스터 비밀번호는 절대 저장되지 않습니다. Argon2id(RFC 9106)는 암호화 키를 파생시켜 무차별 공격을 계산적으로 비싸게 만듭니다.
- AES‑256‑GCM – 모든 데이터는 인증된 암호화 방식으로 보호되어 기밀성과 무결성을 보장합니다.
- Memory Protection – memguard를 사용해 민감한 키가 디스크에 스와핑되거나 다른 프로세스에 의해 읽히는 것을 방지합니다.
고급 도구
보안 감사
2018년에 만든 같은 비밀번호를 아직도 쓰고 있나요?
$ rapg audit
⚠️ 재사용 감지! 다음 비밀번호가 여러 곳에서 사용되고 있습니다:
...
마이그레이션
다른 도구에서 옮겨오나요? CSV로 가져오거나 .env(정말 필요할 경우)로 내보낼 수 있습니다.
$ rapg import lastpass_export.csv
사용해 보기
Rapg는 오픈소스이며 Go로 작성되었습니다. 지금 바로 설치해 보세요:
go install github.com/kanywst/rapg/cmd/rapg@latest
금고를 초기화하고 첫 비밀을 추가한 뒤, .env 파일이 어디에 있는지 고민할 필요가 없습니다.
여러분의 피드백을 기다립니다! 저장소를 확인하고, 유용하다면 별을 눌러 주세요. 버그가 있으면 이슈를 열어 주세요.
