XML 및 HTTP 지원하는 임베디드 시스템 설계
임베디드 시스템을 애플리케이션에 접속하기 위한 기술로서 XML을 선택하는 사례가 늘고 있다. XML 및 웹 지원 임베디드 시스템을 구현할 때는 소프트웨어에서 전용 하드웨어에 이르는 다양한 기법을 동원할 수 있다. (귀중한 프로세싱 자원을 소모한다는 측면에서 고비용이기는 하지만) 가장 간단한 방법은 웹 프로세스를 전적으로 외부 소프트웨어로 지원하는 것이다. 이렇게 해야 마이크로소프트 윈도우즈 CE 같은 임베디드 운영체제의 기능을 이용할 수 있다.
하지만 자원 제한적인 임베디드 프로젝트의 디자이너들은 웹을 직접 하드웨어로 지원하는 것이 더 효율적이라고 판단하게 될 것이다. 이러한 경우에 완전 32비트 프로세서 및 웹 서버에서부터, 전력소모가 낮고 데이터 처리 성능이 뛰어난 경제적인 하이브리드 솔루션 등의 여러 가지 대안을 고려할 수 있다.
현재 Z80, MIPS, ARM, X86을 비롯한 대다수 주요 임베디드 아키텍처에서 웹 지원이 가능하다. 수천 가지에 달하는 대량생산 임베디드 IC가 나와 있고 지원 옵션도 다양하기 때문에 디자이너들의 검토가 필요하다. 때로는 전적으로 소프트웨어일 수도 있고, 때로는 네트워크 접속을 처리하기 위해 외부 기판이 필요할 수도 있다. 그런데 웹 지원에 필요한 가장 중요한 하드웨어 요소인 이더넷 컨트롤러가 칩에 포함되어 있다면 웹 지원을 매우 경제적으로 달성할 수 있을 것이다. 그러한 한 예가 자일로그의 eZ80 Acclaim 마이크로컨트롤러이다.
eZ80 Acclaim을 이용한 XML 임베디드 웹 지원의 개요를 살펴보면 이 칩이 고성능 임베디드 프로세서와 포괄적인 인터넷 가능 소프트웨어 스택을 결합한 웹 지원 마이크로컨트롤러임을 알 수 있다. 소프트웨어 스택을 통해 이더넷 및 직렬 드라이버와 더불어 표준적인 TCP/IP 네트워크 프로토콜이 지원된다.
임베디드 프로세서에서 구현되는 웹 지원은 PC 아키텍처에서 실행되는 웹 서버와 다르다. 표준적인 개인용 컴퓨터와 인터넷 기반 웹 셋업에서는 웹 페이지가 디스크 드라이브 같은 대용량 저장장치에 저장되는 것과 달리, 임베디드 프로세서가 작성하는 웹 페이지는 임베디드 데이터 요소로서 액세스된다. 임베디드 구현에 이용되는 자원은 메모리와 성능 모두에 있어 제한적이다. XML가능 웹지원 임베디드 시스템은 비대한 PC 시스템에 비해 불필요한 군살을 제거하고 지능적이어야 할 필요가 있다.
임베디드 애플리케이션에 웹 지원을 포함시키면 엔지니어가 많은 시간을 들여 사용자 인터페이스 디자인을 개발하지 않아도 된다는 이점이 있다. HTML/XML로 작성되어 C/CC++ 코드로 변환되는 임베디드 웹 페이지가, 사용자가 사용하기 쉬운 인터페이스를 즉시 제공하며, 이들 인터페이스가 복잡한 임베디드 시스템을 지원하기 때문이다.
임베디드 웹 서버 프로그램의 일반적인 명령어 라인
XML(Extensible Markup Language)은 데이터 교환에 있어 기술적 혜택이다. XML은 프로세서에 상관 없이 데이터를 인코딩할 수 있으므로 서로 다른 시스템 간에 데이터 교환을 가능케 한다. XML은 정의된 태그를 이용해 웹 페이지 안에 코드화 정의를 배치한다. XML 구문을 이용하는 다양한 애플리케이션 환경에 대해 각각의 태그 정의를 디자이너들이 개발하는 중이다. 예를 들면 전기 엔지니어링, 전자상거래, 멀티미디어 데이터, 순수 도큐멘트 정보 등의 어휘를 위한 태그 세트가 개발되었다.
XML 문서를 여러 가지 방법으로 다른 시스템으로 전송할 수 있다. 한 가지 방법이 문서를 HTTP 객체로 보내는 것이다. 이를 위해서는 서버를 통해 Simple Object Access Protocol이나 XML-RPC 같은 웹 서비스를 지원해야 한다.
임베디드 시스템에 XML 및 HTML 지원 기능을 포함시키기 위해서는 소프트웨어 툴 체인에서 특수한 예비가 필요하다. 특히 XML 코드를 애플리케이션 프로그램의 C 언어 또는 어셈블리 코드에 임베딩할 수 있도록, 임베디드 부분에 연결되는 컴파일러-링커를 설계해야 한다.
실제 작업에 있어서는 XML 기능을 아주 쉽게 이용할 수 있다. 프로그래머가 자신의 프로그램에 일련의 "#include" 문을 포함시키기만 하면 되는 것이다. 개발자 툴도 그와 같은데, eZ80 Acclaim에 이용되는 자일로그 ZDS II 개발자 스위트도 마찬가지이다. 또한 대다수 개발자 스위트가 샘플 HTML/XML 페이지를 포함하기 때문에 이 기능을 이용해 프로젝트를 대폭적으로 간소화할 수 있다.
구현의 문제
"#include" 문을 이용하는 쉬운 방법에도 불구하고 개발자들이 임베디드 웹 기능을 이용할 때는 몇 가지 다른 소프트웨어 요인을 고려해야 한다. 우선 애플리케이션 코드에서, 개발자가 HTTP 초기화 함수를 호출하는 명령을 포함시켜야 한다. 그런데 가장 중요하며 또한 시간이 많이 걸리는 작업은 임베디드 시스템의 사용자가 액세스할 웹 페이지를 웹 서버에 구축하는 것이다.
이 작업을 단계별로 살펴보면 이렇다. 실행하려는 코드가 초기화 함수를 만나면 임베디드 프로세서에서 웹 페이지가 준비된다. 초기화 함수는 http_init(http_defmethods, http_defheaders, website, port)의 형태이다.
본 주제에 있어 이 명령에서 가장 연관이 깊은 부분은 "website" 파라미터이다. 사용자가 작성하는 이 파라미터가 임베디드 프로세서가 지원하는 사이트에 포함될 웹 페이지를 정의한다.
이와 관련해 웹 페이지에는 정적 HTML 페이지와 동적 HTML 페이지의 두 가지 유형이 있다는 점에 유의해야 한다. 정적 웹 페이지는 내용이 바뀌지 않는다. 자사의 서비스 및 제품 선전을 특징으로 하는 대다수 기업 웹 사이트들이 기본적으로 정적이다. 그러므로 모든 방문자가 페이지를 동일한 방식으로 보게 된다. 이와 달리 동적 HTML 페이지는 사용자의 피드백에 따라 컨텐츠가 달라진다. 검색 엔진과 온라인 뱅킹 사이트가 전형적인 동적 페이지로서, 사용자가 필드에 입력하는 데이터에 따라 내용이 달라진다.
임베디드 웹 서버의 장점은 정적 페이지를 쉽게 작성할 수 있다는 것이다. 이들 페이지를 C 언어 소프트웨어 프로그램 등에서 문자열로 저장할 수 있다. (순수한 임베디드 디바이스는 파일 시스템이 없기 때문에 대개는 이들 페이지를 단순 ASCII 텍스트 파일로 저장할 수 없다.) 그런데 동적 페이지는 컨텐츠가 바뀌기 때문에 파일로 저장할 수 없다. 동적 페이지는 실행시간에 작성해야 한다.
웹 페이지가 자체적으로 가지고 있는 한 무더기의 코드들
다시 말해 함수 또는 파라미터 리스트로부터 동적 파일을 조합해야 하는 것이다. 웹 페이지가 호출되면, 온스크린 웹 페이지의 각 부분에 해당하는 일련의 함수가 실행된다.
이렇게 해서 XML/HTML 페이지가 생성되고, 이 페이지가 브라우저로 이동한다. 이러한 함수 호출을 통해서 임베디드 시스템이 요청된 작업을 수행하도록 프로그램할 수 있다. 예를 들면 온도 센서를 판독하고 사용자에게 온도를 보여주는 페이지를 작성하도록 할 수 있다. 또한 이러한 함수 호출을 통해서, 웹 브라우저에 내장된 양식에 입력되는 사용자 입력을 판독하도록 프로그램할 수 있다. 그리고 양식에 입력되는 정보를 토대로 온도조절장치가 조절되고, 모터가 가동되도록 하는 등의 동작을 설정할 수 있다.
따라서 "website" 파라미터에 의해 웹 페이지를 구성하는 배열이 정의된다. (웹 사이트의 각 페이지는 하나의 "webpage" 파라미터를 포함시켜야 한다.)
초기화 함수 이외에도, 임베디드 웹 페이지가 전송되기 위해서는 몇 가지 중요한 문제가 처리되어야 한다.
예를 들면 접속 제한 시간을 설정하고, 특정 네트워크 프로세서를 시작하고, 명령을 주고받을 수 있도록 쉘을 구축하고 직렬 포트에서 개방해야 한다. 임베디드 웹 서버 프로그램의 경우, 포함되어야 할 명령 라인은 위 오른쪽의 리스팅과 같다(축약된 형태).
그렇다면 HTTP 서버는 어떻게 함수 호출을 수신하고 요청된 웹 페이지를 전송하는 것일까? 대다수 네트워크 프로토콜과 마찬가지로 HTTP도 클라이언트-서버 모델을 이용한다.
HTTP 클라이언트가 TCP 접속을 개설하고 HTTP 서버에 요청을 전송한다. 이 요청에는 원하는 웹 페이지를 지시하는 범용 자원 식별자가 포함된다. 그러면 요청된 자원이 들어있는 응답 메시지를 서버가 보낸다.
그리고 마침내 프로그램이 가장 중요한 요소인 웹 페이지 자체를 제공한다. 아래 오른쪽에 보이는 리스트는 이러한 코드의 축약된 한 예를 보여준다.
이와 같은 Web-on-a-chip 솔루션은 TCP/IP 네트워크를 통해 범용 통신이 가능하기 때문에 시스템 제어가 용이하고, 코드 업데이트가 간편하며, 호환성을 향상시킨다.
임베디드 시스템을 애플리케이션에 접속하기 위한 기술로서 XML을 선택하는 사례가 늘고 있다. XML 및 웹 지원 임베디드 시스템을 구현할 때는 소프트웨어에서 전용 하드웨어에 이르는 다양한 기법을 동원할 수 있다. (귀중한 프로세싱 자원을 소모한다는 측면에서 고비용이기는 하지만) 가장 간단한 방법은 웹 프로세스를 전적으로 외부 소프트웨어로 지원하는 것이다. 이렇게 해야 마이크로소프트 윈도우즈 CE 같은 임베디드 운영체제의 기능을 이용할 수 있다.
하지만 자원 제한적인 임베디드 프로젝트의 디자이너들은 웹을 직접 하드웨어로 지원하는 것이 더 효율적이라고 판단하게 될 것이다. 이러한 경우에 완전 32비트 프로세서 및 웹 서버에서부터, 전력소모가 낮고 데이터 처리 성능이 뛰어난 경제적인 하이브리드 솔루션 등의 여러 가지 대안을 고려할 수 있다.
현재 Z80, MIPS, ARM, X86을 비롯한 대다수 주요 임베디드 아키텍처에서 웹 지원이 가능하다. 수천 가지에 달하는 대량생산 임베디드 IC가 나와 있고 지원 옵션도 다양하기 때문에 디자이너들의 검토가 필요하다. 때로는 전적으로 소프트웨어일 수도 있고, 때로는 네트워크 접속을 처리하기 위해 외부 기판이 필요할 수도 있다. 그런데 웹 지원에 필요한 가장 중요한 하드웨어 요소인 이더넷 컨트롤러가 칩에 포함되어 있다면 웹 지원을 매우 경제적으로 달성할 수 있을 것이다. 그러한 한 예가 자일로그의 eZ80 Acclaim 마이크로컨트롤러이다.
eZ80 Acclaim을 이용한 XML 임베디드 웹 지원의 개요를 살펴보면 이 칩이 고성능 임베디드 프로세서와 포괄적인 인터넷 가능 소프트웨어 스택을 결합한 웹 지원 마이크로컨트롤러임을 알 수 있다. 소프트웨어 스택을 통해 이더넷 및 직렬 드라이버와 더불어 표준적인 TCP/IP 네트워크 프로토콜이 지원된다.
임베디드 프로세서에서 구현되는 웹 지원은 PC 아키텍처에서 실행되는 웹 서버와 다르다. 표준적인 개인용 컴퓨터와 인터넷 기반 웹 셋업에서는 웹 페이지가 디스크 드라이브 같은 대용량 저장장치에 저장되는 것과 달리, 임베디드 프로세서가 작성하는 웹 페이지는 임베디드 데이터 요소로서 액세스된다. 임베디드 구현에 이용되는 자원은 메모리와 성능 모두에 있어 제한적이다. XML가능 웹지원 임베디드 시스템은 비대한 PC 시스템에 비해 불필요한 군살을 제거하고 지능적이어야 할 필요가 있다.
임베디드 애플리케이션에 웹 지원을 포함시키면 엔지니어가 많은 시간을 들여 사용자 인터페이스 디자인을 개발하지 않아도 된다는 이점이 있다. HTML/XML로 작성되어 C/CC++ 코드로 변환되는 임베디드 웹 페이지가, 사용자가 사용하기 쉬운 인터페이스를 즉시 제공하며, 이들 인터페이스가 복잡한 임베디드 시스템을 지원하기 때문이다.
임베디드 웹 서버 프로그램의 일반적인 명령어 라인
XML(Extensible Markup Language)은 데이터 교환에 있어 기술적 혜택이다. XML은 프로세서에 상관 없이 데이터를 인코딩할 수 있으므로 서로 다른 시스템 간에 데이터 교환을 가능케 한다. XML은 정의된 태그를 이용해 웹 페이지 안에 코드화 정의를 배치한다. XML 구문을 이용하는 다양한 애플리케이션 환경에 대해 각각의 태그 정의를 디자이너들이 개발하는 중이다. 예를 들면 전기 엔지니어링, 전자상거래, 멀티미디어 데이터, 순수 도큐멘트 정보 등의 어휘를 위한 태그 세트가 개발되었다.
XML 문서를 여러 가지 방법으로 다른 시스템으로 전송할 수 있다. 한 가지 방법이 문서를 HTTP 객체로 보내는 것이다. 이를 위해서는 서버를 통해 Simple Object Access Protocol이나 XML-RPC 같은 웹 서비스를 지원해야 한다.
임베디드 시스템에 XML 및 HTML 지원 기능을 포함시키기 위해서는 소프트웨어 툴 체인에서 특수한 예비가 필요하다. 특히 XML 코드를 애플리케이션 프로그램의 C 언어 또는 어셈블리 코드에 임베딩할 수 있도록, 임베디드 부분에 연결되는 컴파일러-링커를 설계해야 한다.
실제 작업에 있어서는 XML 기능을 아주 쉽게 이용할 수 있다. 프로그래머가 자신의 프로그램에 일련의 "#include" 문을 포함시키기만 하면 되는 것이다. 개발자 툴도 그와 같은데, eZ80 Acclaim에 이용되는 자일로그 ZDS II 개발자 스위트도 마찬가지이다. 또한 대다수 개발자 스위트가 샘플 HTML/XML 페이지를 포함하기 때문에 이 기능을 이용해 프로젝트를 대폭적으로 간소화할 수 있다.
구현의 문제
"#include" 문을 이용하는 쉬운 방법에도 불구하고 개발자들이 임베디드 웹 기능을 이용할 때는 몇 가지 다른 소프트웨어 요인을 고려해야 한다. 우선 애플리케이션 코드에서, 개발자가 HTTP 초기화 함수를 호출하는 명령을 포함시켜야 한다. 그런데 가장 중요하며 또한 시간이 많이 걸리는 작업은 임베디드 시스템의 사용자가 액세스할 웹 페이지를 웹 서버에 구축하는 것이다.
이 작업을 단계별로 살펴보면 이렇다. 실행하려는 코드가 초기화 함수를 만나면 임베디드 프로세서에서 웹 페이지가 준비된다. 초기화 함수는 http_init(http_defmethods, http_defheaders, website, port)의 형태이다.
본 주제에 있어 이 명령에서 가장 연관이 깊은 부분은 "website" 파라미터이다. 사용자가 작성하는 이 파라미터가 임베디드 프로세서가 지원하는 사이트에 포함될 웹 페이지를 정의한다.
이와 관련해 웹 페이지에는 정적 HTML 페이지와 동적 HTML 페이지의 두 가지 유형이 있다는 점에 유의해야 한다. 정적 웹 페이지는 내용이 바뀌지 않는다. 자사의 서비스 및 제품 선전을 특징으로 하는 대다수 기업 웹 사이트들이 기본적으로 정적이다. 그러므로 모든 방문자가 페이지를 동일한 방식으로 보게 된다. 이와 달리 동적 HTML 페이지는 사용자의 피드백에 따라 컨텐츠가 달라진다. 검색 엔진과 온라인 뱅킹 사이트가 전형적인 동적 페이지로서, 사용자가 필드에 입력하는 데이터에 따라 내용이 달라진다.
임베디드 웹 서버의 장점은 정적 페이지를 쉽게 작성할 수 있다는 것이다. 이들 페이지를 C 언어 소프트웨어 프로그램 등에서 문자열로 저장할 수 있다. (순수한 임베디드 디바이스는 파일 시스템이 없기 때문에 대개는 이들 페이지를 단순 ASCII 텍스트 파일로 저장할 수 없다.) 그런데 동적 페이지는 컨텐츠가 바뀌기 때문에 파일로 저장할 수 없다. 동적 페이지는 실행시간에 작성해야 한다.
웹 페이지가 자체적으로 가지고 있는 한 무더기의 코드들
다시 말해 함수 또는 파라미터 리스트로부터 동적 파일을 조합해야 하는 것이다. 웹 페이지가 호출되면, 온스크린 웹 페이지의 각 부분에 해당하는 일련의 함수가 실행된다.
이렇게 해서 XML/HTML 페이지가 생성되고, 이 페이지가 브라우저로 이동한다. 이러한 함수 호출을 통해서 임베디드 시스템이 요청된 작업을 수행하도록 프로그램할 수 있다. 예를 들면 온도 센서를 판독하고 사용자에게 온도를 보여주는 페이지를 작성하도록 할 수 있다. 또한 이러한 함수 호출을 통해서, 웹 브라우저에 내장된 양식에 입력되는 사용자 입력을 판독하도록 프로그램할 수 있다. 그리고 양식에 입력되는 정보를 토대로 온도조절장치가 조절되고, 모터가 가동되도록 하는 등의 동작을 설정할 수 있다.
따라서 "website" 파라미터에 의해 웹 페이지를 구성하는 배열이 정의된다. (웹 사이트의 각 페이지는 하나의 "webpage" 파라미터를 포함시켜야 한다.)
초기화 함수 이외에도, 임베디드 웹 페이지가 전송되기 위해서는 몇 가지 중요한 문제가 처리되어야 한다.
예를 들면 접속 제한 시간을 설정하고, 특정 네트워크 프로세서를 시작하고, 명령을 주고받을 수 있도록 쉘을 구축하고 직렬 포트에서 개방해야 한다. 임베디드 웹 서버 프로그램의 경우, 포함되어야 할 명령 라인은 위 오른쪽의 리스팅과 같다(축약된 형태).
그렇다면 HTTP 서버는 어떻게 함수 호출을 수신하고 요청된 웹 페이지를 전송하는 것일까? 대다수 네트워크 프로토콜과 마찬가지로 HTTP도 클라이언트-서버 모델을 이용한다.
HTTP 클라이언트가 TCP 접속을 개설하고 HTTP 서버에 요청을 전송한다. 이 요청에는 원하는 웹 페이지를 지시하는 범용 자원 식별자가 포함된다. 그러면 요청된 자원이 들어있는 응답 메시지를 서버가 보낸다.
그리고 마침내 프로그램이 가장 중요한 요소인 웹 페이지 자체를 제공한다. 아래 오른쪽에 보이는 리스트는 이러한 코드의 축약된 한 예를 보여준다.
이와 같은 Web-on-a-chip 솔루션은 TCP/IP 네트워크를 통해 범용 통신이 가능하기 때문에 시스템 제어가 용이하고, 코드 업데이트가 간편하며, 호환성을 향상시킨다.