이미 쌓인 대용량 gzip 로그를 수정해야 하는데 전체를 메모리에 올릴 수 없어, Node.js 프로그램을 유닉스 파이프라인의 한 조각으로 만들어 처리한 기록이다.
핵심 포인트- 로그는 JSON 문자열로 만들어 일자·시간별로 묶은 뒤 gzip 으로 압축해 저장하는 구조다.
- 기존 로그의 필드를 바꿔야 했는데, 전체를 읽어 변환하고 다시 쓰는 방식은 로그가 커서 동작하지 않았다.
- 그래서 표준 입력을 줄 단위로 받아 변환하고 표준 출력으로 내보내는 프로그램을 만들어 파이프에 끼웠다.
- 스트림을 줄 단위로 다루는 모듈을 써서, JSON 을 파싱하고 원하는 처리를 한 뒤 다시 쓰기만 하는 단순한 코드가 됐다.
- Node.js 만으로도 전부 할 수 있지만, 파이프의 특성상 한 프로그램이 한 가지 일만 할수록 응용하기 편하다는 점을 강조한다.
상세 정리- 변환 예시는 기존 필드 형태를 다른 형태로 바꾸는 작업이며, 줄 단위 처리라 상태를 들고 있을 필요가 없다.
- 조합의 이점을 구체적 사례로 보여준다. 파일이 로컬이 아니라 S3 에 있다면 파이프라인의 앞단만 바꾸면 되고 변환 프로그램은 그대로 쓴다.
- 압축 해제·변환·재압축을 각각 다른 명령이 맡으므로, 어느 한 단계만 교체해도 나머지가 영향을 받지 않는다.
왜 읽나메모리에 다 올릴 수 없는 로그를 일괄 변환해야 하는 개발자에게, 전용 스크립트를 짜기보다 파이프 한 조각으로 만드는 접근을 보여준다.