XML이란
- XML은 HTML과 유사한 마크업 언어이다. 마크업이란 <태그></태그> 혹은 제목 : 내용 등의 형태로 데이타를 구조화하는 기법이다. 특히, html이나 xml은 <태그> 마크를 통해 표현한다.
- XML은 html과 유사하나, 태그를 사용자가 생성하고 호출할 수 있다.
회원1.xml
<회원>
<이름>홍길동</이름>
<선호하는지역>서울</선호하는지역>
</회원>
- 한편, XML은 XML Schema라는 기능을 제공하며, 기술한 데이타의 유효성을 검토한다. 아래처럼 명시한 내용에 벗어나는 방식으로 xml을 작성할 경우 오류를 발생시킨다. 그러므로 문서의 유효성을 검토하지 않는 json과 차이를 가진다.
회원.xsd
<element name="회원">
<complexType>
<sequence>
<element name="이름" type="string"/>
<element name="선호하는지역" type="string"/>
</sequence>
</complexType>
</element>
- servlet에서는 web.xml을 통해서 애플리케이션에 필요로한 메타데이타를 저장하는데 사용한다. 왜 xml일까? 그 이유는 오라클의 개발사인 Sun Microsystmes에서 xml을 통해 어플리케이션에 대한 메타데이타를 기술하기로 결정했기 때문이다.
객체 생성과 맵핑
web.xml
- 브라우저에서 웹 어플리케이션에 접근하기 위해서는 xml에 작성한 맵핑을 참고한다. xml은 url과 서블릿을 연결한다.
web.xml
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>servlet_test.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</servlet>
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.write("Hello Servlet!");
}
}
get http://localhost:8090/servlet_test/test
Hello Servlet!
- servlet 클래스는 HttpServlet을 상속해야 한다. HttpServlet을 사용하기 위해서는 servlet_api.jar 를 라이브러리에 추가해야하며, 이는 tomcat 폴더에 있다.
- 상속한 객체는 servlet의 생명 주기를 오버라이딩 할 수 있다. 본 예제에서는 service만을 활용하였다.
- servlet 클래스는 web.xml에서 객체를 생성하고 맵핑해야 한다.
annotation과 @WebServlet
@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.write("Hello Servlet!");
}
}
- @WebServlet 을 통해 어너테이션을 기반으로 맵핑을 함.
- 어너테이션을 메타데이터를 활용하여 xml을 대체함.
- web.xml 에서 metadata-complete="true" 일 경우 모든 메타데이터가 xml에 있다는 설정이므로, 만약 해당 요소를 사용할 경우 값을 반드시 false로 해야 함.
- 어너테이션 annotatation 이란 일종의 metadata로서 어플리케이션의 컴파일과 런타임 과정에 필요로 한 정보를 제공하고 작업을 지시한다. 원하는 클래스, 메서드, 필드에 어너테이션을 추가하여 짧은 코드를 통해 빠른 작업이 가능하다. 그리고 다른 문서와 코드를 열람할 필요 없이, 어너테이션 하나 만으로 해당 코드가 어떤 의도로 작성되었는지를 확인할 수 있어 유지보수에 쉽다.
- 어너테이션은 메타데이터 이외에, 개발자가 작성할 코드를 대신 작성해주는 역할을 하기도 한다(롬복의 Getter와 Setter).
xml과 어너테이션, 둘 중 무엇을 써야 할까?
- 웹 개발을 할 때, 한 회사가 고객에 판매하는 상품은 유사한 형태를 띄기 마련이다. 그러니까 납품하는 웹 사이트의 레이아웃이나 인터셉터, 필터는 반복적인 (다른 말로 완성된) 형태가 존재할 것이다. 이런 경우 타일, 인터셉터, 확장자(*.do) 규칙 등은 xml로 고정하는 것이 좋을 것이다.
- 그러나 각 프로젝트에 구체적으로 필요로한 controller와 url 맵핑은 프로젝트 마다 차이를 가질 것이다. 고객이 필요로한 게시판과 기능이 동일할 것이란 보장이 없기 때문이다. 이런 경우 xml을 사용하기 보다, 어너테이션으로 유연하게 작업하는 것이 좋을 것이다. 특히, 분업을 할 경우 각자 게시판을 담당할텐데, 각자 설정파일을 가지는 것보다, 어너테이션으로 처리하고 패키지만 합치는 것이, 작업을 더 유연하게 할테다.