기본 콘텐츠로 건너뛰기

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의 멋진 이점들을 활용할 수 있다.
  • 군사용 소프트웨어 - 미사일, 레이더, NCW (Network Centric Warfare) ...
  • 항공용 소프트웨어 - 비행기 내 제어, 비행 유도 등 관제 소프트웨어
  • 공장 자동화 - 공장 내 로보트 제어
  • 금융 - 촌각을 다투는 금융 시스템
지금까지는 위와 같은 산업군에서는 주로 C 혹은 Ada와 같은 개발 언어가 사용되었을 것이다. 이제는 Java RTS라는 modern한 개발 framework를 이용할 수 있다.

정말 안전하기는 할까?

위에서 예를 든 산업군들은 척 봐도 안정성이 정말 중요한 분야이다. 비행기 제어 소프트웨어에 심각한 버그가 있다고 생각해봐라. 출장 가기 싫어진다. 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이 사용된다고 한다.

참고자료:

댓글

이 블로그의 인기 게시물

Wireless: HotSpot 2.0 이란?

스마트폰 사용자가 HotSpot 2.0을 지원하는 Wi-Fi 망을 사용하는 경우라면 기존 Wi-Fi 망과 달리 이동통신 망에서 Wi-Fi 망으로의 네트워크 연결 전환이 자연스럽게 이루어진다. 예를 들면, 3G 네트워크를 이용하여 영화를 보고 있다가 HotSpot 2.0 네트워크에 연결이 가능하게 되면 영화 시청 중단 없이 Wi-Fi 망으로 자연스럽게 네트워크 연결이 이동하여 3G 망의 부하도 줄이고 사용자의 네트워크 비용도 절약할 수 있다. 시스코에서 제공한 White Paper 를 참고.

Apple M1 Mac Mini에서 이더리움 (Ethereum) 채굴하기

 돈을 벌 목적은 아니고 이더리움 기술에 대한 호기심에 직접 채굴(마이닝)에 나서 보기로 했다. 머신은 Apple M1 Mac Mini. 스팩을 살펴보니 8 Core GPU에 16GB 메모리를 공유하고 있어 가능은 해보인다. 큰 흐름은 다음과 같다. 채굴한 이더리움을 저장할 지갑을 만든다 만든 지갑의 정보를 잘 보관해둔다 (Secret Recovery Phrase, 지갑의 주소 값) Apple M1용 채굴 프로그램 설치 내 지갑 정보를 이용해서 채굴 프로그램 실행 일단, 채굴한 이더리움을 저장할 지갑(wallet)을 만들어야 한다.  크롬 브라우저 익스텐션 설치로 비교적 간단하게 지갑을 만들 수 있는  https://metamask.io/ 를 이용하기로 했다. 크롬 익스텐션을 설치 후 기존에 만든 지갑이 없으므로 "Create a Wallet"을 선택한다. 패스워드 입력하고 등등의 절차를 거치면 아래와 같은 Secret Recovery Phrase가 나온다. 이 값을 잘 보관해두기 바란다. 나중에 지갑을 복구할 때 필요한 값이다. 이 값이 유출되면 지갑에 모아둔 이더리움을 다 털릴 수 있으므로 안전한 곳에 보관한다. Confirm Your Secret Phrase에서 확인 과정을 거친다. 직접 입력하는 것이 아니라 단어 별 버튼을 일일이 클릭해서 확인해주어야 한다. (좀 번거롭지만 그만큼 Secret Recovery Phrase가 중요함을 인지시키기 위한 과정이다.) 이제 지갑은 준비 완료. 생성된 Account 화면에서 지갑의 주소갑을 얻을 수 있다.  Apple M1용 채굴 프로그램을 설치해보자. Ethminer M1 Github 프로젝트 에서 미리 컴파일된 바이너리를 다운로드 받는다. (Assets를 펼치고 ethminer-m1을 클릭해서 다운 받으면 된다) 원하는 폴더에 파일을 옮겨 놓고 Terminal에서 chmod +x로 실행가능하게 만든다. % mv ~/Downloads/ethminer-m1 .             %   % c

Java: Java for Game? Java가 Game 개발에 어울릴까?

Java가 기업용 서버 소프트웨어 개발에 활발하게 쓰이는 것과 달리 일반 응용프로그램 분야에서는 별로 대접을 받지 못하는 현실을 개선하려면 어떤 분야부터 손보면 좋을까? 로딩타임, 성능, 사용자 인터페이스 등 Java를 이용한 클라이언트 프로그램을 개발하지 않는 이유들은 개발자 별로 서로 다를 것이다. 하지만, 이런 단점에도 불구하고 점점 복잡해지는 소프트웨어를 더 쉽게 다양한 환경에서 동작하도록 만들기 위해서는 Java만큼 이미 성숙한 해결책도 없지 않은가? 클라이언트 개발을 활성화하기 위해 Java를 게임 개발에 활용할 수 있도록 지원하면 어떨까? 역시, 사용자가 직접 쓰는 응용프로그램 중에는 게임이 가장 시장이 큰 분야이니 말이다. 그렇다면, 현재 게임 개발에 Java가 어느 정도 사용되고 있고 미래에 더 활성화 될 가능성은 있을 것인가? 이런 의문점을 가지고 "Java + Game"에 대해 조사해보기로 했다. 1. Java로 개발한 게임들 우선, Java로 개발한 게임들에 대해 살펴보자. Oracle의  Java in Action 웹페이지 를 보면 Java를 이용한 3D MMORPG RuneScape 에 대한 설명이 있다. 가입자가 1억 3000만명이 넘는다고 하다. 실제 게임을 설치해서 실행해보니 WOW같은 화려한 그래픽에는 못미치치만 잘만든 Role Playing 게임이다 Puppy Games 에서 개발한  Revenge of the Titans 게임도 눈여겨 볼 만하다. 이 회사는 작고 손쉽게 즐길 수 있는 게임을 개발하는데 모든 게임을 Java로 만든다. Revenge of the Titans는 Starcraft와 같은 전략 게임으로 너무 머리쓰지 않고 즐길 수 있는 게임이며 그래픽도 신선하다. 개발이 진행 중인 것으로 보이는 Urban Galaxy 라는 게임도 재미있을 것 같다. SF 영화를 보면 자주 등장하는 미래의 빌딩 숲을 날아다니는 자동차로 전투도 치르고 무역도 하며 캐릭터를 키우는 게임으로