본문 바로가기
넥사크로

넥사크로 Dataset에 대하여

by 인생여희 2019. 11. 22.
반응형

요즘 모 대기업에서 프로젝트를 진행하고 있다. 개발환경은 넥사크로 + 스프링부트+ JPA + etc.. 을 사용해서 개발진행을 하고 있다. 넥사크로와 스프링 부트를 사용하면서 기록해두면 좋을 내용들을 포스팅 해볼려고 한다.

1.Dataset
넥사크로에는 데이터셋이라는 개념이 있다. 이름에서도 알 수 있듯이 데이터셋은 데이터를 쉽게 다룰 수 있게 도와주는 객체 같은 녀석이다. 데이터셋의 가장 중요한 역할은 데이터베이스 자원에 여러 사람들이 연결해서 생기는 오버헤드를 줄이는 것이다. 그래서 DB에서 필요한 데이터를 수시로 콜해서 가져오는것이아니라 테이블 전체의 데이터를 넥사크로의 특정 데이터셋에다가 담아두고 목적에 맞게 가공하여 사용한다. 이것을 비연결방식이라고 한다. 이 데이터셋은 그리드(테이블), 콤보박스, 셀렉트 박스등 넥사크로의 다양한 엘리먼트들과 연동해서 데이터를 쉽게 화면에 보여줄 수 있다. 이것을 데이터 바인딩이라고 한다. 

2.Dataset 구조
데이터셋은 기본적으로 이름을 정해주어야 한다. 예를들어 회원과 관련된 데이터를 다루는 데이터셋인경우 ds_member, ds_user 와 같이 이름을 지정해줄 수 있다. 이 이름은 id 이기도 하고 스크립트단에서 데이터셋을 다루기 위해서 필수적인 녀석이 id 이다. 그리고 데이터셋에는 칼럼이름과 타입이 존재한다. 반드시 필수적으로 기입해야 한다. 마치 db 테이블과 유사하다.  회원의 이름을 담을 칼럼에는 이름을 userName, 타입은 String 같은 형식으로 지정해 주면 되겠다. 반드시 영어로 작성해야 한다!... 자세한 타입과 사용법은 넥사크로 홈페이지를 참고하자.

3.넥사크로 X 스프링 부트
오늘 정리하고 싶었던 내용이다. 넥사크로와 스프링부트를 어떻게 연동하는지는 다음 포스팅에..기회가 된다면..! 
일단 오늘은 스프링부트에서 어떤형식으로 데이터를 던지고 넥사크로에서는 스프링부트가 던진 데이터를 어떻게 dataset으로 변환해서 사용하는지를 포스팅해보려고 한다.

데이터셋을 까보면 xml 로 되어 있다. 대표적인 태그 몇가지만 알아보자.
먼저 <Dataset id ="ds_member"> 태그. 입력한 데이터셋의 id 가 속성값으로 적혀있다. 
<ColumInfo> 는 생성한 칼럼의 이름과 타입과 크기가 적혀있다.
<Rows> 이 태그 안에 행 데이터가 들어있고 <Row>행 데이터 안에 <Col> 칼럼 데이터가 존재한다. 대략 아래와 같다. 

<Dataset id="ds_member">
          <ColumnInfo>

               <Column id="name" size="5" type="STRING"/>
               <Column id="age" size="10" type="STRING"/>
          </ColumnInfo>
          <Rows>
               <Row>
                    <Col id="name">길동</Col>
                    <Col id="age">12</Col>
               </Row>
               <Row>
                    <Col id="name">흥민</Col>
                    <Col id="age">23</Col>
               </Row>
          </Rows>
     </Dataset>

dataset이 이런형식이라면 스프링 부트에서는 어떻게 데이터를 던저주어야 하나? dataset에서 하나의 row는 java 에서 Map과 맵핑될 수 있다. Map이 key, value 구조이기 때문에 java 에서 map 객체를 생성해주고, key 값으로 name, value 값으로 길동을 넣고, 또 key 값으로 age, value 값으로 12를 넣으면 된다. 데이터가 들어있는 Map 객체를 List 배열에 담아서 넥사크로로 던져준다. 즉, dataset의 전체 row는 List , 행 하나하나는 Map 이라고 생각하면 된다. 아래 로직을 보면 쉽게 이해가 될 것이다.

//예제 소스

public List<?> selectMember(){

  //전체 ROWS
  List<Map<String,Object>> resultObject = new ArrayList<>();

  //row 하나
  Map<String,Object> member = new HashMap<String,Object>();
  member.put("name", "길동");
  member.put("age", "12");

  //전체 rows 에 넣기
  resultObject.add(member);

  //row 둘
  Map<String,Object> anotherMember = new HashMap<String,Object>();
  anotherMember .put("name", "흥민");
  anotherMember .put("age", "23");

  //전체 rows 에 넣기
  resultObject.add(member);

  return resultObject;
}

이해를 돕기위해서 최대한 간단하게 로직을 작성했다. 도움이 조금이라도 되길.

 

 

반응형

댓글