기본 콘텐츠로 건너뛰기

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 .   ...

SKT HSS 서버 해킹 사태에서 USIM 교체의 보안 효과

최근 발생한 SKT의 HSS(Home Subscriber Server) 서버 해킹 사건은 이동통신망의 핵심 인프라를 겨냥한 중대한 보안 위협입니다. IT 및 통신 보안 전문가의 관점에서 이번 사태의 기술적 내용을 이해하고, USIM 교체가 왜 효과적인 대응 방안이 될 수 있는지 설명드리겠습니다. HSS(Home Subscriber Server)란 무엇인가? HSS는 이동통신망의 핵심 구성 요소로서, 가입자에 대한 모든 인증, 권한 부여, 이동성 관리 정보를 저장하고 관리하는 중앙 집중식 데이터베이스입니다. 쉽게 말해, 이동통신 가입자의 '마스터 키'와 같은 역할을 수행합니다. 휴대폰을 켜거나 기지국에 연결될 때마다 단말기는 USIM(Universal Subscriber Identity Module)에 저장된 정보를 이용하여 HSS에 접근하고, HSS는 해당 가입자가 네트워크에 접속하고 서비스를 이용할 수 있는 정당한 사용자인지 확인하는 인증 절차를 수행합니다. HSS에 저장되는 주요 정보에는 다음과 같은 민감한 데이터가 포함됩니다. IMSI (International Mobile Subscriber Identity): 가입자를 고유하게 식별하는 국제 표준 식별자입니다. USIM 인증 키 (Authentication Key): USIM과 HSS 간의 상호 인증에 사용되는 비밀 키입니다. 이 키는 통신 세션 설정 시 무단 접근을 방지하는 데 필수적입니다. 서비스 프로파일: 가입자가 어떤 서비스(음성 통화, 데이터 통신, 부가 서비스 등)를 이용할 수 있는지에 대한 정보입니다. 이동성 관리 정보: 가입자의 현재 위치 정보 등을 관리하여 통신 연결을 유지합니다. SKT HSS 서버 해킹의 기술적 의미 이번 SKT HSS 서버 해킹은 공격자가 이동통신망의 가장 민감한 정보를 관리하는 핵심 시스템에 침투했다는 점에서 심각성을 가집니다. 정확한 공격 경로는 조사를 통해 밝혀지겠지만, 일반적으로 HSS와 같은 중요 서버는 외부 인터넷과 분리된...