WPML

요즘 개발자들 사이에서 함수형 프로그래밍이 뜨거운 주제로 떠오르고 있는데, 그럴 만한 이유가 있습니다. WPML 4.5 버전은 웹사이트를 자동으로 번역하는 옵션을 도입한 대규모 프로젝트였습니다. 저희에게는 이때가 함수형 프로그래밍으로 전환하기에 적절한 시기이기도 했습니다. 이 과정에서 저희가 배운 점을 소개합니다.

함수형 프로그래밍이란?

함수형 프로그래밍이 코드를 더 읽기 쉽게 만들고 테스트하기 쉽게 해준다는 이야기를 들어보셨을 것입니다. 하지만 함수형 프로그래밍을 완전히 이해하려면 관련 개념을 파악하는 것이 중요합니다.

우선, 함수형 프로그래밍은 함수를 사용하여 소프트웨어를 구성하고 여러 함수를 합성하여 더 복잡한 함수를 만드는 데 중점을 두는 프로그래밍 패러다임입니다. 함수형 프로그래밍은 코드의 성격을 더 선언적으로 만듭니다. 프로그램 상태를 업데이트하는 일련의 명령문을 나열하는 대신 원하는 결과를 표현합니다.

여기서 사용하는 함수, 특히 순수 함수(pure functions)에 주목해야 합니다. 순수 함수는 데이터를 받아 데이터를 반환하지만, 다른 부작용(side effects)은 발생시키지 않습니다. 동일한 매개변수를 전달하면 동일한 결과를 얻기 때문에 함수를 테스트하기가 매우 쉽습니다.

간단히 말해, 함수형 프로그래밍에서는 출력이 입력에 따라 달라집니다.

함수형 프로그래밍을 선택한 이유

WPML은 크고 복잡한 프로젝트입니다. 최근까지 저희는 이러한 복잡성을 관리하기 위해 객체 지향 프로그래밍(OOP)을 사용해 왔습니다. 가장 큰 과제 중 하나는 모든 프로젝트에 대해 테스트 코드(단위 테스트)를 작성하는 것입니다. 테스트할 수 있는 코드를 작성할 때는 변경 사항이 기존 코드를 망가뜨리지 않도록 해야 합니다.

OOP 코드를 단위 테스트하는 데는 한계가 있습니다. 클래스를 독립적으로 테스트하려면 코드 종속성을 모의 객체(mock)로 만들어야 합니다. 결과적으로 테스트가 크고 복잡해집니다.

함수형 프로그래밍의 주요 초점은 “무엇을 해결할 것인가”라고 합니다. 반면 객체 지향 프로그래밍은 “어떻게 해결할 것인가”라는 방식을 취합니다. 이 점을 고려할 때 함수형 프로그래밍이 저희가 직면한 몇 가지 과제를 극복하는 데 도움이 될 수 있을 것 같았습니다.

진행 과정

함수형 프로그래밍을 이야기할 때 PHP가 가장 먼저 떠오르는 언어는 아니지만, 함수형 스타일을 도입할 수는 있습니다. 예를 들어, WordPress를 확장할 수 있게 해주는 훅과 필터는 함수를 사용하여 WordPress 기능을 재정의합니다.

아쉽게도 PHP에서 더 함수형에 가까운 패러다임을 사용하기 위한 표준 라이브러리는 없습니다. 여러 라이브러리를 검토했지만 함수형 스타일로 표현력 있는 코드를 작성하는 데 정확히 필요한 라이브러리는 없었습니다. 그래서 대신 저희만의 라이브러리를 직접 작성하기로 했습니다. 다양한 곳에서 영감을 얻었지만, 특히 더 성숙하다고 판단한 Javascript 라이브러리에서 많은 아이디어를 차용했습니다.

함수형 프로그래밍은 다른 패러다임과 접근 방식이 다르기 때문에 함수형 프로그래밍 패러다임으로 전환하는 것은 사실 큰 변화입니다. 코드를 작성하고 문제를 해결하는 방식에 대한 사고의 전환이 필요합니다. 명확하고 간결하며 표현력 있는 코드를 작성하려면 많은 연습이 필요합니다.

효과가 있었을까요?

분명히 효과가 있었다고 생각합니다. 함수형 프로그래밍에는 저희에게 유리하게 작용하는 몇 가지 특징이 있습니다.

  • 더 나은 코드 구조
  • 더 표현력 있고 간결한 코드
  • 코드 중복 감소
  • 함수 크기가 작아져 테스트 및 재사용이 용이함
  • 함수 합성 가능
  • 테스트 시 모의 객체(mocking) 사용 감소
  • 재사용 가능한 모의 객체 라이브러리 개발됨

물론 완벽한 것은 없습니다. 함수형 프로그래밍은 더 간결하고 예측 가능하지만, 특히 익숙하지 않은 경우에는 다음과 같은 단점이 있습니다.

  • 디버깅이 더 어려움
  • 변경이 더 어려움 – 빠른 변경을 도입하기보다 변경 사항을 신중하게 고려해야 하므로 장점으로 볼 수도 있음
  • 가파른 학습 곡선

시도하는 것을 두려워하지 마세요

함수형 프로그래밍의 인기가 단순한 유행 이상이라는 것은 말할 필요도 없습니다. 그 특성상 함수형 프로그래밍은 기계 학습 및 데이터 분석과 같은 작업에 매우 적합합니다. 그 결과, 다양한 규모의 기업이 함수형 프로그래밍에 관심을 보이거나 전환을 시작했습니다. 그렇다고 객체 지향과 영원히 작별해야 한다는 의미는 아니지만, 함수형 프로그래밍을 시도해 볼 가치는 충분합니다. 결국 사용하지 않게 되더라도 개발자로서 한 단계 성장할 가능성이 큽니다.

더 자세히 알고 싶다면 Composing Software 블로그 게시물 시리즈부터 시작해 보는 것을 추천합니다.

더 깊이 파고들 준비가 되었다면 저희의 FP 프로젝트 리포지토리를 살펴보세요.

코딩에 열정이 있으신가요? 저희와 함께하세요.

저희는 팀에 합류할 뛰어난 개발자를 항상 찾고 있습니다. 본인의 이야기라고 생각된다면 더 이상 기다리지 말고 오늘 지원하세요.

이 글이 유용했나요? 이 글을 공유하세요: