Skip to content

Commit f1dccbc

Browse files
junwooclaude
andcommitted
docs: add comprehensive user guide and symlink testing documentation
- Add USER_GUIDE.md with complete user-friendly documentation - Quick start guide for installation and setup - URL format examples and best practices - Symbolic link usage guide for Windows users - Security features explanation - Troubleshooting section - Platform-specific file opening behavior - Advanced tips for team collaboration - Add symlink-test-guide.md for developers - Windows symbolic link creation methods (admin & dev mode) - Security test scenarios and validation layers - Potential security improvements with fs.realpathSync - Detailed test cases for symlink attack vectors These guides complement the existing README.md and TESTING.md by providing practical usage instructions and advanced testing scenarios. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent e3b353b commit f1dccbc

File tree

2 files changed

+489
-0
lines changed

2 files changed

+489
-0
lines changed

USER_GUIDE.md

Lines changed: 375 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,375 @@
1+
# File Opener 사용자 가이드
2+
3+
## 📖 소개
4+
5+
File Opener는 웹 브라우저나 문서에서 클릭 한 번으로 로컬 파일을 여는 도구입니다.
6+
`fileopener://` 프로토콜을 사용하여 프로젝트의 파일들을 빠르게 열 수 있습니다.
7+
8+
## 🚀 빠른 시작
9+
10+
### 1. 설치 및 등록
11+
12+
```bash
13+
# npm으로 전역 설치
14+
npm install -g @context-action/fopen-cli
15+
16+
# 프로토콜 등록 (한 번만 실행)
17+
fopen install
18+
```
19+
20+
### 2. 프로젝트 추가
21+
22+
```bash
23+
# 현재 디렉토리를 프로젝트로 추가
24+
fopen add my-project
25+
26+
# 또는 특정 경로 지정
27+
fopen add my-project "C:\Users\username\projects\my-project"
28+
```
29+
30+
### 3. 파일 열기
31+
32+
이제 다음과 같은 URL로 파일을 열 수 있습니다:
33+
34+
```
35+
fileopener://my-project/README.md
36+
fileopener://my-project/src/index.js
37+
fileopener://my-project/docs/guide.md
38+
```
39+
40+
## 📝 URL 작성 방법
41+
42+
### 기본 형식
43+
44+
```
45+
fileopener://프로젝트명/파일경로
46+
```
47+
48+
### 실제 예시
49+
50+
```
51+
fileopener://my-project/package.json
52+
fileopener://my-project/src/components/Header.tsx
53+
fileopener://my-project/docs/api/reference.md
54+
```
55+
56+
### 공백이 포함된 파일명
57+
58+
공백은 `%20`으로 인코딩합니다:
59+
60+
```
61+
fileopener://my-project/my%20file.txt
62+
fileopener://my-project/documents/meeting%20notes.md
63+
```
64+
65+
### 레거시 형식 (하위 호환)
66+
67+
쿼리 파라미터 방식도 지원합니다:
68+
69+
```
70+
fileopener://my-project?path=README.md
71+
fileopener://my-project?path=src/index.js
72+
```
73+
74+
## 🔗 실제 사용 예시
75+
76+
### 마크다운 문서에서 사용
77+
78+
```markdown
79+
프로젝트의 [설정 파일](fileopener://my-project/config.json)을 확인하세요.
80+
81+
자세한 내용은 [API 문서](fileopener://my-project/docs/api.md)를 참조하세요.
82+
```
83+
84+
### HTML에서 사용
85+
86+
```html
87+
<a href="fileopener://my-project/README.md">README 열기</a>
88+
<a href="fileopener://my-project/src/app.js">소스 코드 보기</a>
89+
```
90+
91+
### 브라우저 주소창에서 직접 입력
92+
93+
```
94+
fileopener://my-project/package.json
95+
```
96+
97+
엔터를 누르면 해당 파일이 기본 에디터에서 열립니다.
98+
99+
## 🛠️ 주요 명령어
100+
101+
### 프로젝트 관리
102+
103+
```bash
104+
# 프로젝트 추가
105+
fopen add project-name "C:\path\to\project"
106+
107+
# 프로젝트 목록 보기
108+
fopen list
109+
110+
# 프로젝트 삭제
111+
fopen remove project-name
112+
113+
# 설정 파일 열기
114+
fopen config
115+
```
116+
117+
### 로그 관리
118+
119+
```bash
120+
# 로그 파일 정리 (디스크 공간 확보)
121+
fopen clean-logs
122+
```
123+
124+
### 프로토콜 관리
125+
126+
```bash
127+
# 프로토콜 재등록
128+
fopen install
129+
130+
# 프로토콜 제거
131+
fopen uninstall
132+
```
133+
134+
## 🔒 보안 기능
135+
136+
File Opener는 다음과 같은 보안 기능을 제공합니다:
137+
138+
### ✅ 안전한 접근만 허용
139+
140+
- 등록된 프로젝트 디렉토리 내부의 파일만 접근 가능
141+
- 상위 디렉토리 접근 시도 차단 (`../` 등)
142+
- 절대 경로 접근 차단 (`C:\`, `/etc/` 등)
143+
- 시스템 파일 보호
144+
145+
### ❌ 차단되는 위험한 접근
146+
147+
```bash
148+
# 이런 시도들은 모두 차단됩니다
149+
fileopener://my-project/../../../Windows/System32/calc.exe
150+
fileopener://my-project?path=C:\Windows\System32\notepad.exe
151+
fileopener://my-project/~/Documents/private.txt
152+
```
153+
154+
모든 보안 위반은 로그에 기록되어 추적 가능합니다.
155+
156+
## 💡 고급 기능: 심볼릭 링크
157+
158+
### 심볼릭 링크란?
159+
160+
심볼릭 링크는 다른 파일이나 폴더를 가리키는 "바로가기"입니다.
161+
프로젝트 내에서 자주 사용하는 파일에 짧은 이름으로 접근할 수 있습니다.
162+
163+
### Windows에서 심볼릭 링크 생성
164+
165+
#### 방법 1: 관리자 권한 사용
166+
167+
```cmd
168+
# 1. Windows 키 + X 누르기
169+
# 2. "터미널(관리자)" 또는 "명령 프롬프트(관리자)" 선택
170+
# 3. 프로젝트 디렉토리로 이동
171+
cd C:\path\to\your\project
172+
173+
# 4. 심볼릭 링크 생성
174+
mklink shortcut.md docs/long/path/document.md
175+
```
176+
177+
#### 방법 2: 개발자 모드 활성화 (권장)
178+
179+
개발자 모드를 활성화하면 관리자 권한 없이 심볼릭 링크를 생성할 수 있습니다:
180+
181+
```
182+
1. 설정 앱 열기 (Windows 키 + I)
183+
2. "개발자용" 검색
184+
3. "개발자 모드" 토글 켜기
185+
4. 재부팅
186+
```
187+
188+
재부팅 후:
189+
190+
```powershell
191+
# PowerShell에서 일반 권한으로 실행
192+
cd C:\path\to\your\project
193+
New-Item -ItemType SymbolicLink -Path "shortcut.md" -Target "docs\long\path\document.md"
194+
```
195+
196+
### 심볼릭 링크 사용 예시
197+
198+
```bash
199+
# 심볼릭 링크 생성 후
200+
mklink api-doc.md docs/api/reference/detailed-api.md
201+
202+
# 짧은 URL로 접근 가능
203+
fileopener://my-project/api-doc.md
204+
```
205+
206+
### 안전한 심볼릭 링크 사용
207+
208+
**안전**: 프로젝트 내부 파일을 가리키는 링크
209+
```cmd
210+
mklink quick-readme.md README.md
211+
mklink main-config.json config/production/main.config.json
212+
```
213+
214+
⚠️ **위험**: 프로젝트 외부를 가리키는 링크는 사용하지 마세요
215+
```cmd
216+
# 이렇게 하지 마세요!
217+
mklink outside.txt C:\other-project\file.txt
218+
```
219+
220+
## 🖥️ 플랫폼별 파일 열기 동작
221+
222+
### Windows
223+
- 명령어: `cmd /c start ""`
224+
- 기본 연결 프로그램으로 파일이 열립니다
225+
- 텍스트 파일 → VS Code, Notepad 등
226+
- 이미지 파일 → 사진 앱
227+
- PDF 파일 → PDF 뷰어
228+
229+
### macOS
230+
- 명령어: `open`
231+
- 기본 연결 프로그램으로 파일이 열립니다
232+
233+
### Linux
234+
- 명령어: `xdg-open`
235+
- 기본 연결 프로그램으로 파일이 열립니다
236+
237+
## 🔧 문제 해결
238+
239+
### 파일이 열리지 않을 때
240+
241+
#### 1. 프로젝트가 등록되어 있는지 확인
242+
243+
```bash
244+
fopen list
245+
```
246+
247+
프로젝트가 목록에 없다면:
248+
```bash
249+
fopen add my-project "C:\path\to\project"
250+
```
251+
252+
#### 2. 파일 경로 확인
253+
254+
```bash
255+
# 파일이 실제로 존재하는지 확인 (Windows)
256+
dir C:\path\to\project\your-file.txt
257+
258+
# 또는 PowerShell
259+
Test-Path "C:\path\to\project\your-file.txt"
260+
```
261+
262+
#### 3. URL 형식 확인
263+
264+
```
265+
✅ 올바른 형식: fileopener://my-project/README.md
266+
❌ 잘못된 형식: fopen://my-project/README.md
267+
```
268+
269+
#### 4. 공백 처리 확인
270+
271+
```
272+
✅ 올바른 형식: fileopener://my-project/my%20file.txt
273+
❌ 잘못된 형식: fileopener://my-project/my file.txt
274+
```
275+
276+
### 프로토콜이 인식되지 않을 때
277+
278+
```bash
279+
# 프로토콜 재등록
280+
fopen uninstall
281+
fopen install
282+
283+
# Windows에서 재부팅 필요할 수 있음
284+
```
285+
286+
### 권한 오류가 발생할 때
287+
288+
- 프로젝트 디렉토리 읽기 권한 확인
289+
- 안티바이러스 소프트웨어 예외 추가 검토
290+
- Windows Defender 실시간 보호 일시 비활성화 후 테스트
291+
292+
## 📊 로그 확인
293+
294+
문제 해결을 위해 로그를 확인할 수 있습니다:
295+
296+
### Windows
297+
```powershell
298+
notepad %USERPROFILE%\.fopen-cli\handler.log
299+
```
300+
301+
### macOS/Linux
302+
```bash
303+
cat ~/.fopen-cli/handler.log
304+
```
305+
306+
로그에는 다음 정보가 포함됩니다:
307+
- 파일 열기 시도
308+
- 보안 위반 감지
309+
- 오류 메시지
310+
- 성공/실패 결과
311+
312+
## 💡 활용 팁
313+
314+
### 1. 문서에 파일 링크 포함
315+
316+
프로젝트 README.md에 소스 코드 링크를 포함:
317+
318+
```markdown
319+
## 프로젝트 구조
320+
321+
- [메인 앱](fileopener://my-project/src/app.js)
322+
- [설정 파일](fileopener://my-project/config.json)
323+
- [테스트 코드](fileopener://my-project/tests/app.test.js)
324+
```
325+
326+
### 2. 이슈 트래커에서 사용
327+
328+
GitHub 이슈나 JIRA에서 파일 참조:
329+
330+
```markdown
331+
버그가 발생하는 파일: fileopener://my-project/src/components/Button.tsx
332+
333+
관련 테스트: fileopener://my-project/tests/Button.test.tsx
334+
```
335+
336+
### 3. 코드 리뷰 시 활용
337+
338+
PR 설명에 변경된 파일 링크 포함:
339+
340+
```markdown
341+
### 주요 변경 사항
342+
343+
- [API 핸들러 수정](fileopener://my-project/src/api/handler.js)
344+
- [타입 정의 업데이트](fileopener://my-project/types/api.d.ts)
345+
```
346+
347+
### 4. 팀 온보딩 가이드
348+
349+
신규 팀원을 위한 가이드:
350+
351+
```markdown
352+
## 시작하기
353+
354+
1. [환경 설정 가이드](fileopener://team-project/docs/setup.md)
355+
2. [코딩 컨벤션](fileopener://team-project/docs/conventions.md)
356+
3. [예제 코드](fileopener://team-project/examples/hello-world.js)
357+
```
358+
359+
## 🌐 웹 통합 (고급)
360+
361+
웹 서버와 통합하여 HTTP URL을 자동으로 `fileopener://` 프로토콜로 리다이렉트할 수 있습니다.
362+
363+
자세한 내용은 [fileopener-redirect-worker](https://github.com/mineclover/fileopener-redirect-worker) 프로젝트를 참조하세요.
364+
365+
## 📞 도움말
366+
367+
더 많은 정보는 다음을 참조하세요:
368+
369+
- [GitHub 저장소](https://github.com/mineclover/url-fileopener)
370+
- [npm 패키지](https://www.npmjs.com/package/@context-action/fopen-cli)
371+
- [이슈 리포트](https://github.com/mineclover/url-fileopener/issues)
372+
373+
---
374+
375+
**즐거운 코딩 되세요! 🎉**

0 commit comments

Comments
 (0)