개발/개발TIP

eXERD 용어사전을 DB로, 또 그 반대로 옮기는 방법

독코더 2020. 4. 7. 08:23
반응형

eXERD 용어사전을 DB로, 또 그 반대로.

먼저 프로젝트를 생성해준 후,

DB로 옮기고 싶은 용어사전 파일을 해당 프로젝트 안에 넣어줍니다.

 

파일을 실행시켜 보면,

<term description="" name="" physicalDescription="" physicalName="" tag=""/>의 형태로 구성됩니다.

 

name = 논리명
description 논리설명
physicalDescription = 물리명
physicalName = 물리설명
tag 태그 를 의미합니다

 

이제 용어사전의 내용을 담아줄 XdicVo객체를 생성해보겠습니다.

위에서 살펴본 내용 외에도

project_id = 프로젝트 id

author_id = 작성자 id

created_at = 생성일시

updated_at = 수정일시

를 추가하여 데이터의 정확성을 높여줍니다.

물론, getter setter도 정의해줍니다.

 

용어사전은 태그별로 관리됩니다.

예를들어 '건물번호'라는 용어의

논리명, 논리설명,물리명,물리설명을 '기록물관리'

라는 태그로 감싸고 있는 형태라고 생각할 수 있습니다.

그렇기에 tag를 담아 줄  tagVo도 생성해줍니다.

 

 

 

 

 

 

 

Tagvo는 크게 담을 내용이 없기 때문에 이처럼

단순한 구조를 갖습니다.

 

 

 

 

 

 

 

해당 vo객체를 통해 담을 그릇을 만들었다면, DB에 옮겨담을 테이블을 만들어줍니다.

 

쿼리문을 작성하여 입력과 수정, 조회를 가능하게 만들어 줍니다.

 

sqlSessionFactory를 이용해 데이터를 담아줄 dao클래스를 생성해줍니다.

 

 

기본 설정은 끝났습니다. 이제 제일 중요한 Main을 작성해 보겠습니다.

본인은 JSONObject 와 JSONArray를 이용했습니다.

우선 코드를 살펴보면,

32줄: 명령 행 인수가 0일 경우에만 프로그램을 호출

34줄: 앞서 만들었던 dao클래스를 생성

36줄: 용어사전파일을 string타입으로 쓰기위해 본인은 stringBuilder를 사용

40~50줄: 먼저 용어사전 파일을 읽기위해 용어사전의 경로를 path에 지정

인코딩언어는 UTF-8로 지정

이후엔 readAllLines를 이용해 용어사전의 내용을 list에 담아주고 다시 향상된 for문을 이용해 stringBuilder로 생성한 xml에 append해줌

52~54줄: 이렇게 하면 stringBuilder xml은 xml파일형식이여서 java에선 사용불가

그렇기때문에 JSONObjectJSONArray를 이용해서 json으로 파싱, string으로 찍어줌

그중에서도 "tm:termDictionary"오브젝트의 "term"이라는 키값을 가진 배열은 jsonArray에 담고, "tag"라는 키값을 가진 배열은 jsonArray2에 담아줌

58~59줄: 이제 string으로 파싱한 데이터를 DB에 담기위해 for문을 term배열의 길이만큼 돌려서 xdicVo에 담아줘야함

60줄: JSONObject를 이용해 jsonArray의 한줄을 저장

62~76줄: 그 한줄 안에서 각각의 키값을 가지고 있다면 string.format을 이용해서 해당 값을 xdicVo객체의 값에 set해줌

String.format("%s", x);는 ,뒤의 값 x를 해당위치에 위치시킨다는 말

(참조: https://interconnection.tistory.com/116)

그리곤 담은 xdicVo객체를 insert

79~86줄: 위와 같은 방법으로 이번엔 tag값을 insert

 

 

이렇게 하면 db에 용어사전 데이터가 잘 들어간 것을 확인할 수 있습니다.

 

이번엔 반대로 DB에 있는 내용을 xml로 옮겨오는 코드를 작성해보겠습니다.

88줄: if (args[0].equals("r")) 를 통해 프로그램을 호출 할 때 r을 입력하여 실행

90~94줄: select문을 통해 xdicVo, tagVo 리스트를 불러옴

97~98줄: string타입을 xml파싱해주기위해 documentBuilderFactory를 이용

101~107: 기본적인 tm엘리먼트를 생성하고, doc의 자식으로 넣어준 후 속성명, 속성값을 넣고 set 

110~ 120줄: 94줄을 통해 담은 xdicVoList를 for문을 돌리고 그안에서 term엘리먼트를 생성, tm의 자식으로 넣어주고 속성명, 속성값을 set

121~126줄: 위와 같은 방식으로 tagVoList관련 데이터를 set

128~133줄: xml파일로 쓰기 위해TransformerFactory를 생성한 후 기본적인 환경을 구성

135줄: DOM파서를 이용해 xml구조에 대응하는 객체의 트리를 유지시킴

136줄: 만들어줄 파일명을 지정

138줄: 마지막으로 만들어진 XML 엘리먼트 노드들이 연결된 Document를 가지고 XML 파일을 생성하는데 Transformer 클래스를 사용

 

 

 

 

 

 

 

 

이렇게 해서 xml을 DB로, DB에서 xml로 가져오는 예제를 알아보았습니다.

자주는 아니지만 사용할 때 마다 헷갈리는 부분이 있어서  정리해봅니다.

반응형