[JAVA, WSDL] 기상청 웹서비스를 이용한 기상정보 조회

View Comments

이번 관공서 프로젝트를 진행하던 중 기상정보를 조회할 수 있는 기능이 들어가야되서 기상청에서 제공하는 웹서비스를 이용하게 됐다.

WSDL이라는 XML형태로 제공되는 웹서비스 기술언어를 이용하는데 이번 프로젝트에서 처음 접해보는 거라 적용하는데 애를 먹어서

다음 번에 비슷한 작업을 하게 될 경우를 대비해서 정리해 본다.

기상청 웹서비스는 현재 개인에게는 서비스는 하지 않고 관공서나 방재관련쪽에만 서비스를 한다고 한다. (관련 Q&A)

혹시나 관공서쪽 프로젝트를 하면서 기상청 웹서비스를 이용하고자 한다면 기상청에 웹서비스 이용신청서를 작성하여 서비스 이용에 필요한 아이디와 패스워드를 발급받아야 이용 가능하다.

WSDL로 제공되는 기상청 웹서비스는 WSDL 형태로 제공이되고 현재 사용할 프로젝트에 적용하기 위해선 언어에 맞는 Client Stub으로 변환할 필요가 있다.

참여중인 프로젝트는 JAVA를 이용하기에 JAVA에서 쓰기 위한 Client Stub으로 변환하는 방법에 대해서만 정리한다.

   WSDL을 Client Stub으로 변환  

WSDL을 이용하여 Client Stub으로 변환하기 위해서 기상청 시스템 담당자로부터 전달받은 메뉴얼은 작년에 작성된 문서이고 정작 중요한 부분이 설명이 안되어 있어서 그대로 보고 변환하고자 하기엔 어렵다.

JAVA에서 WSDL을 변환하는 유틸은 AXIS 라이브러리를 쓰기도 하고 WAS에서 제공하는 유틸을 사용하기도 한다.

현재 프로젝트에서는 jeus를 사용하기때문에 jeus에서 제공하는 유틸을 이용하기로 한다.

jeus가 설치되어있지 않다면 TmaxSoft 테크넷에서 Trial버전을 다운받아 설치한다. 회원 로그인을 해야만 다운로드가 가능하다.

jeus를 설치하고 jeus 홈 디렉토리의 samples 폴더 아래에 ant_task란 폴더에 보면 wsdl2java란 예제 폴더가 있고 그 안에 genclient 폴더에 보면

build.xml이 있는데 그 파일과 samples 폴더 아래의 common 폴더를 이용하면 된다.

build.xml의 내용을 보면

<?xml version="1.0" encoding="UTF-8"?>
<project name="SurfaceService" default="build" basedir=".">
    <property name="is.app-client.module" value="true"/>
    <import file="./common/common-build.xml"/> -- common-buil.xml의 경로는 자신에게 맞는 경로로 변경
    <taskdef name="wsdl2java" classname="jeus.util.ant.webservices.Wsdl2JavaTask">
        <classpath refid="jeus.libraries.classpath"/>
    </taskdef>
    <target name="-pre-compile">
        <mkdir dir="${build.classes.dir}"/>
        <wsdl2java destDir="${build.classes.dir}"
            verbose="true"
            mode="gen:client"
            doCompile="true" -- true이면 JAVA 소스와 컴파일된 파일이 생성되고 false이면 JAVA소스만 생성
            noDataBinding="false"
            package="kma.websky.client.stub.forecast" -- 변환된 JAVA소스가 담길 package 정의
            wsdl="http://websky.kma.go.kr/services/SurfaceService?wsdl"> -- 변환할 서비스의 WSDL 주소
            <classpath refid="jeus.libraries.classpath"/>
            <classpath refid="classpath"/>
        </wsdl2java>
    </target>
</project>

위 표시된 부분을 자신의 프로젝트에 맞게 변경하여 cmd창에서 위 build.xml파일이 위치한 경로에서 jant를 실행하면 아래 그림과 같이 실행된다.

참고로 기상청 웹서비스 목록은 http://websky.kma.go.kr/ 사이트에서 확인 가능하고 위에서 사용된 WSDL은 지상 웹 서비스이다.

build

WSDL을 JAVA로 변환하기 위한 build


