24P by kciter1 2023-08-22 | favorite | 댓글 4개

함수형 패러다임과 그 요소에 대해 소개하고 애플리케이션 내에서 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 명령이 실패할 경우 실패에 따라 분기 처리하는 것도 가능

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

무슨 뜻인가요?