전통적 오류 처리의 한계와 ROP의 도입
서버 개발의 오류들은 try-catch 등으로 코드 복잡성을 야기합니다. 함수형 관점에서 throw new Error는 리턴 타입에 명시되지 않는 ‘숨겨진 출력’으로 예측 불가능성을 높입니다. Railway Oriented Programming(ROP)은 이를 해결하고자 ‘에러도 타입에 포함’하는 것을 핵심으로, let, this, throw 없는 안전한 코드 작성을 지향합니다.
ROP의 투-트랙 모델과 Result 타입
ROP는 함수를 성공과 실패의 두 트랙으로 나뉜 철도에 비유합니다. 오류 처리를 위해 성공 결과(Success) 또는 실패 사유(Failure)를 포함하는 제네릭 Result 타입을 도입합니다. 각 함수는 이 Result 타입을 반환하며, 처리 결과에 따라 성공 또는 실패 트랙으로 흐름을 보냅니다. 성공 시 다음 함수가 실행되지만, 실패 시 오류는 후속 함수 실행 없이 최종 결과까지 전파됩니다.
flatMap 어댑터와 함수 합성
ROP 모델에서 단일 트랙 함수를 투-트랙 모델에 연결하려면 flatMap이라는 어댑터 함수가 필수적입니다. flatMap은 이전 단계 Result가 Success일 때만 다음 단일 트랙 함수를 실행하고 결과를 Result 타입으로 변환합니다. Failure였다면 실패 결과를 그대로 전달합니다. flatMap으로 변환된 함수들은 pipe 유틸리티를 통해 간결하게 합성되며, 이는 코드 가독성과 구조적 아름다움을 유지하며 일관된 오류 처리를 가능하게 합니다.