TypeScript 기반 Basic 인터프리터 Matanuska의 효과적인 프로그램 종료 방안
2025-01-01 22:19:20Matanuska ADR 006: Runtime Exit 분석
Matanuska 인터프리터란?
Matanuska는 TypeScript로 구현된 BASIC 인터프리터로, 동작의 효율성과 구조의 일관성을 중시하며 설계되었습니다. 이 글에서는 Matanuska의 구성 요소 중 하나인 프로그램의 종료 논리에 대해 심도 있게 분석해보겠습니다.
Matanuska의 프로그램 종료 기능
프로그램의 종료는 일반적으로 실행 중인 프로세스를 중단하는 것을 의미합니다. Matanuska에서는 특별한 예외 처리인 'Exit'을 통해 클라이언트 인터페이스(CLI)에서 종료를 처리하고 있습니다. 그러나 현재 구현 방식은 종료를 성공적으로만 처리할 수 있어, 시스템 설계상 이점을 최대한 활용하기 위해 개선이 필요합니다.
CLI에서의 Error Handling
CLI는 애플리케이션의 최상위 에러를 처리하는 곳으로, 다양한 오류 상황에 대응하기 위해 사용됩니다. 이곳에서의 'Exit' 처리 기능을 통해 테스트 과정에서 실제 프로세스를 중단하지 않고도 코드의 종료 로직을 검증할 수 있습니다.
Exit Error의 역할과 필요성
에러 핸들링에서 'Exit' 타입의 에러를 도입한 이유는 애플리케이션의 매끄러운 종료가 가능해지기 때문입니다. 리소스 정리를 위해 "finally" 블록이 호출될 수 있으며, 다른 언어 및 프레임워크에서 사용하는 표준적인 방법을 본땄습니다.
Host#exit을 사용해야 하는 이유
Matanuska가 점점 발전하면서, Host 추상화 계층이 단순히 로그를 관리하는 것보다 많은 기능을 갖추게 되었습니다. Host 클래스는 운영 체제 수준의 액션을 담당하며, 이는 시스템 종료와 같은 기능을 처리하기 적합합니다. 따라서 종료 로직을 Host에 통합하면 테스트 가능성이 높아짐과 동시에 시스템 설계를 단순화할 수 있습니다.
EventEmitter를 사용하지 않는 이유
일반적으로 이벤트를 활용한 설계를 고려했지만, Matanuska에서는 이를 적용하지 않기로 결정했습니다. 대신 런타임에서 Commander 인스턴스를 직접 호출하여 더 일관적으로 데이터 흐름을 관리할 수 있습니다. 또한 이를 통해 런타임에서 Host의 기능을 더욱 효율적으로 활용할 수 있습니다.
최종 결정
Matanuska에서는 Host를 런타임에 주입하고 이를 통해 직접 종료 메소드를 호출하는 패턴을 채택했습니다. 다음은 그 구체적인 진행 단계입니다:
- 런타임에서 Exit 명령을 처리할 때, Host의 exit 메소드를 호출합니다.
- Host는 해당 exit 코드로 Exit 에러를 발생시킵니다.
- CLI에서 이 에러를 감지하고 이를 처리합니다.
이 방식은 종료 테스트 중 불필요한 실행 중단을 방지하고 테스트 코드의 명확성을 높이는 데 기여할 것입니다.
테스트 규칙과 고려사항
테스트에서는 Host#exit과 테스트용 CLI 종료 핸들러가 각각 에러를 발생시켜야 합니다. 이는 실제 시스템과 동일하게 실행을 중단시키고 테스트의 정확성을 보장하기 위한 필수 요소입니다.
결론
결론적으로, Matanuska ADR 006의 새로운 시스템 종료 접근 방식은 더 나은 구조와 테스트 가능한 코드를 작성하기 위한 중요한 발걸음이 될 것입니다. 향후에는 이 구조가 Matanuska의 다른 부분에 적용되어 전반적인 안정성과 효율성을 동시에 강화할 것입니다.