이렇게 변환을 하고 나면 build.xml이 위치한 폴더에 build 폴더와 dist란 폴더가 생성이 되고 build 폴더에는 build.xml에서 정의한 package 경로에 변환된 소스들이 생성이 되고 dist 폴더에는 해당 소스를 압축한 jar 파일이 생성된다.

생성된 것들 중 편한대로 사용하면 된다. jar파일을 이용하고자 하면 WEB-INF 폴더의 lib폴더에 jar파일을 넣어서 사용하면 되고 JAVA소스를 이용하고자 한다면 src폴더아래에 두고 사용하면 된다.

   변환된 Client Stub 사용에 필요한 라이브러리  

Client Stub으로 변환 후 프로젝트에 사용하고자 한다면 변환된 JAVA소스에서 사용하는 관련 라이브러리도 필요하다.

아래 목록이 그 라이브러리들이다.

bootstrap.jar
FastInfoset.jar
javax.jms.jar
jaxrpc-api.jar
jaxrpc-impl.jar
jaxrpc-spi.jar
jaxws-rt.jar
jeus.jar
jeusapi.jar
jeusutil.jar
jeus-ws.jar
saaj-impl.jar

 - 참고1 : 빨간색으로 표시된 jar 파일은 아래 첨부파일을 다운받아 사용하면 된다.

 - 참고2 : 빨간색의 굵게 표시된 JAR파일을 제외하고 나머지 jar 파일은 JEUS 설치 후 JEUS 홈디렉토리 아래 \lib\system 폴더 하위에 존재한다.

   소스에 적용하기  

기상청에서 제공하는 많은 웹서비스들이 있고 각 서비스마다 조회 가능한 기상정보들이 많기 때문에 다 쓸 필요는 없고 필요한 서비스만 가져다 쓰면 된다.

해당 웹서비스의 WSDL을 JAVA 소스로 변환하여 프로젝트에 추가한 후 아래와 같이 사용하면 된다.
/**
* 기상청 웹서비스 관련 Util Class
*/
public class KmaWeatherUtil {
private static SurfaceServiceImplService_Impl impl = null;
private static SurfaceServiceImpl_Stub service = null;

/**
* Default Constructor
*/
public KmaWeatherUtil() {
impl = new SurfaceServiceImplService_Impl();
service = (SurfaceServiceImpl_Stub)impl.getSurfaceService();

service._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "발급받은 ID");
service._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "발급받은 Password");
}

/**
* 주어진 지점코드와 시간의 현재 기상정보를 받아온다.
* @param station_id
* @param time
* @return
* @throws RemoteException
*/
public CurrentWeatherModel getCurrentWeatherInfo(String station_id, String time) throws RemoteException {
return service.getCurrentWeather(station_id, time);
}
}

// 실제 사용하는 부분
// 143은 대구의 지역코드이고 2번째 인자는 String 형태(yyyyMMddHH)의 시간이며 null은 현재 시간
KmaWeatherUtil kmaWtUtil = new KmaWeatherUtil();
CurrentWeatherModel curWtInfo = kmaWtUtil.getCurrentWeatherInfo("143", null);
위 소스에서 getCurrentWeatherInfo 함수는 현재 시간의 기상정보를 가져오고 필요한 파라메터는 조회하고자 하는 위치코드(station_id)와 조회를 원하는 시간(time)을 넘겨주면 되고 현재 시간의 기상정보를 얻을려면 null값을 넘겨주면 된다.

JSP에서 표시되는 결과는 아래 그림과 같이 나온다.

결과


이상으로 변환에 대한 정리를 마친다. 현재 프로젝트에서 사용하는 건 현재 기상정보만을 사용하기때문에 함수 하나로 간단하게 되지만 서비스하고자 하는 기능이 많다면 좀 더 복잡해질거라 본다.

* 이 포스트는 blogkorea [블코채널 : 프로그램에 대한 개발팁 및 유용한 정보 공유합시다.] 에 링크 되어있습니다.

26 Comments (+add yours?)

트랙백0 Tracbacks (+view to the desc.)

[강좌:구미] Embedded Java Programming & Embedded C Programming

View Comments

이거 한동안 강좌가 안올라오다가 한꺼번에 몰아서 개설이 되네요.

이렇게 개설해서 수강자가 많은지는 모르겠는데 대충 개설해놓고 수강자 적으면 폐강해버리는 바보짓 하는 건 아닌가 모르겠습니다 -_-

