스프링캠프 2025 [Track 2] 6. 레일웨이 지향 프로그래밍과 스프링 (이선협)
- 레일웨이 지향 프로그래밍(ROP)은 소프트웨어를 철로처럼 바라보며 성공과 실패 두 가지 흐름으로 로직을 구성하는 방법론이다. 🛤️
- ROP는 2014년에 처음 소개되었으며, 함수형 프로그래밍의 예외 처리 방식을 철로에 비유하여 설명한다. 🚂
- ROP의 핵심은 로직을 성공과 실패로 나누어 바라보는 사고방식과, 함수형 프로그래밍 개념을 활용한 예외 처리 기술이다. 🔧
- 함수형 예외 처리는 예외를 값으로 취급하여 타입 시스템을 통해 단방향으로 흐르게 만든다. ➡️
- 모나드는 값을 감싼 컨테이너로, 합성이 가능하여 여러 연산을 순차적으로 연결하는 데 유용하다. 📦
- 코틀린은 강력한 타입 시스템과 함수형 프로그래밍 지원으로 ROP 구현에 적합하며, 체크 예외가 없어 ROP를 통한 예외 처리가 효과적이다. ✅
- 직접 모나드를 만들어 사용하면 편의 기능을 추가하기 용이하며, 코틀린 Result 라이브러리를 사용할 수도 있다. 🛠️
- 기존의 try-catch 방식 대신 모나드를 사용하면 예외를 타입으로 정의하여 코드 안정성을 높이고, IDE의 도움을 받을 수 있다. 💡
- ROP를 잘 활용하려면 계약에 의한 설계를 참고하여 전제 조건과 사후 조건을 명확히 정의하고, 타입 시스템을 적극 활용해야 한다. 📜
- 예외 처리 패턴은 예외 복구, 패닉(종료), 폴드(통합), 무시의 네 가지로 나눌 수 있으며, 상황에 따라 적절한 전략을 선택해야 한다. 🧰
- 스프링 환경에서 ROP를 적용할 때는 도메인 레이어에서 계약을 준수하고 참조 투명성을 유지하며, 서비스 레이어에서 비즈니스 규칙에 따라 절차적으로 로직을 작성한다. 🏢
- 컨트롤러 레이어에서는 최종 결과를 응답으로 변환하여 클라이언트에 전달하고, 모듈 간 인터페이스 제공 시에는 에러 타입을 명시하여 사용자가 예외를 예측하고 처리할 수 있도록 한다. 📤
- 외부 API 호출 시에는 API 스펙을 기반으로 발생 가능한 예외를 정의하고, 각 예외에 대한 복구 전략을 수립해야 한다. 🌐
- 트랜잭션 처리 시에는 모나드가 예외가 아닌 값이므로 롤백이 발생하지 않도록 주의하고, 필요에 따라 명시적으로 예외를 던져 롤백을 유도해야 한다. ⚠️