Java: 실시간 처리를 위한 Java Real-Time System 소개
Real-Time System이란? 아주 빠른 속도로 처리되는 시스템을 의미하는 것일까?
아니다! Real-Time System이란 빠른 속도로 처리되는 것이 아니고 정해진 시간에 정확히 동작을 수행하는 시스템을 의미한다.
Nasa에서 개발한 로켓의 추진 제어 장치 소프트웨어를 개발한다고 상상해보자. 로켓이 대기권에 진입하기 정확히 59초 전에 자세 제어 추진을 1.6초 수행하여 각도를 15도 변경해야한다.
이처럼 정확한 시간에 정해진 dealine동안 정해진 만큼 동작을 수행하도록 구현하는 시스템을 실시간 시스템이라 볼 수 있다. (위와 같은 동작이 더 빨리 수행된다고 아무런 득 될게 없다. 로켓을 고철로 재활용하기 위한 목적이라면 모를까)
Real-Time System은 정확도에 대한 에러를 어느 정도 감수 할 수 있는지에 따라 Hard Real-Time 과 Soft Real-Time 으로 구분한다. 앞에서 예를 든 로켓 같은 경우는 Hard Real-Time의 경우이고 Soft Real-Time은 약간의 오차 정도는 허용할 수 있는 시스템이다.
Java로 Real-Time을?
정확한 동작을 필요로 하는 Hard Real-Time System에 Java를 이용한 소프트웨어 개발이 가능할까? 일반적인 Java라면 아마 불가능할 것이다. 로켓을 제어하는 순간에 가비지 콜렉션이 하필 시작되거나 혹은 서로 다른 Java 쓰레드간에 스케줄링이 되어 시간차가 발생할 수 있다.
하지만, Java를 만든 Java의 아버지들은 이런 극도의 정확성을 요구하는 곳에서도 Java가 사용되기를 바라마지 않았던 것 같다. JCP (Java Community Process)가 만들어지고 가장 먼전 제안된 1번 JSR (Java Specification Request)가 바로 Real-Time Java이니 말이다.
Real-Time Java는 Real-Time System에서 Java를 사용하기 어렵게하는 근원적인 문제점 - 가비지 콜렉션, 스케줄링 - 등을 해결하고 또한, Real-Time System을 구현하기 위해 필요한 기능을 더하여 기존에는 불가능했던 영영에서 Java가 활용될 수 있도록 한다.
활용 가능한 산업
Oracle이 구현한 Java Real-Time System을 이용하면 다음과 같은 까다로운 산업군에서도 Java의 멋진 이점들을 활용할 수 있다.
정말 안전하기는 할까?
위에서 예를 든 산업군들은 척 봐도 안정성이 정말 중요한 분야이다. 비행기 제어 소프트웨어에 심각한 버그가 있다고 생각해봐라. 출장 가기 싫어진다. Java를 이용해서 목숨을 좌지 우지 하는 소프트웨어를 개발하는 것이 과연 현명한 판단일까? 어떻게 그 안정성을 보장할 것인가?
미국에서 항공과 관련된 소프트웨어를 개발하기 위해서는 FAA (Federal Avionics Administration)가 강제한 DO-178B 안전 표준에 따라 작성한 모든 코드를 인증받아야 한다. 실시간 운영체제를 만드는 LynxWorks나 WindRiver 같은 회사들의 운영체제 제품들이 DO-178B 인증을 통과하였다. 하지만, Java Real-Time의 경우는 DO-178B로 검증하기에는 어려움이 많다.
2011년 1Q를 목표로 하는 DO-178C는 Java와 같은 객체 지향 개발 언어를 염두에 두고 스팩이 만들어지고 있다. 2011년이 되면 Real-Time 환경에서의 Java의 발전과 더불어 DO-178C 표준 정립으로 인해 본격적인 Java Real-Time 소프트웨어 개발이 시작될 수 있는 기반이 마련되는 것이다.
DO-178C 표준과 그와 관련된 검증 도구들을 이용하면 Java Real-Time으로 개발된 소프트웨어의 안정성을 검증할 수 있을 것이다. 이러한 절차를 통해 하나 둘 Java Real-Time을 활용한 사례들이 나오기 시작하면 C 언어 사용이 당연시 되던 Real-Time System에서도 점점 더 많이 Java가 훌륭한 솔루션으로 인정 받게 될 것이다.
굳이 Java를 써야할 이유는?
물론 DO-178C와 같은 표준 절차에 의해 안정성을 확보할 수 있다고는 하지만 "구관이 명관"이라는 속담도 있지 않은가? 굳이 잘 쓰던 기존 시스템을 Java로 새로이 개발할 필요가 과연 있을까?
소프트웨어는 엄연히 (돈을 벌기 위한) 산업이다. 우리는 비용과 효율 그리고 혁신에 대해서 반드시 생각해보아야 한다. Java는 분명 C/C++ 언어에 비해 복잡한 소프트웨어를 개발함에 있어 전체 비용을 감소시킨다.
NCW (Network Centric Warfare)와 같이 전투에 참여한 각종 기기들이 서버와 무선으로 데이터를 주고 받고 취합한 데이터를 분석하여 다시 전투 장비에 feedback을 제공하는 복잡한 네트워크 시스템을 기존 C/C++ 언어로 개발하려면 기간, 비용, 버그 등등 여러 문제에 봉착할 수 있다. Java를 이용하면 전체 개발 비용을 줄일 수 있을 뿐 아니라 미래의 시스템 확장에 필요한 소프트웨어 혁신의 기반을 갖추게 된다.
소프트웨어 혁신을 위한 좋은 도구를 애써 외면할 이유는 없지 않은가?
실제 사용한 예가 있나?
무인 비행기 J0UCAS X-45C의 mission plannning 소프트웨어는 Real-Time Java로 개발되었다. 미국 보잉사와 BAE (British Aerospace Engineering)에 의해 공동으로 개발되었다고 한다.
프랑스 보병이 사용할 헬멧 착용형 PDA는 일종의 전투용 augmented reality 정보를 제공하는 기기이다. 프랑스 Sagem사에 의해 개발된 이 장비 역시 Real-Time Java를 사용하고 있다.
DDG-1000 FCS (Future Combat System)에서도 소프트웨어 개발자의 생상성 향상, 비용 절감, 기간 단축, 향후 유지보완성 확보 등을 위해 Real-Time Java를 활용하고 있다.
Audi는 Stanford 대학과 함께 Oracle Java RTS를 이용한 무인자동차 시스템을 연구 중이다. 2010년 11월 라스베가스에서 열린 SEMA 쇼에서 시연을 보인바 있다.
다음 번 글에서는
왜 Java Real-Time System을 사용하는 것이 좋을지에 대해 주저리 주저리 써보았다. 다음 번에는 Java RTS의 기술적인 특징 및 어떻게 Real-Time System 개발이 Java 코드로 가능한지 살펴보도록 하겠다.
UPDATE:
국내 회사인 나무아이엔씨는 포스코의 마그네슘 공장에 제조 생산 부분에서는 처음으로 Java Real-Time System를 적용한 시스템을 개발하였다고 한다.'
UPDATE2:
대한민국 공군의 연습기인 T-50 골든이글에도 Java Real-Time이 사용된다고 한다.
참고자료:
아니다! Real-Time System이란 빠른 속도로 처리되는 것이 아니고 정해진 시간에 정확히 동작을 수행하는 시스템을 의미한다.
Nasa에서 개발한 로켓의 추진 제어 장치 소프트웨어를 개발한다고 상상해보자. 로켓이 대기권에 진입하기 정확히 59초 전에 자세 제어 추진을 1.6초 수행하여 각도를 15도 변경해야한다.
이처럼 정확한 시간에 정해진 dealine동안 정해진 만큼 동작을 수행하도록 구현하는 시스템을 실시간 시스템이라 볼 수 있다. (위와 같은 동작이 더 빨리 수행된다고 아무런 득 될게 없다. 로켓을 고철로 재활용하기 위한 목적이라면 모를까)
Real-Time System은 정확도에 대한 에러를 어느 정도 감수 할 수 있는지에 따라 Hard Real-Time 과 Soft Real-Time 으로 구분한다. 앞에서 예를 든 로켓 같은 경우는 Hard Real-Time의 경우이고 Soft Real-Time은 약간의 오차 정도는 허용할 수 있는 시스템이다.
Java로 Real-Time을?
정확한 동작을 필요로 하는 Hard Real-Time System에 Java를 이용한 소프트웨어 개발이 가능할까? 일반적인 Java라면 아마 불가능할 것이다. 로켓을 제어하는 순간에 가비지 콜렉션이 하필 시작되거나 혹은 서로 다른 Java 쓰레드간에 스케줄링이 되어 시간차가 발생할 수 있다.
하지만, Java를 만든 Java의 아버지들은 이런 극도의 정확성을 요구하는 곳에서도 Java가 사용되기를 바라마지 않았던 것 같다. JCP (Java Community Process)가 만들어지고 가장 먼전 제안된 1번 JSR (Java Specification Request)가 바로 Real-Time Java이니 말이다.
Real-Time Java는 Real-Time System에서 Java를 사용하기 어렵게하는 근원적인 문제점 - 가비지 콜렉션, 스케줄링 - 등을 해결하고 또한, Real-Time System을 구현하기 위해 필요한 기능을 더하여 기존에는 불가능했던 영영에서 Java가 활용될 수 있도록 한다.
활용 가능한 산업
Oracle이 구현한 Java Real-Time System을 이용하면 다음과 같은 까다로운 산업군에서도 Java의 멋진 이점들을 활용할 수 있다.
- 군사용 소프트웨어 - 미사일, 레이더, NCW (Network Centric Warfare) ...
- 항공용 소프트웨어 - 비행기 내 제어, 비행 유도 등 관제 소프트웨어
- 공장 자동화 - 공장 내 로보트 제어
- 금융 - 촌각을 다투는 금융 시스템
정말 안전하기는 할까?
위에서 예를 든 산업군들은 척 봐도 안정성이 정말 중요한 분야이다. 비행기 제어 소프트웨어에 심각한 버그가 있다고 생각해봐라. 출장 가기 싫어진다. Java를 이용해서 목숨을 좌지 우지 하는 소프트웨어를 개발하는 것이 과연 현명한 판단일까? 어떻게 그 안정성을 보장할 것인가?
미국에서 항공과 관련된 소프트웨어를 개발하기 위해서는 FAA (Federal Avionics Administration)가 강제한 DO-178B 안전 표준에 따라 작성한 모든 코드를 인증받아야 한다. 실시간 운영체제를 만드는 LynxWorks나 WindRiver 같은 회사들의 운영체제 제품들이 DO-178B 인증을 통과하였다. 하지만, Java Real-Time의 경우는 DO-178B로 검증하기에는 어려움이 많다.
2011년 1Q를 목표로 하는 DO-178C는 Java와 같은 객체 지향 개발 언어를 염두에 두고 스팩이 만들어지고 있다. 2011년이 되면 Real-Time 환경에서의 Java의 발전과 더불어 DO-178C 표준 정립으로 인해 본격적인 Java Real-Time 소프트웨어 개발이 시작될 수 있는 기반이 마련되는 것이다.
DO-178C 표준과 그와 관련된 검증 도구들을 이용하면 Java Real-Time으로 개발된 소프트웨어의 안정성을 검증할 수 있을 것이다. 이러한 절차를 통해 하나 둘 Java Real-Time을 활용한 사례들이 나오기 시작하면 C 언어 사용이 당연시 되던 Real-Time System에서도 점점 더 많이 Java가 훌륭한 솔루션으로 인정 받게 될 것이다.
굳이 Java를 써야할 이유는?
물론 DO-178C와 같은 표준 절차에 의해 안정성을 확보할 수 있다고는 하지만 "구관이 명관"이라는 속담도 있지 않은가? 굳이 잘 쓰던 기존 시스템을 Java로 새로이 개발할 필요가 과연 있을까?
소프트웨어는 엄연히 (돈을 벌기 위한) 산업이다. 우리는 비용과 효율 그리고 혁신에 대해서 반드시 생각해보아야 한다. Java는 분명 C/C++ 언어에 비해 복잡한 소프트웨어를 개발함에 있어 전체 비용을 감소시킨다.
NCW (Network Centric Warfare)와 같이 전투에 참여한 각종 기기들이 서버와 무선으로 데이터를 주고 받고 취합한 데이터를 분석하여 다시 전투 장비에 feedback을 제공하는 복잡한 네트워크 시스템을 기존 C/C++ 언어로 개발하려면 기간, 비용, 버그 등등 여러 문제에 봉착할 수 있다. Java를 이용하면 전체 개발 비용을 줄일 수 있을 뿐 아니라 미래의 시스템 확장에 필요한 소프트웨어 혁신의 기반을 갖추게 된다.
소프트웨어 혁신을 위한 좋은 도구를 애써 외면할 이유는 없지 않은가?
실제 사용한 예가 있나?
무인 비행기 J0UCAS X-45C의 mission plannning 소프트웨어는 Real-Time Java로 개발되었다. 미국 보잉사와 BAE (British Aerospace Engineering)에 의해 공동으로 개발되었다고 한다.
프랑스 보병이 사용할 헬멧 착용형 PDA는 일종의 전투용 augmented reality 정보를 제공하는 기기이다. 프랑스 Sagem사에 의해 개발된 이 장비 역시 Real-Time Java를 사용하고 있다.
DDG-1000 FCS (Future Combat System)에서도 소프트웨어 개발자의 생상성 향상, 비용 절감, 기간 단축, 향후 유지보완성 확보 등을 위해 Real-Time Java를 활용하고 있다.
Audi는 Stanford 대학과 함께 Oracle Java RTS를 이용한 무인자동차 시스템을 연구 중이다. 2010년 11월 라스베가스에서 열린 SEMA 쇼에서 시연을 보인바 있다.
다음 번 글에서는
왜 Java Real-Time System을 사용하는 것이 좋을지에 대해 주저리 주저리 써보았다. 다음 번에는 Java RTS의 기술적인 특징 및 어떻게 Real-Time System 개발이 Java 코드로 가능한지 살펴보도록 하겠다.
UPDATE:
국내 회사인 나무아이엔씨는 포스코의 마그네슘 공장에 제조 생산 부분에서는 처음으로 Java Real-Time System를 적용한 시스템을 개발하였다고 한다.'
UPDATE2:
대한민국 공군의 연습기인 T-50 골든이글에도 Java Real-Time이 사용된다고 한다.
참고자료:
- DO-178B certification challenges for real-time Java applications
- Appetite for Real-Time Java Climbs in Defense Systems
- ITT Taps Sun Java RTS for CSPU Program
- Boeing Selects Software for J-UCAS X-45C
- Boeing slected JXTA for the U.S. Army FCS
- Java emerges as solution for millitary software modernization
댓글
댓글 쓰기