Seongho Lim/XML/XMLandJava
Retired DISLab
"잘 정리했다. 열심히 공부하고 있구나. 내가 준 책은 예전 버전이어서 XML schema나 namespace 등이 정리가 되어 있지 않은 것이지만, 개념을 이해하는데는 아주 좋으니 잘 탐독하고, 다 한 후에는 새 버전을 읽어보도록 하거라. -- Sangwon Park 17:03, 28 October 2009 (UTC) |
목차 |
Chapter 1: Web Application, XML, and Java
- 1.1 Introduction
- 어떻게 현재의 Web Application들이 XML과 JAVA에 의해 변화될 것인지에 대하여 알아볼 것이다.
- 1.2 Web Application
- 1.2.1 Three Tier Model
- -웹은 근본적으로 정적인 페이지를 인터넷상의 클라이언트에게 전송하는 기술로써 디자인 되었다.
- -HTTP는 IIOP와 RMI에 비해 특별히 높은 기능과 높은 수행능력은 없지만 매우 단순하고 쉬운 구현으로 널리 사용되었다.
- -CGI(Common Gateway Interface)는 웹서버가 요청을 받았을 때 외부프로그램을 수행하고 그 결과를 보내주는 것. 이때 결과는 주로 HTML 페이지이다.
- -Three Tier Model에서.
- [First Tier] 보편적인 유저 인터페이스에서 동작하는 브라우저.
- [Second Tier] CGI 프로그램으로 웹서버에서 수행되는 응용프로그램.
- [Third Tier] 데이터베이스와 트랜젝션 서비스를 제공하는 백엔드 시스템.
- 1.2.2 Web Application
- -Three tier applications - Human interface browser 사용(HTTP, HTML)
- -HTTP, HTML은 Human interface를 위해 디자인된 프로토콜
- -HTML은 문서의 논리적 구조를 표현하기 위해 디자인되었다.(header, title, paragraph) 태그는 이것들을 표현하기위해 정의되었다. 그러나 이것은 인간에게는 좋지만 그 데이터를 다루는 프로그램에게는 좋지않다.
- -XML은 우리는 표현 데이터의 구조를 직접 정의할 수 있다.
- 1.3 XML and Its Application Areas
- 1.3.1 Background of XML
- -HyperText Markup Language(HTML)은 웹 컨텐츠를 표현하는데 널리 사용되고 있다. 이것은 단순한 문법을 가지고있으며 멀티미디어 문서를 만들기 쉽다.
- -Extensible Markup Language(XML)은 document type definition(DTD)를 이용하여 자신의 태그를 정의할 수 있다.
- -HTML과 XML은 같은 기원을 두고 있다. --> Standard Generalized Markup Language(SGML)
- 1.3.2 DTDs -- Validity and Well-formedness
- -<!DOCTYPE> 선언이 있는 XML문서이고 DTD조건으로 지정한 제약에 맞으면 valid라고 한다. 이 제약은 element content model들과 attribute type들을 포함한다.
- -파싱할 수 있는 DTD정의가 없는 간단한 XML문서를 well formed라고 한다.
- 1.3.3 Application Areas of XML
- -XML의 사용 목적
- Meta Content
- 검색시 Metadata를 이용한 검색으로 검색효율을 증대시킬 수 있다.
- HTML은 TITLE태그와 META태그가 문서안에 포함되어있어 처리시 문서를 다 읽어야 하나 XML은 그렇지 않다.
- Rich Document : 다양한 형식 지원(ex. 수식)
- Database : XML문서는 원래의 정보를 보존한다. 따라서 client에서 화면에 출력하는 것 외에 다른 목적으로 사용할 수 있다.(?)
- Messaging : 조직간 또는 조직의 Application system간의 메시지 교환을 제공
- 기업간의 Messaging은 EDI(Electronic Data Interchange)로 대표된다. 하지만 EDI에는 VAN이 필요(비쌈)하고 압축된 패키지를 제공하지 않는다.
- 그래서 VAN보다 싼 인터넷을 통해 B2B Messaging을 활성화. 그러나...
- Internet기반 B2B의 문제점
- 보안문제 -> Public key 암호화로 해결 요즘엔 SSL, S/MIME 사용.
- 메시지의 포멧 -> XML이 해결(EDI는 high skill 요구. 반면 HTML은 많이 알려짐. XML은 HTML과 유사)
- 1.3.4 Why XML in Web Applications?
- -XML을 사용하면 Binary를 사용한 것보다 많은 대역폭과 처리가 요구된다. 그럼에도 불구하고 XML을 쓰는 이유는?
- Simplicity : XML대신 Binary를 사용한다면 메세지 이해를 위해 16진수 덤프가 필요 - "Simplicity wins, efficiency loses."
- Richness of Data Structure : XML은 단순하지만 복잡한 데이터구조 표현가능.(기본은 트리지만 테이블이나 그래프도 가능)
- International Character Handling : UTF-8, UTF-16 모두 지원.
- 1.4 Java's Role in Web Application
- 1.4.1 History of Java
- -Java는 객체지향 프로그래밍 언어-James Gosling(Sun)
- -Java applets는 동적인 표현을 하기위해 사용. 그러나 다운로드에 많은시간이 걸린다. -> 네트워크상에서 다운로드가능한 더 복잡한 프로그램들에게 초점을 맞춤
- -다운받은 프로그램 실행시 이 프로그램들이 모두 안전한 것은 아니다. Java는 sandbox라 불리는 보안기술을 가지고있다. sandbox는 다운된 애플릿의 민감한 연산 수행을 억제한다. -> 전자서명으로 확인된 제공자의 애플릿은 이걸 수행할 수 있게 되어있다.(여기서 애플릿은 인스톨과정이 없어 TCO를 줄여준다)
- 1.4.2 Advantages of Java as programming language
- -Platform Independence : Java는 CPU나 OS와 같은 플랫폼에 독립적. - "Write once, run anywhere.", Java 프로그램은 바이트코드로 컴파일된 후 JVM에 의해 interprete된다. C나 C++보다 속도가 느리다 -> (해결)JIT(Just-in-time) 컴파일러가 바이트코드를 변환시 Machine native code로 실행시 번역하여 속도차 감소시킴.
- -Safety : 포인터가 없다. 메모리 관리를 JVM이 해줌.
- -Productivity
- 인터페이스와 구현의 구분
- 다중상속이나 연산자 오버로딩을 못하게함(실수하기 쉬운부분을 제거)
- 스레드와 모니터를 language-level에서 지원
- -Builtin Internet Support : java.net에서 제공한다.
- -Internationalization : Unicode 사용.
- 1.4.3 Servlet
- -CGI(Common Gateway Interface)의 단점
- 각각의 요청마다 새로운 프로세스를 만들어 오버헤드가 있다.
- 같은 클라이언트의 다중요청을 수용할 수 없다.
- 스크립트 언어는 security hole이 있다.
- -Servlet 으로 해결 : Servlet은 서버에서 수행되는 Java 프로그램. Servlet은 JVM위에서 돌아간다. 서버에서 같은 프로세스로 존재하기때문에 프로세스 전환 오버헤드가 없다. 또 포인터연산이나 배열인덱스 위반등의 문제로 충돌이 일어나는 경우가 없다. 따라서 ideal한 기술.
- 1.4.4 JDBC
- -Web application은 표준 API에 의해 database에 접근. JAVA는 JDBC라는 API를 제공.
- 1.4.5 JavaBeans
- -JavaBean은 Java에서의 software component model이다. Rapidly development가 가능하게 해줌.
Chapter 2: Parsing
- 2.1 Introduction
- 2.1.1 XML Processor
- -XML processor는 XML 문서를 읽고, Application program에게 내용이나 구조를 제공하는데 사용하는 software module.
- -XML processor
- Non-validating processor - Well-formedness인지 판단.
- Validating processor - Well-formedness인지와 Valid document인지 판단.
- -XML processor는 각 processor들 마다 하는 행동이 다르다 -> 그래서 DOM, SAX라는 명세를 만들었다. 하지만 모든 XML processor가 DOM이나 SAX를 지원하는 것은 아님.
- -XML processor와 parser는 비슷한 의미로 쓰인다.
- 2.1.2 Using IBM's XML for Java
- 2.2 Reading XML Document
- -CDATA(Character Data) - 파서에의해 해석되지 않고 바로 응용프로그램에 전달.
- -PCDATA(Parsed Character Data) - 파서가 해석하여 전달.
- 2.3 Printing an XML Document from a Parsed Structure
- -DOM interface Document에는 XML 문서를 변환하는 method가 없다. 따라서 Document interface의 구현 class인 TXDocument클래스의 instance로 수용하여 TXDocument의 print() method를 사용하여야 한다. ( ex. ((TXDocument)doc).print(new PrintWriter(System.out)); )
- XML for Java는 되도록이면 input의 형태를 보존하도록 디자인 되어있다.
- 2.4 Programming Interfaces for Document Structure
- -내부구조를 접근함으로써 XML 문서를 처리하는 과정
- DOM, SAX, ElementHandler
- -DOM(Document Object Model) : tree structure-based API, node는 element, text이다. DOM은 이 node들을 다루게 해준다. DOM-based XML processor는 XML문서 전체구조를 메모리에 만든다. 따라서 문서 전체로 수행하는 application에 적합하다.
- -DOM을 사용할 때 : XML문서를 구조적으로 변형할 때. 예를들어 element들을 특정순으로 정렬할 때, 어떤 element를 tree의 한 장소에서 다른곳으로 이동시킬 때, 메모리의 문서를 다른 application과 공유할 때 적합하다.
- -SAX(Simple API for XML) : event-driven API, data 구조를 만들지 않는다. 대신 XML문서를 스캔하고 event들로 변형시킨다. application은 이 이벤트들을 intercept하여 task를 수행한다. SAX는 data 구조를 만들지 않기때문에 DOM보다 효율적이다.
- -SAX를 사용할 때 : 메모리에 올릴 수 없을만큼 큰 문서를 다룰때, 문서의 구조와 무관한 작업을 수행할 때. (ex. 문서의 element의 총 수를 셀 때, 모든 "name" element를 추출할 때.
- -ElementHandler : DOM, SAX에서 모두 사용. event-oriented task에 적합하지만 element의 내부구조를 다룰 때 application이 ElementHandler를 필요로 함.
- 2.4.1 DOM: Object Model for XML Document
- -Class hierarchy of the DOM Core interfaces.
- -DOM example
- 2.4.2 SAX: Event-Driven API of XML Processor
- - 모든 process는 one-pass. 응용프로그램의 특정 연산은 parsing중에 수행된다. 내부구조변환 과정을 포함하지 않기때문에 lightweight.
- -Sax example
- 2.4.3 Element Handler: Yes another Event-Driven API
- -element handler는 파서가 특정 element를 만났을 때 불려진다. SAX처럼 application은 element에관한 event를 받는다. 하지만 SAX와 다른점은 ElementHandler는 DOM트리를 만든다. 다른말로 ElementHandler는 오직 element에 부속되어있다.
DOM | SAX | ElementHandler | |
Create a tree structure? | Yes | No | Yes |
Event-driven? | No | Yes | Yes |
Types of event available | NA | Document, Element, Text, PI | Element only |
Efficient for large documents? | No | Yes | Yes |
Chapter 3: Generation
- 3.1 Introduction
- DTD와 validity에 대한 걱정없이 DOM tree를 generation하는 것에 대하여 알아볼 것이다.(3.2)
- DTD가 주어졌을때 이에 따르는 valid DOM tree를 만드는 방법에 대하여 알아볼 것이다.(3.3)
- 3.2 Creating an Internal Structure from Scratch