그래서, ROP가 뭔데? (Railway oriented programming)

그래서, ROP가 뭔데? (Railway oriented programming) | by 아프니까병원이다 | Medium

작성자
jeff
발행일
2020년 03월 15일

핵심 요약

  • 1 Railway Oriented Programming(ROP)은 함수형 프로그래밍에서 오류 처리를 위한 접근 방식으로, 성공과 실패 경로를 분리하여 코드의 구조적 아름다움을 유지합니다.
  • 2 ROP는 오류를 함수의 리턴 타입에 포함하는 '투-트랙' 모델을 통해 전통적인 예외 처리 방식의 복잡성을 줄이고 예측 가능한 코드 작성을 가능하게 합니다.
  • 3 `flatMap` 어댑터와 `pipe` 유틸리티를 활용하여 단일 트랙 함수를 투-트랙 모델에 맞게 변환하고 합성함으로써, 여러 단계의 작업을 유연하게 연결하고 오류를 일관되게 전파합니다.

도입

이 글은 서버 개발 시 흔히 발생하는 예외 처리 문제를 다루며, 전통적인 명령형 프로그래밍 방식이 코드를 복잡하게 만드는 과정을 지적합니다. 요청 검증부터 데이터베이스 업데이트까지 각 단계에서 발생할 수 있는 다양한 오류 상황을 설명하고, 이러한 예외 처리가 코드 라인을 급격히 증가시켜 가독성과 유지보수성을 저해하는 현실을 보여줍니다. 이에 대한 대안으로 함수형 프로그래밍의 Railway Oriented Programming(ROP) 개념을 소개하며, 코드의 아름다움을 유지하면서도 효과적으로 오류를 처리하는 방법을 제시합니다.

전통적 오류 처리의 한계와 ROP의 도입

서버 개발의 오류들은 try-catch 등으로 코드 복잡성을 야기합니다. 함수형 관점에서 throw new Error는 리턴 타입에 명시되지 않는 ‘숨겨진 출력’으로 예측 불가능성을 높입니다. Railway Oriented Programming(ROP)은 이를 해결하고자 ‘에러도 타입에 포함’하는 것을 핵심으로, let, this, throw 없는 안전한 코드 작성을 지향합니다.

ROP의 투-트랙 모델과 Result 타입

ROP는 함수를 성공과 실패의 두 트랙으로 나뉜 철도에 비유합니다. 오류 처리를 위해 성공 결과(Success) 또는 실패 사유(Failure)를 포함하는 제네릭 Result 타입을 도입합니다. 각 함수는 이 Result 타입을 반환하며, 처리 결과에 따라 성공 또는 실패 트랙으로 흐름을 보냅니다. 성공 시 다음 함수가 실행되지만, 실패 시 오류는 후속 함수 실행 없이 최종 결과까지 전파됩니다.

flatMap 어댑터와 함수 합성

ROP 모델에서 단일 트랙 함수를 투-트랙 모델에 연결하려면 flatMap이라는 어댑터 함수가 필수적입니다. flatMap은 이전 단계 ResultSuccess일 때만 다음 단일 트랙 함수를 실행하고 결과를 Result 타입으로 변환합니다. Failure였다면 실패 결과를 그대로 전달합니다. flatMap으로 변환된 함수들은 pipe 유틸리티를 통해 간결하게 합성되며, 이는 코드 가독성과 구조적 아름다움을 유지하며 일관된 오류 처리를 가능하게 합니다.

결론

Railway Oriented Programming(ROP)은 함수형 프로그래밍 패러다임을 활용하여 오류 처리를 구조적으로 통합하는 강력한 접근 방식입니다. `Result` 타입과 `flatMap`, `pipe`와 같은 함수형 유틸리티를 통해 성공과 실패 경로를 명확히 분리하고, 예측 불가능한 예외 대신 타입 시스템 내에서 오류를 관리할 수 있게 합니다. 이로써 개발자는 복잡한 `try-catch` 블록이나 조건문 없이도 코드의 흐름을 간결하게 유지하면서 견고한 애플리케이션을 구축할 수 있습니다. ROP는 코드의 구조적 아름다움과 유지보수성을 크게 향상시키는 효과적인 방법론입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!