일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 웹 커리큘럼
- reactive
- Spring Framework
- 웹 스터디
- 웹앱
- reactor core
- Spring Batch
- 서버운영
- spring reactive
- reactor
- ipTIME
- 공유기 서버
- Today
- Total
Hello World
기상청 사이트 서울 날씨 주간 예보 조회 - Spring Framework 본문
이전 Java 기상청 사이트 서울 날씨 주간 예보 조회 프로그램을 Camel Framework와 Spring Framework와 결합한 프로그램으로 재 작성한다. 이 프로그램도 소스 100 줄 이내 프로그램이다.
목차[숨기기] |
사용 기술
이전 예제에서 Spring Framework가 추가 되었다.
기술 | 설명 |
---|---|
Java 6 | Java 6 |
Apache Camel[1] | Apache EIP 프레임워크 2.8.0 |
Spring [2] | Spring application 프레임워크 3.0.5 |
Apache HttpClient | Apache http 클라이언트 라이브러리 3.1 |
Eclipse IDE | Java 통합 개발 환경 3.6 |
Maven | Java 빌드 툴, 의존 라이브러리 포함에 사용 |
프로그램 유스케이스
이전 예제와 프로그램 유스케이스는 같다, Spring Framework의 기술을 적용하는 개발 방식만 변경된다.
- 기상청 웹 사이트에서 서울, 경기 지역 날씨 주간 예보 XML 정보를 얻는다.
- XML 정보에서 서울 날씨 주간 정보를 추출한다.
- 서울 지역 날씨를 화면에 출력한다.
EIP 패턴
- EIP 경로 정의
이전 예에서는 EIP 경로를 Java Source에 정의하였으나, 이 예제에서는 Spring Context XML 파일에 EIP 경로를 정의한다.
- applicationContext.xml
- <?xml version="1.0" encoding="utf-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:camel="http://camel.apache.org/schema/spring"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://camel.apache.org/schema/spring
- http://camel.apache.org/schema/spring/camel-spring.xsd">
- <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <jmxAgent id="agent" disabled="false" />
- <route>
- <from uri="direct:seoul" />
- <to uri="http://www.kma.go.kr/weather/forecast/mid-term-xml.jsp?stnId=109" />
- <convertBodyTo type="org.w3c.dom.Document" />
- <to uri="bean:weatherExtractor?method=print" />
- </route>
- </camelContext>
- <bean id="weatherExtractor" class="com.brm.weather.WeatherExtractor" />
- </beans>
- EIP 다이어그램
의존 라이브러리
이전 의존 라이브러리에서 camel-sping 의존성을 추가하였다.
- pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>weather</groupId>
- <artifactId>weather</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-http</artifactId>
- <version>2.8.0</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.16</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.6.1</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-spring</artifactId>
- <version>2.8.0</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- </project>
- 라이브러리 의존 다이어그램
- 의존 라이브러리 목록
이전 예제에서 camel-spring 의존성을 추가하여 관련된 의존 라이브러리 목록이 추가 되었다.
라이브러리 | 설명 |
---|---|
camel-core-2.8.0.jar | Apache Camel Core 라이브러리 |
camel-http-2.8.0.jar | Apache Camel Core Http Component 라이브러리 |
commons-codec-1.2.jar | Apache Commons Codec 라이브러리 |
commons-httpclient-3.1.jar | Apache Commons Http Client 라이브러리 |
commons-logging-1.0.4.jar | Apache Commons Logger 라이브러리 |
commons-management-1.0.jar | Apache Commons Management 라이브러리 |
geronimo-servlet_2.4_spec-1.1.1.jar | Apache Geronimo Servlet 2.4 spec 정의 라이브러리 |
log4j-1.2.16.jar | log4j 라이브러리 |
slf4j-api-1.6.1.jar | slf4j logger 라이브러리 |
slf4j-log4j12-1.6.1.jar | slf4j log4j logger 라이브러리 |
camel-spring-2.8.0.jar | Camel Spring 결합 라이브러리 |
spring-core-3.0.5.RELEASE.jar | Spring Core 라이브러리 |
spring-beans-3.0.5.RELEASE.jar | Spring Bean 라이브러리 |
spring-context-3.0.5.RELEASE.jar | Spring Context 라이브러리 |
spring-expression-3.0.5.RELEASE.jar | Spring Expression 라이브러리 |
spring-asm-3.0.5.RELEASE.jar | Spring Asm 라이브러리 |
spring-aop-3.0.5.RELEASE.jar | Spring Aop 라이브러리 |
spring-tx-3.0.5.RELEASE.jar | Spring Transaction 라이브러리 |
aopalliance-1.0.jar | AOP 표준화 라이브러리 |
프로그램
이번 예제에서는 EIP 경로가 정의된 Spring Framework XML 파일을 로드하는 로직이 등장하고, Camel Framework가 제공하는 Main 클래스를 사용하여 프로그램을 구동한다. 아래 참조사이트에서 본 프로그램의 Eclipse 프로젝트를 다운로드 [3] 받을 수 있다.
- SpringMain.java
- /*******************************************************************************
- *
- * 파일명 : SpingMain.java
- * 설명 : Sping Framework 결합 메인 프로그램
- *
- *******************************************************************************/
- package com.brm.weather;
- import org.apache.camel.ProducerTemplate;
- import org.apache.camel.spring.Main;
- public class SpringMain {
- public static void main(String[] args) throws Exception {
- SpringMain main = new SpringMain();
- // EIP 경로 정의 Spring Framework XML
- main.run("classpath:applicationContext.xml");
- }
- public void run(String conf) throws Exception {
- Main camel = new Main();
- camel.setApplicationContextUri(conf);
- camel.start();
- ProducerTemplate producer = camel.getCamelTemplate();
- producer.sendBody("direct:seoul", "");
- camel.stop();
- }
- }
- WeatherExtractor.java
날씨 정보를 추출하는 Bean은 이전 예제와 같다.
- /*******************************************************************************
- *
- * 파일명 : WeatherExtractor.java
- * 설명 : 서울 지역 주간 날씨 예보 출력 Bean
- *
- *******************************************************************************/
- package com.brm.weather;
- import com.sun.org.apache.xpath.internal.XPathAPI;
- import javax.xml.transform.TransformerException;
- import org.w3c.dom.DOMException;
- import org.w3c.dom.Document;
- import org.w3c.dom.Node;
- import org.w3c.dom.traversal.NodeIterator;
- public class WeatherExtractor {
- /*
- * 주간 날씨 정보를 화면에 출력
- */
- public void print(Document doc) throws TransformerException {
- // location 서울 엘리먼트 검색
- String xpath = "//wid/body/location[@city='11B10101']";
- NodeIterator locations = XPathAPI.selectNodeIterator(doc, xpath);
- Node location;
- while ((location = locations.nextNode()) != null) {
- NodeIterator datas = XPathAPI.selectNodeIterator(location, "data");
- Node data;
- while ((data = datas.nextNode()) != null) {
- System.err.println(getText(data, "numEf") + "일 후 예보");
- System.err.println("\t날짜 : " + getText(data, "tmEf"));
- System.err.println("\t날씨예보 : " + getText(data, "wf"));
- System.err.println("\t최저온도 : " + getText(data, "tmn") + " 도");
- System.err.println("\t최고온도 : " + getText(data, "tmx") + " 도");
- System.err.println("\t신뢰도 : " + getText(data, "reliability"));
- }
- }
- }
- private String getText(Node data, String xpath) throws TransformerException {
- return XPathAPI.selectSingleNode(data, xpath).getTextContent();
- }
- }
- 프로그램 실행 결과
날짜 : 2011-09-19
날씨예보 : 흐림
최저온도 : 17 도
최고온도 : 21 도
신뢰도 : 낮음
...
맺음말
기상청 사이트 서울 날씨 주간 예보 조회 프로그램을 이번에는 Camel Framework와 Spring Framework를 결합하여 작성하였다. 이 예제를 통해 Camel Framework가 Spring Framework와 잘 결합되는 것을 볼 수 있다. 이 예제에서는 맛보기 수준이지만 Camel Framework는 거의 모든 EIP 경로를 Spring XML에 정의할 수 있고, Spring Framework 에서 정의한 Bean을 자유롭게 사용할 수 있는 기술을 제공한다. Spring Framework가 Java application Framework의 de facto 표준 프레임워크로 오랫동안 성숙된 Enterprise 기술이나 메시지 비동기 전송 기술에 대한 고려가 부족한데, Camel Framework의 메시지 비동기 전송 기술을 Spring Framework와 결합하여 활용하면 Enterprise 아키텍처 구성의 새로운 방법론을 찾을 수 있을 것이다.
출처: http://www.barunmo.com/wiki/index.php/%EA%B8%B0%EC%83%81%EC%B2%AD_%EC%82%AC%EC%9D%B4%ED%8A%B8_%EC%84%9C%EC%9A%B8_%EB%82%A0%EC%94%A8_%EC%A3%BC%EA%B0%84_%EC%98%88%EB%B3%B4_%EC%A1%B0%ED%9A%8C_-_Spring_Framework
'Spring > 3.x' 카테고리의 다른 글
spring cache의 적용(ehcache) (0) | 2016.04.18 |
---|---|
1장 스프링 시큐리티란? (0) | 2016.02.24 |
Spring – JMS 적용하기 (0) | 2016.02.22 |
JMS 개념 및 Spring에서 지원하는 JMS, MDP (0) | 2016.02.22 |
Spring Batch 개념 정리 (0) | 2016.02.22 |