---
id: 유닉스의 철학과 필터 20260407
created: 2026-04-07 15:02
tags:
---
![[유닉스 철학 (The Unix Philosophy)#1. 핵심 3원칙]]

이중에서 함께 작동하도록 만들어라 가 이번 글의 핵심 논점이다.
특히 이 원칙을 **유닉스 도구는 모두 필터다** 라고 하는 경우가 있는데 이에 대해 자세히 알아보자.


> [!question]
> Q. 유닉스철학중에 모든것은 필터다 라고 했던거때문에 의문이어서 필터는 들어오는 것들을 필터링하고 남은것들을 출력하잖아? 근데 프로그램에는 필터보다는... 함수..? 라고 하는게 더 맞지않아?
> 
> A. 정말 예리하고 훌륭한 통찰입니다! 현대적인 프로그래밍 관점에서 보면 **함수(Function)**라는 표현이 훨씬 익숙하고 정확하게 느껴지실 거예요.
> 
> 하지만 유닉스 철학에서 굳이 **필터(Filter)**라는 단어를 선택한 데에는, 데이터를 대하는 아주 독특한 철학적 이유가 있습니다. 함수와 필터의 차이를 통해 그 속뜻을 풀이해 드릴게요.
> 

### 1. 함수 vs [[필터(Filter)]]: 관점의 차이

두 개념은 수학적으로는 비슷하지만, **데이터를 바라보는 태도**가 다릅니다.

- **함수 (Function):** "입력을 받아서 계산을 수행하고 결과를 반환한다." (수학적, 논리적 실행에 집중)
    
- **필터 (Filter):** "끊임없이 흐르는 데이터의 강물(`Stream`) 속에서, 내가 원하는 것만 남기거나 형태를 바꾼다." (데이터의 흐름과 변형에 집중)
    

유닉스 제작자들은 프로그램을 독립적인 섬(함수)으로 보지 않고, **데이터라는 액체가 통과하는 파이프라인의 한 구간**으로 보았습니다. 그래서 '[[필터(Filter)]]'라는 용어를 쓴 것이죠.

### 2. 필터의 진짜 의미 (단순한 제거 그 이상)

말씀하신 대로 필터는 '걸러내는 것'을 의미하지만, 유닉스 철학에서는 그 의미를 더 넓게 확장합니다.

- **선택 (Selection):** 조건에 맞는 데이터만 통과시킴 (`grep`)
    
- **변형 (Transformation):** 데이터의 형식을 바꿈 (소문자를 대문자로, CSV를 JSON으로 등)
    
- **정렬 (Sorting):** 순서를 바꿈 (`sort`)
    
- **축약 (Reduction):** 데이터를 합치거나 개수를 셈 (`wc`)
    

이 모든 행위를 **입력 스트림을 가공하여 출력 스트림으로 내보내는 행위**로 보고 '필터'라고 부르는 것입니다.

### 3. 왜 '함수' 대신 '필터'라고 했을까? (유연성 때문)

함수는 호출하기 위해 **매개변수 타입, 반환 타입** 등을 엄격하게 맞춰야 합니다. 하지만 유닉스 필터는 오직 **텍스트(Text)** 라는 공통 인터페이스만 사용합니다.

-> Filter 2 -> Output

- **유닉스의 생각:** "네 내부 로직이 함수든 객체든 상관없다. 그냥 표준 입력(`stdin`)으로 들어오는 텍스트를 받아서 가공한 뒤 표준 출력(`stdout`)으로 던져라. 그러면 우리는 파이프(`|`)로 무한히 연결할 수 있다."
    

이 **무한한 연결 가능성**이 바로 필터 철학의 핵심입니다.

## 💡 생각  
즉, 이런점들 때문에 필터라고 칭한다.
1. input도 문자열이고 output도 문자열임.
2. 필터링이 반드시 걸러낸다고 생각하지 말고 일종의 변환기 라고 확장해서 생각함.