# 함수형 패러다임을 이용한 안전한 FFmpeg 서버 구현기

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=10482](https://news.hada.io/topic?id=10482)
- GeekNews Markdown: [https://news.hada.io/topic/10482.md](https://news.hada.io/topic/10482.md)
- Type: news
- Author: [kciter1](https://news.hada.io/@kciter1)
- Published: 2023-08-22T13:54:56+09:00
- Updated: 2023-08-22T13:54:56+09:00
- Original source: [present.do](https://present.do/documents/647bdffa5680594095f2aef8)
- Points: 24
- Comments: 4

## Topic Body

함수형 패러다임과 그 요소에 대해 소개하고 애플리케이션 내에서 FFmpeg을 다룰 때 겪을 수 있는 문제점을 함수형 패러다임으로 해결하는 방법을 제시합니다.  
  
* FFmpeg은 미디어 파일에 대해 인코딩, 디코딩을 포함한 여러 기능을 제공하는 멀티미디어 프레임워크  
* FFmpeg을 사용하는 것에 두 가지 문제가 있음  
  * FFmpeg은 소프트웨어라 우리가 만드는 애플리케이션 바깥 세계에 위치함  
    * 우리 애플리케이션에서 원하는대로 통제할 수 없다는 것을 의미  
    * 즉, 사이드 이펙트가 있을 수 있다.  
  * FFmpeg은 명령어들이 한눈에 들어오지 않고 이해하기 어렵다.  
* 이 두 문제를 함수형 패러다임으로 해결할 수 있다고 생각함  
* 함수형 프로그래밍 방식으로 사이드 이펙트까지도 반환값으로 감쌀 수 있음  
* 이해하기 힘든 명령어를 선언적으로 작성할 수 있음  
  * 선언적이고 선형적인 코드로 가독성을 올릴 수 있음  
* 함수형 프로그래밍에선 타입이 중요함  
  * 프로그래밍 세계에서 타입이란 집합  
  * 함수 합성은 타입이 계속해서 변화하는 것  
* 앞서 사이드 이펙트도 반환값으로 감쌀 수 있다고 했음  
  * 펑터와 모나드를 사용하는 것  
  * 새로운 치역을 만드는 행위  
  * 보통 모나드라는 개념은 flatMap이라는 함수로 사용되는 경우가 많음  
* 프로그램의 실행은 성공과 실패 두가지로 끝남  
* Railway-Oriented Programming은 프로그램이 성공으로 갈 수 있게끔 프로그래밍으로 선로를 깔아주는 방법론이자 사고방식  
  * 여기서 Rail이 성공과 실패로 나뉠 수 있는 최소 단위  
* ROP는 Result라는 모나드를 사용함  
  * Success 혹은 Failure로 나뉨  
  * Success에서 Failure로 갈 수 있고 반대로 가는 것도 가능  
  * Failure에서 Success로 가는 것을 보통 Recover 혹은 Rescue라고함  
* 정리하면 모든 성공과 실패에 대한 타입이 Success와 Failure라는 타입으로 추상화 된다는 것  
* ROP 방법론과 Result 모나드를 이용하여 FFmpeg의 각 프로세스를 성공과 실패로 나누는 것이 가능  
  * 이 과정에서 FFmpeg 명령어도 함수를 통해 선언적으로 작성할 수 있음  
  * FFmpeg 명령이 실패할 경우 실패에 따라 분기 처리하는 것도 가능

## Comments



### Comment 18524

- Author: nicewook
- Created: 2023-08-23T11:39:47+09:00
- Points: 2

우와~ 무지 재미있게 보았습니다.   
혹시 발표 영상도 있을까요?

### Comment 18526

- Author: nicewook
- Created: 2023-08-23T11:44:58+09:00
- Points: 3
- Parent comment: 18524
- Depth: 1

찾았습니다. :-)  
https://youtu.be/UXp7hG3vzIU

### Comment 18576

- Author: freedive
- Created: 2023-08-24T13:46:53+09:00
- Points: -1

우미.

### Comment 18578

- Author: roxie
- Created: 2023-08-24T14:23:42+09:00
- Points: 1
- Parent comment: 18576
- Depth: 1

무슨 뜻인가요?