Embedded Java Programming 강좌는 제목과는 다르게 강의 내용을 보면 Embedded랑은 거리가 먼 내용인 것 같은데

중/고급자를 위한 강좌가 아닌 초급자를 위한 Java 강좌로 보입니다. 기초부터 배우고 싶은 분들을 위한 강좌네요.

Embedded C Programming는 그나마 3일차때부터 임베디드 부분을 다루긴 하지만 심도있는 강좌는 아닌 듯 합니다.

강좌 소개란이 부실한 걸 보면 종이에 적혀있는 것을 대충 옮겨적은 듯한 느낌입니다 -_-;;


1. Embedded Java Programming

1.1 과정 개요

   - 일시 : 2008년 12월 1일(월) ~ 2008년 12월 22일(월) 매주 월,수,금
   - 시간 : 18:30 ~ 22:30 (10일 40시간)
   - 강사 :  [GB테크]
   - 학습비 : 20,000원(80%출석시 전액환불), 교재비 별도
   - 대상 : Java에 대해서 기초부터 확실하게 공부해보고 싶으신 분
   - 강의실 : 금오공과대학교 이오스관, 30명
     
1.2 교육 내용

구분 내용 비고

1일차
(12.1월)
Java를 시작하기 전에.(프로그램,프로그램언어,Java언어의 역사/특징, java플랫폼, JDK의 설치 및 개발톨 사용법) Object(Type[Primitive VS Reference],Array,Scope,Class,Method, Static Keyword,Object,String,StringBuffer)  

2일차
(12.3수)

프로그램의 제어(if-eles, for, while, break, continue,switch),초기화와 오버로딩(생성자, 가비지 컬렉션, 클래스 멤버의 초기화)
 

3일차
(12.5금)
구현 숨기기(Package와 Import, Public, Private,Protected), 코드 재사용  

4일차
(12.8월)
OOP와 다형성, 인터페이스와 내부클래스  

5일차
(12.10수)
예외처리, 컬렉션  

6일차
(12.12금)
Java I/O  

7일차
(12.15월)
쓰레드  

8일차
(12.17수)
GUI  

9일차
(12.19금)
응용 어플리케이션 개발 맛보기  

10일차
(12.22월)
응용 어플리케이션 개발 맛보기  
 
1.3 신청방법

- 학습비 납부계좌 : 농협 785-01-158753 예금주 : 금오공대 산학협력단
- 교육신청 : 홈페이지(http://gdec.kumoh.ac.kr) 로그인 후 신청 (입금순서순 마감)
- 전화문의 : 054) 478-7241



2. Embedded C Programming


2.1 과정 개요

   - 일시 : 2008년 12월 2일(화) ~ 2008년 12월 11일(목) 매주 화,목
   - 시간 : 18:30 ~ 22:30 (5일 16시간)
   - 강사 :  [GB테크]
   - 학습비 : 20,000원(80%출석시 전액환불), 교재비 별도
   - 대상 : Java에 대해서 기초부터 확실하게 공부해보고 싶으신 분
   - 강의실 : 금오공과대학교 이오스관, 30명
     
2.2 교육 내용

 
구분 내용 비고
1일차
1)임베디드 시스템 구조/특징
2)개발환경구축 및 이해
3)임베디드 시스템 메모리 구성
 
2일차
4)I/O처리 방식의 이해
5)C프로그래밍(기본구조,명령문,비트연산,전처리기,배열,포인터초기화)
 
3일차
5)C프로그래밍(배열,포인터활용,구조체,공용체)
6)타켓보드제어(LED)
 
4일차
7)타켓보드 제어(UART,PUSH Button)
8)타켓보드 제어(LCD)
9)ARM기반의 고급 코딩 기술


2.3. 신청방법

- 학습비 납부계좌 : 농협 785-01-158753 예금주 : 금오공대 산학협력단
- 교육신청 : 홈페이지(http://gdec.kumoh.ac.kr) 로그인 후 신청 (입금순서순 마감)
- 전화문의 :
054) 478-7241


  * 이 포스트는 blogkorea [블코채널 : 공돌이의 일상이야기] 에 링크 되어있습니다.   

9 Comments (+add yours?)

트랙백0 Tracbacks (+view to the desc.)

Newer Entries Older Entries