Go 파일 시스템 인터페이스 핵심 개념 요약
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Go 언어로 파일 시스템 작업을 수행하는 개발자, 특히 웹 애플리케이션에서 파일 처리가 필요한 경우
핵심 요약
fs.FS
인터페이스는Open(name string) (File, error)
단일 메서드로 구성되어 파일 시스템 작업을 표준화File.Close()
는 반드시defer
로 호출해야 하며,ValidPath(name string)
로 사용자 입력 경로 검증 필수ErrNotExist
,ErrPermission
,ErrInvalid
와 같은 semantic error type을 사용해 오류 처리를 구분해야 함
섹션별 세부 요약
1. fs.FS 인터페이스 정의
fs.FS
는 모든 파일 시스템 구현체가 준수해야 할 계약(contract)을 정의Open
메서드는 경로를 받아File
인터페이스를 반환하거나 오류를 반환- 경로 검증은
ValidPath
함수를 사용, UTF-8 인코딩, 앞슬래시(/), 빈 요소/.. 요소 제거 등 규칙 적용
2. File 인터페이스의 핵심 메서드
Stat()
: 파일 메타데이터 반환(파일 읽기 없음)Read([]byte) (int, error)
:io.Reader
와 동일한 세마포트Close()
: 리소스 해제 필수,defer
로 확실히 호출
3. 경로 유효성 검증과 보안
ValidPath
는 경로 탐색 공격 방지,../../../etc/passwd
와 같은 해킹 시도 차단- 사용자 입력 경로는 애플리케이션 경계에서 검증, 파일 시스템 처리 내부에선 검증 X
4. 오류 처리 패턴
errors.Is(err, fs.ErrNotExist)
로 오류 유형 확인ErrNotExist
: 파일/디렉터리 없음 처리,ErrPermission
: 권한 부족 시 재시도 또는 권한 부여 로직 적용
5. 리소스 관리와 defer 사용
- 다중 파일 처리 시
defer
사용을 권장,for
루프 내defer
누적 방지 func() { ... }()
형태로 즉시 종료 처리 가능
6. FileInfo 인터페이스 활용
Name()
: 파일명만 반환, 전체 경로는 별도 추적Mode()
: 파일 유형(일반 파일, 디렉터리, 심볼릭 링크) 확인Size()
: 일반 파일은 바이트 크기, 디렉터리/특수 파일은 시스템 종속
결론
- 파일 시스템 작업 시
ValidPath
로 경로 검증,defer
로 반드시 파일 종료 처리 ErrNotExist
,ErrPermission
등 semantic error type을 사용해 구체적인 오류 처리 로직 구현FileInfo
의 메타데이터를 활용해 파일 유형/크기/시간 정보를 활용한 안정적인 파일 처리 로직 개발 권장