# 파일 시스템 'File Filesystem' 공개 (2021)

> Clean Markdown view of GeekNews topic #14603. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14603](https://news.hada.io/topic?id=14603)
- GeekNews Markdown: [https://news.hada.io/topic/14603.md](https://news.hada.io/topic/14603.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-02T10:01:22+09:00
- Updated: 2024-05-02T10:01:22+09:00
- Original source: [mgree.github.io](https://mgree.github.io/ffs/)
- Points: 1
- Comments: 1

## Topic Body

### ffs: UNIX 파일시스템으로 JSON 같은 반정형 데이터를 마운트하는 도구

- ffs는 File Filesystem의 약자로, 반정형 데이터를 파일시스템으로 마운트해서 익숙한 셸 도구로 JSON, YAML 등 트리 구조의 현대적 포맷을 다룰 수 있게 해주는 도구
- sed 같은 문자열 처리로 JSON을 편집하는 것은 좋은 방법이 아니므로, ffs를 사용하면 좋음
- 현재 ffs는 JSON, YAML, TOML을 지원하고 있으며, 더 많은 포맷을 지원할 예정

#### ffs 사용 예제

- `ffs [file]` 명령으로 file.blah를 file이란 마운트 포인트에 마운트하고, 수정된 최종 버전의 파일은 stdout으로 출력됨
- `ffs -m MOUNT file`로 명시적인 마운트포인트를 지정할 수 있음 
- `ffs -o OUTPUT`으로 출력 파일을 지정할 수 있음
- `ffs -i file`로 파일을 직접 편집할 수 있으며, 볼륨 마운트 해제시 결과가 file에 다시 쓰여짐
- 편집시 nose 키의 값이 문자열이 아닌 숫자로 되고, pockets 디렉토리가 오브젝트로 변환되는 것을 확인할 수 있음

#### ffs 설치 방법

- Linux에서는 FUSE가, macOS에서는 macFUSE가 필요
- 단일 실행파일을 다운로드 받을 수 있음
- 소스에서 빌드도 가능

#### ffs에 대해 더 알아보기

- PLOS 2021에서 "Files-as-Filesystems for POSIX Shell Data Processing" 논문 참고
- 데모 영상과 발표 영상 제공

#### 관련 도구 비교

- jq, gron 등은 CLI에서 JSON을 다루기 위한 좋은 도구
- ffs는 다양한 포맷 지원, 익숙한 셸 도구로 편집 가능, 새로운 언어 학습 불필요 등의 장점
- 단, Windows 미지원, FUSE 사용 불가, 검색만 필요할 때, 매우 큰 파일인 경우 등은 ffs가 적합하지 않을 수 있음

### GN⁺의 의견

- JSON, YAML, TOML 등 현대 웹 개발에서 많이 사용되는 반정형 데이터를 다루는데 유용해 보임. 특히 셸 스크립트로 자동화 작업을 하는 경우 강력할 듯
- 단, FUSE 기반이라 성능 이슈가 있을 수 있고, 윈도우 미지원이 아쉬움. WSL에서는 사용 가능할지 모르겠음
- 오픈소스인 만큼 다양한 포맷을 지원하도록 기여할 수 있다는 것이 장점. 사용자 입장에서는 편의성과 생산성 향상에 도움이 될 듯
- sed나 awk 같은 고전적인 텍스트 처리 도구에 익숙한 엔지니어라면 학습 비용 없이 바로 적용 가능
- API 응답을 로컬에 저장해서 디버깅하거나, 반정형 설정파일을 자주 수정해야 하는 경우 유용할 듯

## Comments



### Comment 24850

- Author: neo
- Created: 2024-05-02T10:01:22+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40213731) 
- 사용자가 직접 개발한 libfuse를 Nim으로 래핑하여 'hello' 파일 시스템 예제를 포팅하고, 데이터를 파이프로 전달하고 마운트 포인트를 제공하는 버전을 만듦. 완료되면 stdout을 통해 결과를 씀. 이를 통해 파이프 체인에 인라인으로 사용할 수 있지만 출력을 확실히 가져와야 함.

- 현재 파일 시스템으로 만들 수 있는 다른 것들을 모색 중임. Nimdow 윈도우 매니저용 상태 표시줄을 만들어 개별 파일에 내용을 쓰면 블록이 있는 막대를 출력으로 만듦. 상태 표시줄에 있는 내용을 쉽게 교체할 수 있어 매우 편리함. 

- libvlc를 사용하는 음악 플레이어도 만듦. ID3 태그가 있는 미디어를 읽고 '아티스트별', '앨범별' 등의 폴더를 설정함. 각 파일은 '<트랙 번호> - <노래 제목>'으로 명명되고 실제 파일의 전체 경로를 포함함. 노래를 재생하려면 이러한 파일 중 하나를 'control/current'에 캣하고 'control/command'에 play라는 단어를 씀. 재생 목록 기능과 더 많은 명령어 등이 있지만 기본 아이디어는 이것임. 목표는 초강력 스크립팅 가능한 음악 플레이어를 만드는 것임.

- Unix 계열 OS는 디스크 이미지를 마운트하여 내용을 탐색할 수 있음. 그러나 파일 내부 파일 탐색에 유용한 파일 형식은 더 많음. 압축 아카이브가 그 중 하나임. 일부 파일 관리자는 이를 지원하지만 애플리케이션 수준은 이 기능을 넣기에 최적의 계층이 아님. 파일 유형별 드라이버로 구현할 수 있음.

- 마운트되는 동안 메모리 내에서 실행되다가(tmpfs처럼) 마운트 해제되면 디스크의 단일 파일로 직렬화되는 FUSE 파일 시스템을 찾고 있음. 아카이브 파일을 마운트하는 FUSE 드라이버가 가장 유사하지만 심볼릭 링크와 같은 것은 얻을 수 없음.

- Git 커밋을 파일 시스템으로 마운트할 수도 있음. (링크 참조) 

- Parts-of-file File System도 있음. (Usenix 링크 참조)

- Omar Rizwan의 TabFS를 연상시킴. (링크 참조)

- 2003년에 이런 것을 해봤음. 놀랍게도 빠르고 세분화된 잠금을 쉽게 만듦. 거대한 웹사이트 구축 도구를 위한 웹 템플릿 언어의 사용자별 데이터베이스로 사용했음. 

- JSON 키에 슬래시가 있으면 어떻게 되는지에 대한 질문.

- 이를 통해 파일을 디렉토리 구조로 커밋할 가능성이 열림. 이것이 병합 및 충돌에 어떤 영향을 미칠지 궁금해 함.

- 멋져 보이며 가능한 한 빨리 시도해 봐야겠다는 의견. JSON 파일 내부를 검색하고 탐색하는 데 유용할 것 같음.
