오브젝트 플로우 에디터
본 장에서는 오브젝트 플로우 에디터(Object Flow Editor)에서 플로우 디자인을 생성, 편집하는 절차와 방법에 대해 설명한다.
1. 개요
오브젝트 플로우 에디터는 각각의 오브젝트 모듈을 만들고 그 모듈들을 조합하여 새로운 오브젝트를 다양하게 만들 수 있는 오브젝트 기반 아키텍처이다. 오브젝트 플로우 에디터를 통해 서비스의 수행 흐름을 설계할 수 있으며 재사용 가능한 비즈니스 오브젝트(Biz Object, BO)의 조립을 통해 서비스 오브젝트(Service Object, SO) 및 잡 오브젝트(Job Object, JO)를 개발할 수 있다.
업무 Layer에서 객체 생성을 지양하고 Annotation을 통해 메타 데이터를 삽입하고 프레임워크에서 객체의 생성, 운용, 소멸 등의 객체 라이프 사이클을 담당한다. Dependency Injection을 사용하여 Business Layer에서 자신의 의존적인 리소스나 Collaborator 객체에 대한 Lookup의 책임을 가지지 않게 하고 프레임워크에서 객체간의 관계를 설정하고 서비스를 수행하므로 서비스별 객체 관리가 가능하도록 되어 있다. ProObject에서는 Layer별 역할 정의가 정확하게 표현되어 있고 오브젝트 플로우 에디터에서 Layer별 오브젝트를 쉽고 편리하게 조합, 설계할 수 있다.
오브젝트 플로우 에디터를 이용하여 오브젝트를 생성할 수 있는 모듈은 다음과 같다.
-
Biz Object(이하 BO)
비즈니스 기능을 수행하는 재사용성의 단위로 SO나 JO에서 레퍼런스 호출되며 정보 처리 및 계산, DO 호출 후 데이터 가공 등을 수행한다.
-
Service Object(이하 SO)
서비스를 수행 및 관리하는 오브젝트로 비즈니스 오브젝트를 Orchestration하는 플로우 중심 애플리케이션이다.
-
Job Object(이하 JO)
배치를 수행할 때 Task를 정의하고 데이터 가공할 BO의 수행 순서 및 런타임에 스레드 및 DB 세션관리를 제어할 수 있다.
약어
다음은 본 장에서 사용하는 약어에 대한 설명이다.
약어 | 설명 |
---|---|
DO |
Data Object |
DOF |
Data Object Factory |
DB DOF |
DB DataObjectFactory |
File DOF |
File DataObjectFactory |
JO |
Job Object |
BO |
Biz Object |
SO |
Service Object |
QO |
Query Object |
2. 오브젝트 모듈 개발 절차
다음은 오브젝트 모듈을 개발하는 과정에 대한 설명이다.
-
오브젝트 생성
ProStudio에서 오브젝트를 생성하기 위해 New Object 화면을 통해 기본 정보를 등록한다. 각 오브젝트별 생성 방법은 해당 절의 설명을 참고한다.
-
서비스 또는 업무 플로우 다이어그램 작성
생성된 오브젝트의 기본 정보를 기준으로 오브젝트 플로우 에디터에서 서비스 또는 업무 플로우 다이어그램을 작성한다.
-
플로우 내용 편집
오브젝트 플로우 에디터의 서비스 또는 업무 플로우 다이어그램의 프러퍼티 및 편집 화면에서 플로우 내용을 편집한다.
-
모듈 커밋
모듈 작성 후 커밋을 수행한다.
-
서비스 및 Job 등록
모듈 커밋 완료 후 서비스 및 Job 등록을 수행한다.
-
테스트 및 실행
BO 모듈은 단위테스트 수행, SO는 ProStudio 및 ProManager에서 테스트 및 실행할 수 있다.
3. Biz Object(BO)
비즈니스 기능을 수행하는 재사용성의 단위로서 SO에서 레퍼런스가 호출되며, 정보 처리 및 계산 DOF를 호출한 후 데이터 가공 등을 수행한다. BO에는 Pojo java를 지원하는 BO 및 Design을 지원하는 BO(Design)이다.
3.1. BO 생성
기본 BO의 경우는 개발자가 소스 로직 전체를 편집할 수 있다. 앞서 설명한 BO(Design)의 문법을 모두 작업 가능한 영역이다. 관리적인 측면에서는 가독성을 위한 EMB를 지원하지 않기 때문에 제한적인 부분에서만 사용하는것을 권장한다.
다음은 BO를 생성하는 과정에 대한 설명이다.
-
Package Explorer의 컨텍스트 메뉴에서 [New] > [BizObject]를 선택한다.
-
New Biz Object 화면에서 BO를 생성하기 위해 기본 정보를 설정하고 [Finish] 버튼을 클릭한다.
New Biz Object 화면항목 설명 프로젝트
생성할 BO가 위치할 실제 프로젝트명을 입력한다.
패키지
실제 사용하는 패키지 네이밍 규칙에 따라 패키지명을 정의한다.
이름
생성할 BO의 논리명을 입력한다.
클래스
생성할 BO의 물리명을 입력한다. 메타에 등록되는 이름으로 동일 패키지 내에서 유일해야 한다.
설명
생성할 BO에 대한 부가 설명을 입력한다.
3.2. BO 생성(Design)
다음은 BO를 생성하는 과정에 대한 설명이다.
-
Package Explorer의 컨텍스트 메뉴에서 [New] > [BizObject(Designer)]를 선택한다.
-
New Biz Object 화면에서 BO를 생성하기 위해 기본 정보를 설정하고 [Finish] 버튼을 클릭한다.
New Biz Object 화면항목 설명 프로젝트
생성할 BO가 위치할 실제 프로젝트명을 입력한다.
패키지명
실제 사용하는 패키지 네이밍 규칙에 따라 패키지명을 정의한다.
리소스를 생성하는 경우 Fix된 Nameing Rule Check 기능을 제공하며, 자세한 내용은 Class Naming Rule Check를 참고한다.
클래스명
생성할 BO의 물리명을 입력한다. 메타에 등록되는 이름으로 동일 패키지 내에서 유일해야 한다.
상위 클래스
상속 받을 오브젝트를 선택할 수 있다.
[탐색] 버튼을 클릭해서 상위 클래스를 등록할 수 있다. [삭제] 버튼을 클릭하면 상위 클래스 등록이 삭제된다.
인터페이스 클래스
구현할 인터페이스 오브젝트를 선택할 수 있다.
[추가] 버튼을 클릭하면 인터페이스 클래스 등록 화면이 나타난다.
추가된 인터페이스를 지정한 후 인터페이스 [삭제] 버튼을 클릭할 때 해당 인터페이스는 적용되지 않는다.
한글명
생성할 BO의 논리명을 입력한다.
설명
생성할 BO에 대한 부가 설명을 입력한다.
'인터페이스 클래스' 항목에서 [추가] 버튼을 클릭하면 인터페이스 클래스 등록이 나타난다. 검색할 인터페이스명을 입력하면 검색 내용이 조회된다. 적용할 인터페이스를 선택한 후 [OK] 버튼을 클릭한다.
인터페이스 클래스 등록 화면 -
BO 생성이 완료되면 디자인 화면(BO 디자인 에디터)으로 이동한다.
3.3. Design Editor
기본 디자인 에디터는 기본 정보를 등록할 때 입력했던 물리명으로 클래스를 생성하며, 논리명은 최상위 박스의 이름으로 보인다.
기본 디자인 에디터는 Super Class(부모 클래스)와 해당 BO로 이루어져 있다. 에디터에서 Super Class 및 BO의 멤버 변수와 메소드를 정의할 수 있다. 생성된 메소드와 멤버 변수의 내용은 Super Class 박스, 메소드 박스, 멤버 변수 박스에서 확인할 수 있다. 클래스와 변수, 메소드를 정의하면 각 박스에 내용이 삽입된다. 자세한 내용은 EMB Designer를 참고한다.
-
[디자인] 탭
오브젝트의 기본 정보를 등록한 후 나타나는 초기 화면으로 BO/SO의 메소드 내역과 선언된 변수 리스트를 조회할 수 있다. 기본 디자인 에디터의 메소드를 더블클릭하면 EMB Designer으로 이동한다.
-
[소스] 탭
[소스] 탭의 소스 편집기에서 적용된 모듈의 로직을 확인할 수 있으며 소스를 직접 추가, 편집, 삭제할 수 있다. 소스 편집기는 편집 가능한 영역과 자동 생성된 Source 영역(소스젠)으로 구분된다.
다음은 소스 편집기에서 자동 생성된 "이너 모듈" 아래에 편집 가능 영역에 "버추얼 모듈"을 추가한 예제이다.
소스 편집기 화면 예
3.3.1. 툴바
디자인 화면은 디자인 툴바를 통해 멤버 변수 선언, 메소드 정의, 삭제, 비구현 메소드 정의 등 로직을 추가 및 편집, 삭제할 수 있다.
아이콘 | 설명 |
---|---|
(화살표 이동) |
메소드 플로우 에디터에서 BO 기본 디자인 화면으로 이동한다. |
(화살표 이동) |
BO 기본 디자인 화면에서 이동하고자 하는 메소드를 선택한 후 플로우 에디터로 이동한다. |
(삭제) |
정의한 메소드 및 변수를 삭제할 수 있다. 자세한 내용은 "삭제"를 참고한다. |
(XOR 처리) |
이너 모듈의 XOR 처리하는 아이콘으로 플로우 Editor에서만 사용 가능하다. 자세한 내용은 "XOR 처리"를 참고한다. |
(산출물 내보내기) |
사이트 커스터마이징 영역으로 산출물 템플릿을 등록하여 산출물 내보내기를 할 수 있다. 자세한 내용은 "산출물 내보내기"를 참고한다. |
(Constructor) |
개발자가 Constructor를 정의할 때 사용한다. 자세한 내용은 "Constructor"를 참고한다. |
(삭제)
디자인 에디터에서 메소드와 변수를 지정한 후 [삭제] 아이콘을 클릭하면 메소드와 변수를 삭제할 수 있다. [-] 버튼을 이용한 삭제는 Design Editor에서 멤버 변수 및 메소드 선언 하위에 설명되어 있다.
(XOR 처리)
[XOR 처리] 아이콘은 EMB Designer의 플로우 에디터에서 사용된다. IF 타입의 이너 모듈을 동시에 여러 개 지정한 후 [XOR 처리] 아이콘을 클릭하면 디자인 에디터에서 XOR 처리된 이너 모듈을 확인할 수 있다.
-
XOR 처리를 하지 않은 경우
다음은 XOR 처리를 하지 않은 경우 디자인 편집화면과 소스젠 화면이다.
디자인 에디터 - 툴바 - XOR 미처리 - 디자인 영역디자인 에디터 - 툴바 - XOR 미처리 - 소스젠 -
XOR 처리를 한 경우
XOR 처리를 위해서는 먼저 '타입'을 'if’로 변경해야 한다.
디자인 에디터 - 툴바 - XOR 처리 - 디자인 영역 (1)다음은 XOR 처리를 하지 않은 경우 디자인 편집화면과 소스젠 화면이다.
디자인 에디터 - 툴바 - XOR 처리- 디자인 영역 (2)디자인 에디터 - 툴바 - XOR 처리 - 디자인 영역 (3)디자인 에디터 - 툴바 - XOR 처리 - 소스젠
(산출물 내보내기)
작성한 BO에 대한 정보를 [산출물 내보내기] 아이콘을 클릭하면 Word 문서로 Export한다. 해당 문서는 프로젝트의 gen-doc 폴더 하위에 생성된다. 산출물 내보내기 기능에 대한 자세한 내용은 산출물 내보내기를 참고한다.
문서에 대한 내용을 추가 또는 변경하려면 확장점 플러그인 설치 및 구현해야 한다. 플러그인 설치에 대한 자세한 내용은 확정점 플러그인 설치 및 구현을 참고한다.
(Constructor)
BO 개발자가 직접 Constructor를 정의하는 경우 [Constructor] 아이콘을 클릭해서 Constructor Method를 추가한다.
추가한 Class Constructor를 더블클릭하면 EMB Designer 화면에서 모듈을 추가할 수 있다. 다음은 버추얼 모듈을 추가한 화면이다.
EMB Designer 화면에서 추가한 버추얼 모듈을 더블클릭하면 소스 코딩을 할 수 있다.
3.3.2. Super Class
Super Class 박스의 [+], [-] 아이콘을 클릭하면 Super Class를 선언하거나 삭제할 수 있다.
다음은 디자인 에디터에서 Super Class를 선언하는 과정에 대한 설명이다.
-
Super Class 박스에서 [+] 버튼을 클릭한다.
-
Super Class를 선택하고 [OK] 버튼을 클릭한다.
디자인 에디터 - Super Class 선언 (2) -
Super Class 박스에 선택한 클래스 정보가 등록된다.
디자인 에디터 - Super Class 선언 (3)
3.3.3. 멤버 변수
멤버 변수 정의 박스에서 변수를 선언하거나 미사용 필드 분석, 변수 삭제 등의 작업을 할 수 있다.
아이콘 | 설명 |
---|---|
(미사용 필드분석) |
멤버 필드로 선언된 필드 중 BO에서 단 한번도 사용되지 않은 필드를 사용자에게 보여준다. 자세한 내용은 "미사용 필드분석"을 참고한다. |
(변수 선언) |
멤버 변수 박스 안의 [+] 버튼을 클릭하면 변수 선언 화면(디자인 에디터 - 변수 선언 화면)이 나타나며 DO/DOF Type, Primitive Type, Object Type별로 변수 등록이 가능하다. 자세한 내용은 "변수 선언"을 참고한다. |
(변수 삭제) |
정의한 변수를 삭제할 수 있다. 자세한 내용은 "변수 삭제"를 참고한다. |
(미사용 필드분석)
멤버 필드에 선언되어 있는 변수임에도 불구하고 BO 로직에서 사용되지 않은 필드들은 [미사용 필드분석] 아이콘을 클릭하면 찾아준다. BO에서 사용되지 않은 변수의 경우는 빨강색으로 표시된다.
(변수 선언)
다음은 변수 선언하는 과정에 대한 설명이다.
-
멤버 변수를 선언하기 위해 멤버 변수 박스 안의 [변수 선언] 아이콘을 클릭한다.
-
변수의 기본 정보를 등록할 수 있는 변수 선언 화면이 나타난다. 변수 타입은 DO, DOF, QO, Primitive, Object 5가지 타입을 지원한다.
디자인 에디터 - 변수 선언 화면다음은 검색 영역의 [DO, DOF, QO 타입], [Primitive 타입], [Object 타입] 탭에 대한 설명이다.
-
[DO, DOF, QO 타입] 탭
[DO, DOF, QO 타입] 탭은 메타에 등록된 DO, DOF, QO 리소스의 변수를 선언할 때 사용한다.
구분 설명 DO
일반 변수 선언 영역에 변수 정보가 나타난다.
-
변수 타입 : FIXED, VARIABLE 두 가지 종류의 배열로 선언할 수 있다.
-
FIXED 배열 : '크기' 항목에 설정된 크기의 배열로 선언된다.
-
VARIABLE 배열 : ArrayList로 선언된다.
-
-
Inject : 해당 리소스의 injection 범위를 'NONE', 'Inject' 중 하나를 지정할 수 있다. (기본값: NONE(사용하지 않음))
-
접근 제어자 : private, public, protected 중 하나를 지정한다.
-
Getter, Setter : 체크박스를 이용해 DOF의 getter와 setter를 자동 생성할 수 있다.
DOF
DOF 변수 선언 영역에 변수 정보가 나타난다.
-
데이터소스 : DOF가 사용할 데이터소스를 선택한다.
-
접근 제어자 : private, public, protected 중 하나를 지정한다.
-
Getter, Setter : 체크박스를 이용해 DOF의 getter와 setter를 자동 생성할 수 있다.
QO
QO 변수 선언 영역에 변수 정보가 나타난다.
-
데이터소스 : QO가 사용할 데이터소스를 선택한다.
-
접근 제어자 : private, public, protected 중 하나를 지정한다.
-
Getter, Setter : 체크박스를 이용해 DOF의 getter와 setter를 자동 생성할 수 있다.
변수 선언을 위해 먼저 DO, DOF, QO 타입을 검색한다.
디자인 에디터 - 변수 선언 - DO, DOF, QO 타입 검색DO와 DOF, QO 타입 검색한 후 등록할 리소스를 선택한 후 더블클릭하거나 [할당] 버튼을 클릭하면 DEFINE 영역의 '일반 변수 선언'과 'DO factory 변수 선언' 테이블에 추가된 변수가 각각 나타난다.
[OK] 버튼을 클릭하면 디자인 화면에서 선언된 해당 변수를 멤버 변수 박스에서 확인할 수 있다.
디자인 에디터 - 변수 선언 - DO, DOF 타입 추가 -
-
[Primitive 타입] 탭
[Primitive 타입] 탭은 기본 변수 타입의 변수를 선언할 때 사용한다. Primitive로 생성된 변수 역시 DO와 마찬가지로 '배열 종류' 항목을 통해 변수를 배열로 선언할 수 있다.
디자인 에디터 - 변수 선언 - Primitive 타입 검색 -
[Object 타입] 탭
[Object 타입] 탭은 Build Path와 프로젝트에 등록된 오브젝트 객체의 변수를 선언할 때 사용한다.
디자인 에디터 - 변수 선언 - Object 타입 검색선언할 변수의 타입을 확인한 뒤 해당 변수 타입의 리소스명을 검색하면 목록에 리소스가 조회된다.
검색된 리소스 이름을 선택한 후 리소스를 선택한 후 더블클릭하거나 [할당] 버튼을 클릭하면 DEFINE 영역에 자동으로 변수명, 변수 타입, 변수 종류, 배열크기, 설명 내용이 삽입된다. 변수명을 확인한 후 작성할 변수명으로 변경한다. 변수명을 변경하지 않으면 자동으로 입력된 값으로 변수가 선언된다. [OK] 버튼을 클릭하면 디자인 화면에서 선언된 해당 변수를 멤버 변수 박스에서 확인할 수 있다.
디자인 에디터 - 변수 선언 - Object 타입 추가
-
-
다음은 멤버 변수가 추가된 디자인 에디터이다. [소스] 탭에서 변수 선언 내용을 확인할 수 있다.
디자인 에디터 - 변수 추가 (2)PO에서는 아래와 같이 DTO, PRIMITIVE, OBJECT, DOFactory Type을 지원한다.
-
DTO
변수명 설명 DTO_
DO 리소스의 변수 종류이다.
-
PRIMITIVE
변수명 설명 SHORT_
Java의 short type과 동일하다.
LONG_
Java의 long type과 동일하다.
FLOAT_
Java의 float type과 동일하다.
DOUBLE_
Java의 double type과 동일하다.
BOOLEAN_
Java의 boolean type과 동일하다.
BYTE_
Java의 byte type과 동일하다.
CHAR_
Java의 char type과 동일하다.
INT_
Java의 int type과 동일하다.
-
OBJECT
변수명 설명 JO_
JO Type은 Object로 생성된다.
SO_
SO Type은 Object로 생성된다.
BO_
BO(Designer) Type은 Object로 생성된다.
POJO_
BO(POJO) Type은 Object로 생성된다.
-
DOFactory
변수명 설명 QO_
QO는 DOFactory로 생성된다.
DOF_
DOF는 DOFactory로 생성된다.
-
(변수 삭제)
삭제할 변수를 클릭한 후 [-] 버튼을 클릭하거나 <Delete> 키를 누르면 클릭한 변수가 삭제된다.
3.3.4. 메소드
메소드 정의 박스에서 메소드를 정의, 삭제, 비구현 메소드 추가, 오버라이드 메소드 생성 작업을 할 수 있다.
아이콘 | 설명 |
---|---|
(비구현 메소드 추가) |
인터페이스 및 추상 클래스를 해당 BO 수퍼로 등록하는 경우 반드시 구현해야 하는 메소드에 대해 자동으로 메소드를 추가한다. 자세한 내용은 "비구현 메소드 추가"를 참고한다. |
(오버라이드 메소드 생성) |
Override 또는 implement할 메소드를 선택하여 생성한다. 자세한 내용은 "오버라이드 메소드 생성"을 참고한다. |
(메서드명 수정) |
메소드명을 수정할 수 있다. 자세한 내용은 "메소드명 수정"을 참고한다. |
(메소드 정의) |
메소드 박스 안의 [+] 버튼을 클릭하면 메소드 기본 정보를 등록할 수 있다. 자세한 내용은 "메소드 정의"를 참고한다. |
(메소드 삭제) |
메소드 박스 안의 [-] 버튼을 클릭하면 정의한 메소드를 삭제할 수 있다. 자세한 내용은 "메소드 삭제"를 참고한다. |
(비구현 메소드 추가)
상위 인터페이스나 추상 클래스를 상속 또는 구현하는 경우 [비구현 메소드 추가] 아이콘을 클릭하면 상위 클래스의 메소드를 자동으로 추가할 수 있다.
다음은 비구현된 메소드를 추가하는 과정에 대한 설명이다.
-
BO 인터페이스 추가하는 방법은 BO를 생성(BO 생성 참고)할 때 또는 [Properties] > [수퍼] 탭에서 상위 클래스나 인터페이스를 추가한다.
디자인 에디터 - 비구현 메소드 추가 (1)'인터페이스' 항목에서 [추가] 버튼을 클릭해서 BO 속성으로 추가할 인터페이스를 선택한 후 [OK] 버튼을 클릭한다.
디자인 에디터 - 비구현 메소드 추가 (2)'인터페이스' 항목에서 추가된 인터페이스를 확인할 수 있다.
디자인 에디터 - 비구현 메소드 추가(3) -
기본 디자인 에디터에서 [비구현 메소드 추가] 아이콘을 클릭하면 상위 인터페이스에 선택한 메소드를 메소드 박스에서 확인할 수 있다.
디자인 에디터 - 비구현 메소드 추가 전 BO 화면디자인 에디터 - 비구현 메소드 추가 버튼 클릭 후
(오버라이드 메소드 생성)
메소드 박스에서 [오버라이드 메소드 생성] 아이콘을 클릭하면 override 또는 implement할 메소드를 선택하여 생성할 수 있다.
다음은 오버라이드 메소드를 생성하는 과정에 대한 설명이다.
-
메소드 박스에서 [오버라이드 메소드 생성] 아이콘을 클릭한다.
디자인 에디터 - 오버라이드 메소드 생성 (1) -
Super Class에 정의된 오브젝트의 메소드를 오버라이드하는 경우 다음과 같이 override method 화면에서 메소드 목록에서 override 또는 implement할 메소드를 선택한 후 [OK] 버튼을 클릭한다.
디자인 에디터 - 오버라이드 메소드 생성 (2) -
선택한 메소드가 메소드 박스에 추가된 것을 확인할 수 있다.
디자인 에디터 - 오버라이드 메소드 생성 (3)
(메소드명 수정)
수정할 메소드를 선택한 후 [메소드명 수정] 아이콘을 클릭하면 메소드 이름을 수정할 수 있다.
메소드명 수정 화면에서 수정할 이름을 입력한 후 [OK] 버튼을 클릭한다.
메뉴 | 설명 |
---|---|
메소드 명 |
변경할 새로운 메소드명을 기입한다. |
리펙토링 |
체크하면 참조하는 리소스의 메소드 소스를 리펙토링한다. |
(메소드 정의)
다음은 메소드를 정의하는 과정에 대한 설명이다.
-
메소드를 정의하기 위해서 [메소드 정의] 아이콘을 클릭한다.
디자인 에디터 - 메소드 정의 아이콘 -
메소드 정의 화면에서 메소드 물리명, 논리명, 설명을 입력한 후 [OK] 버튼을 클릭한다.
디자인 에디터 - 메소드 정의 화면메뉴 설명 메소드 물리명
메소드의 물리명을 입력한다.
메소드 논리명
개발자의 가독성이 있는 이름을 입력한다.
Modifer
public, protected, private 여부를 선택한다.
선택한 접근 제어자별로 디자인 편집화면에 메소드명에 다음의 색상이 표시된다(메소드 정의 완료 후 디자인 편집화면 참고).
-
public : 초록
-
protected : 노랑
-
private : 빨강
설명
메소드에 대한 설명을 입력한다.
static
static 여부를 선택한다.
-
-
메소드 정의가 완료되면 디자인 에디터에 생성한 메소드 내용을 조회할 수 있다. 생성된 메소드를 더블클릭하면 소스 개발을 위한 해당 메소드 플로우 디자인 화면에 조회된다. 자세한 내용은 EMB Designer에서 설명한다.
[소스] 탭에서 추가된 메소드 정의 내용을 확인할 수 있다.
메소드 정의 완료 후 디자인 편집화면 -
생성된 메소드의 설정 정보는 Properties의 [일반] 탭에서 수정할 수 있다.
디자인 에디터 - [Properties] - [일반] 탭 - 메소드 설정항목 설명 논리명
메소드 정의를 할 때 메소드 논리명이 기본 정보로 설정된다.
접근제어자
메소드의 접근제어자를 public, private, protected 중 하나로 선언한다.
설명
메소드의 기본 정보를 등록할 때 기입된 정보가 설정되며 설명을 수정할 수 있다.
static
static 메소드 여부를 선택한다.
abstract
abstract 메소드 여부를 선택한다.
synchronized
synchronized 메소드 여부를 선택한다.
리턴 타입
기본적으로 void형으로 설정되어 있으며 객체 리턴 등 메소드 리턴 타입을 설정할 수 있다. [검색] 버튼을 클릭해서 DataObject, Primitive, 사용자 정의 오브젝트들을 리턴 타입으로 지정할 수 있다. (디자인 에디터 - [Properties] - [일반] 탭 - 파라미터 설정 (2) 참고)
파라미터 리스트
메소드의 목록을 조회한다.
-
타입 : 파라미터의 데이터 타입(타입을 선택한 후 […] 버튼을 클릭해서 디자인 에디터 - [Properties] - [일반] 탭 - 파라미터 설정 (1)에서 변수 타입을 설정 가능)
-
인자명 : 파라미터명(인자명을 선택한 후 사용할 이름이나 설명을 수정)
-
설명 : 파라미터 변수에 대한 내용
[추가], [삭제] 버튼을 클릭해서 파라미터를 추가하거나 삭제할 수 있다. 다음은 메소드의 변수를 설정하는 방법에 대한 설명이다.
-
파라미터 리스트의 [추가] 버튼을 클릭한다.
디자인 에디터 - [Properties] - [일반] 탭 - 변수 타입 설정 -
파라미터 리스트의 '타입' 항목의 [...] 버튼을 클릭해서 타입을 설정할 수 있다.
디자인 에디터 - [Properties] - [일반] 탭 - 파라미터 설정 (1) -
변수 선택 화면에서 'List type', 'Array type'을 체크하면 변수 타입을 List와 Array로 설정할 수 있다.
디자인 에디터 - [Properties] - [일반] 탭 - 파라미터 설정 (2) -
다음은 타입 설정을 완료한 후의 파라미터 목록이다. Sting 타입은 'List type’으로 Int 타입은 'Array type’으로 설정되었다.
디자인 에디터 - [Properties] - [일반] 탭 - 파라미터 설정 (3)
-
(메소드 삭제)
삭제할 메소드를 클릭한 후 [-] 버튼을 클릭하거나 <Delete> 키를 누르면 클릭했던 변수가 삭제된다.
3.4. EMB Designer
EMB Designer는 메소드 내용을 플로우 설계, 플로우 편집, 소스 편집, 플로우 삭제 등 개발자가 실질적으로 개발할 수 있는 영역으로 EMB 모듈의 플로우를 가시적으로 나타낸다. 사용자는 Palette에서 다양한 모듈을 가져다 드래그 앤드 드롭으로 추가할 수 있다.
-
(1) 왼쪽 Palette
해당 Task 모듈을 선택하여 디자인 에디터에 드래그 앤드 드롭하여 모듈을 등록하고 구현한다.
메뉴 설명 (Nodes)
-
[이너 모듈] : 여러 모듈들이 동시에 사용하는 변수를 지정하거나 모듈들의 진입조건, 예외처리 등을 설정하기 위해 사용하는 모듈이다. 자세한 내용은 이너 모듈을 참고한다.
-
[버추얼 모듈] : 개발자가 소스 코딩을 플로우에 삽입하는 경우 사용하는 모듈로 자식 노드를 가질 수 없다. 자세한 내용은 버추얼 모듈을 참고한다.
-
[루프 모듈] : 반복문을 구현할 때 사용하는 모듈로 하위에 자식 노드를 가질 수 있다. 자세한 내용은 루프 모듈을 참고한다.
-
[Assign 모듈] : 입출력 매핑 또는 DO를 매핑할 때 사용하는 모듈로 자식 노드를 가질 수 있으며 모듈을 더블클릭하면 매핑화면이 나타난다. 자세한 내용은 Assign 모듈을 참고한다.
-
[static method 모듈] : Static Type의 메소드를 호출하기 위한 모듈이다. 자세한 내용은 static method 모듈을 참고한다.
-
[로컬 트랜잭션] : EMB Designer에서 Assign 모듈은 로직 중간에 Commit, Rollback 등의 트랜잭션 작업을 개발자가 할 수 있는 기능이다. 자세한 내용은 로컬 트랜잭션을 참고한다.
-
[DDL 모듈] : SQL의 DDL(Data Definition Language)의 지원을 위한 기능이다.자세한 내용은 DDL 모듈을 참고한다.
-
[getReply 모듈] : 다른 메소드의 응답을 기다릴 떄 사용된다. 자세한 내용은 getReply 모듈을 참고한다.
(BizObject 변수)
BO 객체를 레퍼런스 변수로 정의하여 사용할 수 있는 모듈로 변수를 정의할 때 메타에 등록된 BO를 Object type으로 선언하면 나타난다. 자세한 내용은 BizObject 변수를 참고한다.
(DO Factory 변수)
DOF 객체를 레퍼런스 변수로 정의하여 사용할 수 있는 모듈로 변수를 정의할 때 메타에 등록된 DOF를 DOF type으로 선언하면 나타난다. 자세한 내용은 DO Factory 변수 (DB)와 DO Factory 변수 (FILE)을 참고한다.
(Query Object 변수)
QO 객체를 레퍼런스 변수로 정의하여 사용할 수 있는 모듈로 변수를 정의할 때 메타에 등록된 QO를 QO type으로 선언하면 나타난다. 자세한 내용은 Query Object 변수를 참고한다.
(로컬 메소드)
BO에 정의된 메소드 내용을 볼 수 있으며 EMB Designer에 추가할 경우 로컬 메소드를 호출할 수 있다. 자세한 내용은 로컬 메소드를 참고한다.
(상위 메소드)
BO에 정의된 상위 클래스의 메소드 내용을 볼 수 있으며 EMB Designer에 추가할 경우 상위 클래스의 메소드를 호출할 수 있다. 자세한 내용은 상위 메소드를 참고한다.
-
-
(2) 오른쪽 Palette
정의된 변수내역을 바탕으로 빠른 확인/수정할 수 있는 Short Cut을 제공한다.
메뉴 설명 Super Class
Super Class로 선언한 클래스가 표시된다.
Interface
BO를 생성하는 경우 선택한 Interface Class가 표시되며, [+] 버튼을 클릭하면 추가도 가능하다.
Default Methods
현재 BO의 클래스 이름이 표시된다.
Member Variables
선언된 멤버 변수 내역이 표시되며, [+] 버튼을 클릭하면 추가도 가능하다.
Methods
선언된 메소드 내역이 표시되며, [+] 버튼을 클릭하면 추가도 가능하다.
3.4.1. 이너 모듈
EMB Designer에서 이너 모듈은 분기점의 역할을 수행하고 변수를 정의하여 다양한 서비스를 작성할 수 있다. Palette에서 [Node] > [이너 모듈]을 선택한 후 디자인 영역을 클릭하면 이너 모듈이 삽입된다. 이너 모듈을 클릭하면 원하는 위치로 이동할 수 있다.
다음은 이너 모듈 디자인 에디터에 생성한 소스이다.
-
이너 모듈 노드 속성
이너 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - 이너 모듈 - 속성-
(삭제)
이너 모듈을 삭제한다.
-
(주석 처리)
이너 모듈 이하는 주석 처리한다. 주석 처리 노드 속성을 클릭하며 다음과 같이 해당 이너 모듈이 주석 처리된다.
EMB Designer - 이너 모듈 - 주석 처리 - 디자인아래 그림은 주석 처리한 이너 모듈의 소스젠 내용이다. 주석 처리를 해제하려면 [주석 처리] 노드 속성 아이콘을 다시 한 번 클릭한다.
EMB Designer - 이너 모듈 - 주석 처리 - 소스젠 -
(지역변수 선언)
이너 모듈 내에서 사용할 수 있는 지역변수를 선언한다. 지역변수 선언 노드 속성을 클릭하여 지역변수 선언 화면에서 필요한 변수를 선언한다.
EMB Designer - 이너 모듈 - 지역변수 선언 - 디자인위와 같이 일반 변수 선언에 'var1’을 설정하고 [OK] 버튼을 클릭하면 다음과 같이 소스가 생성된다. 사용법은 메소드의 "변수 정의"와 동일하나 위와 같이 이너 모듈 안에 지역변수로 생성된다. 변수 정의의 상세 내용은 "변수 선언"을 참고한다.
EMB Designer - 이너 모듈 - 지역변수 선언 - 소스젠 -
(이너 모듈 타입 선택)
이너 모듈을 'IF' 타입으로 할지, 'BLOCK' 타입으로 할지 선택한다.
-
-
[Properties] 탭
이너 모듈을 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - 이너 모듈 - [Properties] - [일반] 탭항목 설명 이름
이너 모듈의 논리 이름을 부여한다. 기본적으로 '이너 모듈’로 설정된다.
타입
이너 모듈의 타입을 지정한다.
-
if : 이너 모듈을 조건 분기형태로 사용한다. 소스 코드에 if 구문이 생성되며 [Properties] > [조건] 탭에서 조건을 입력한다. 조건을 입력하지 않으면 기본으로 true 값이 입력된다.
-
block : 이너 모듈을 생성할 때 기본 타입으로 지정된 형태이다. 소스 코드에 블록 영역으로 생성된다.
설명
이너 모듈의 내용을 입력한다.
-
-
[예외] 탭
EMB Designer - 이너 모듈 - [Properties] - [예외] 탭항목 설명 이 노드에서 예외 처리
try-catch 문이 소스젠에 자동으로 생성되여 부모 노드로 예외를 던지지 않는다. 해당 기능이 체크되어 있어야 '사용자 정의 예외처리' 항목이 활성화된다.
사용자 정의 예외 처리
소스에서 개발자가 직접 catch 문을 추가할 수 있다.
[소스 편집기로 가기]
이너 모듈의 try-catch 해당 소스 라인으로 이동한다.
-
[조건] 탭
EMB Designer - 이너 모듈 - [Properties] - [조건] 탭항목 설명 [소스 편집기로 가기]
이너 모듈의 "if(...)" 해당 소스 라인으로 이동한다.
IF ELSE
여러 개의 if 타입 이너 모듈이 존재하는 경우 제일 마지막 이너 모듈을 else로 설정한다.
설명
이너 모듈의 조건절에 대한 내용을 입력한다.
조건
이너 모듈의 조건문을 설정할 수 있다. 조건 텍스트 화면에 내용을 입력하면 소스에 반영된다.
-
3.4.2. 버추얼 모듈
모듈은 개발자가 로직을 삽입하여 개발할 수 있는 영역으로 이너 모듈과 달리 하위 모듈을 가질 수 없다.
Palette에서 [Node] > [버추얼 모듈]을 선택한 후 디자인 영역을 클릭하면 버추얼 모듈이 삽입된다. 버추얼 모듈을 클릭하면 원하는 위치로 이동할 수 있다.
다음은 버추얼 모듈 디자인 에디터에 생성한 소스이다.
-
버추얼 모듈 속성
버추얼 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - 버추얼 모듈 - 속성-
(삭제)
버추얼 모듈을 삭제한다.
-
(주석 처리)
버추얼 모듈에 작성된 로직을 주석 처리한다.
-
-
[Properties] 탭
버추얼 모듈을 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - 버추얼 모듈 - [Properties] - [일반] 탭항목 설명 이름
버추얼 모듈의 논리 이름을 부여한다. 기본적으로 '버추얼 모듈’로 설정된다.
설명
버추얼 모듈의 내용을 입력한다.
-
[조건] 탭
EMB Designer - 버추얼 모듈 - [Properties] - [조건] 탭항목 설명 조건문 사용
버추얼 모듈에서 조건문 사용을 위한 설정으로 체크할 때에만 Properties 조건 특성이 적용된다.
[소스 편집기로 가기]
버추얼 모듈의 "if(...)" 해당 소스 라인으로 이동한다.
설명
버추얼 모듈의 조건절에 대한 설명을 입력할 수 있다.
조건
버추얼 모듈의 조건문을 설정할 수 있다. 조건 텍스트 화면에 내용을 입력하면 소스에 반영된다.
-
3.4.3. 루프 모듈
EMB Designer에서 루프 모듈은 반복문 작성을 위한 모듈로 하위 모듈을 가질 수 있다.
Palette에서 [Node] > [루프 모듈]을 선택한 후 디자인 영역을 클릭한다. 루프 모듈 삽입한 후 개발 로직을 추가할 경우 다음과 같이 버추얼 모듈 등을 이용하여 개발 영역을 추가한다. 루프 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
다음은 루프 모듈 디자인 에디터에 생성한 소스이다.
-
루프 모듈 노드 속성
루프 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다. 삭제 및 주석 처리 등 노드 속성은 타 노드 속성과 동일하다.
EMB Designer - 루프 노드 - 속성-
(삭제)
루프 모듈을 삭제한다.
-
(주석 처리)
루프 모듈을 주석 처리한다.
-
(선처리 이동)/ (후처리 이동)
루프 모듈의 선/후처리 소스 영역으로 이동한다.
-
-
[Properties] 탭
루프 모듈을 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - 루프 모듈 - [Properties] - [일반] 탭항목 설명 이름
루프 모듈의 논리 이름을 부여한다. 기본적으로 '루프 모듈’로 설정된다.
설명
루프 모듈의 내용을 입력한다.
-
[조건] 탭
EMB Designer - 루프 모듈 - [Properties] - [조건] 탭항목 설명 조건문 사용
루프 모듈에서 조건문 사용을 위한 설정으로 체크할 때에만 Properties 조건 특성이 적용된다.
[소스 편집기로 가기]
루프 모듈의 "if(...)" 해당 소스 라인으로 이동한다.
설명
루프 모듈의 조건절에 대한 설명을 입력할 수 있다.
조건
루프 모듈의 조건문을 설정할 수 있다. 조건 텍스트 화면에 내용을 입력하면 소스에 반영된다.
-
[선후처리] 탭
EMB Designer - 루프 모듈 - [Properties] - [선후처리] 탭항목 설명 [선처리로 가기]
루프 모듈 "BEGIN_LOOP_MODULE_PREPROCESSING" 소스 영역으로 이동한다.
[후처리로 가기]
루프 모듈 "BEGIN_LOOP_MODULE_POSTPROCESSING" 소스 영역으로 이동한다.
-
3.4.4. Assign 모듈
EMB Designer에서 Assign 모듈은 변수 간의 값을 할당할 수 있는 모듈이다. 변수 매핑 툴을 제공한다.
Palette에서 [Node] > [Assign 모듈]을 클릭해서 디자인 영역을 클릭해서 Assign 모듈을 삽입한다. Assign 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
Assign 모듈을 더블클릭하면 나타나는 변수 Assign 화면에서 변수를 매핑한 후 저장한다. 매핑할 때 편의를 위해 From/To 변수 리스트 내역의 Filter 기능을 제공한다.
-
Assign 모듈 노드 속성
Assign 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - Assign 모듈 - 노드 속성-
(삭제)
Assign 모듈을 삭제한다.
-
(주석 처리)
Assign 모듈을 주석 처리한다.
-
-
[Properties] 탭
Assign 모듈을 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - Assign 모듈 - [Properties] - [일반] 탭항목 설명 이름
Assign 모듈의 논리 이름을 부여한다. 기본적으로 'Assgin 모듈’로 설정된다.
설명
Assign 모듈의 내용을 입력한다.
-
3.4.5. static method 모듈
Palette에서 [Node] > [static method 모듈]을 클릭하면 클래스를 선택할 수 있는 화면이 나타난다. Static Method를 포함하는 BO를 조회한 후 [OK] 버튼을 클릭한다.
선택한 BO에 포함된 static method 내역이 표시된다. 적용할 메소드 내역을 선택한 후 [OK] 버튼을 클릭하면 EMB Designer에 Static method 모듈이 추가된다.
3.4.6. 로컬 트랜잭션
EMB Designer에서 Assign 모듈은 로직 중간에 Commit, Rollback 등의 트랜잭션 작업을 개발자가 할 수 있는 기능이다. Palette에서 [Node] > [로컬 트랜잭션]을 클릭해서 디자인 영역을 클릭해서 로컬 트랜잭션을 삽입한다. 로컬 트랜잭션을 클릭한 후 원하는 위치로 이동할 수 있다.
로컬 트랜잭션을 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
항목 | 설명 |
---|---|
트랜잭션 타입 |
로컬 트랜잭션의 타입을 설정한다.
|
3.4.7. DDL 모듈
EMB Designer에서 DDL을 정의하여 테이블 생성 및 삭제를 할 수 있는 SQL을 수행할 수 있다.
Palette에서 [Node] > [DDL 모듈]을 클릭하고 디자인 영역을 클릭해서 DDL 모듈을 삽입한다. 디자인 화면에서 DDL 노드를 클릭한 후 원하는 위치로 이동할 수 있다.
다음은 DDL 모듈 디자인 에디터에 생성한 소스이다.
-
DDL 모듈 속성
getReply 노드를 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - DDL 모듈 - 속성-
(삭제)
DDL 노드를 삭제한다.
-
(주석 처리)
DDL 노드를 주석 처리한다.
-
-
[Properties] 탭
DDL 노드를 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - DDL 모듈 - [Properties] - [일반] 탭항목 설명 이름
모듈의 이름을 지정한다.
설명
모듈의 설명을 넣는다.
데이터 소스
DDL이 수행된 데이터소스를 선택한다.
DDL 쿼리
DDL SQL을 입력한다. 단일 DDL SQL만 입력 가능하다.
-
3.4.8. getReply 모듈
EMB Designer에서 getReply 노드는 다른 메소드의 응답을 기다리는 모듈이다.
Palette에서 [Node] > [getReply]을 클릭하고 디자인 영역을 클릭해서 getReply 노드를 삽입한다. 디자인 화면에서 getReply 노드를 클릭한 후 원하는 위치로 이동할 수 있다.
다음은 getReply 모듈 디자인 에디터에 생성한 소스이다.
-
getReply 모듈 속성
getReply 노드를 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - getReply 모듈 - 속성-
(삭제)
getReply 노드를 삭제한다.
-
(주석 처리)
getReply 노드를 주석 처리한다.
-
(결과값 셋팅)
결과값을 설정한다. Assign 모듈과 기능이 유사하다.
-
(호출 후 코드)
getReply 모듈의 호출 후 코드 소스 영역으로 이동한다.
-
-
[Properties] 탭
getReply 노드를 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - getReply 모듈 - [Properties] - [일반] 탭항목 설명 이름
getReply 노드의 논리 이름을 부여한다. 기본적으로 'getReply 모듈’로 설정된다.
조건
getReply 노드의 조건을 설정한다.
timeOut
응답 시간 제한을 설정한다. (기본값: '0')
설명
getReply 노드의 내용을 입력한다.
-
3.4.9. BizObject 변수
BO 변수는 변수 선언에서 Object type으로 BO로 선언할 경우 Palette에서 BO 레퍼런스 변수를 확인할 수 있다.
다음은 BO 변수를 생성하는 과정에 대한 설명이다.
-
BO 디자인 에디터에서 ([멤버 변수 설정]) 아이콘을 클릭하면 변수 선언 화면이 나타난다.
해당 화면에서 Object Type을 설정한 후 생성한 Object Type을 검색한다. 검색된 Object Type을 더블클릭하면 아래와 같이 변수가 생성된다.
EMB Designer - BO 변수 선언 -
BO 변수를 선언한 후 Palette를 확인하면 BO 모듈이 생성된 것을 확인할 수 있다.
EMB Designer - BO 변수 모듈 - Palette -
Palette에서 ([BizObject 변수])를 클릭한 후 디자인 영역을 클릭한다.
EMB Designer - BO 변수 모듈 - 디자인 -
클릭하면 해당 Object Type의 BO 메소드 선택 화면이 나타난다.
EMB Designer - BO 메소드 선택 화면 -
BO 메소드를 선택하여 BO 변수를 디자인 에디터에 삽입한다. BO 변수 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
EMB Designer - BO 변수 - 디자인 영역BO 변수를 디자인 에디터에 추가하면 아래와 같이 자동 소스가 생성된다.
EMB Designer - BO 변수 - 소스젠
다음은 BO 변수 속성과 Properties에 대한 설명이다.
-
BO 변수 속성
BO 변수 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - BO 변수 - 속성 -
[Properties] 탭
BO 변수 모듈을 선택한 후 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - BO 변수 - [Properties] - [일반] 탭항목 설명 변수명
Object type을 선언할 때 정의한 변수명을 보여준다.
클래스명
호출된 BO의 실제 리소스를 확인할 수 있다.
메소드명
호출된 BO의 사용된 메소드를 확인할 수 있다.
리턴 타입
호출된 BO 메소드의 리턴 타입을 확인할 수 있다.
파라미터
호출된 BO 메소드의 agrs 내용을 확인할 수 있다.
-
[예외] 탭
EMB Designer - BO 변수 - [Properties] - [예외] 탭항목 설명 이 노드에서 예외 처리
try-catch 문이 소스젠에 자동으로 생성되어 부모 노드로 예외를 발생하지 않는다. 해당 항목이 체크되어 있어야 '사용자 정의 예외처리' 항목이 활성화된다.
사용자 정의 예외 처리
소스에서 개발자가 직접 catch 문을 추가할 수 있다.
[소스 편집기로 가기]
모듈의 try-catch 해당 소스 라인으로 이동한다.
-
3.4.10. DO Factory 변수 (DB)
DO Factory 변수는 변수 정의에서 DOF type으로 DOF를 변수 선언할 경우 Palette에서 DOF 레퍼런스 변수를 확인할 수 있다.
다음은 DB DO Factory Resource에 변수를 추가하는 과정에 대한 설명이다.
-
([멤버 변수 설정]) 아이콘을 클릭하면 변수 정의 화면이 나타난다. 해당 화면에서 DO Type을 설정한 후 생성한 DO Type을 검색한다. 검색된 DO Type을 더블클릭하면 아래와 같이 변수가 생성된다.
EMB Designer - DB DOF 변수 - 변수 정의 -
변수 정의 화면을 저장한 후 Palette에서 DOF 변수가 생성된 것을 확인할 수 있다.
EMB Designer - DB DOF 변수 - Palette -
Palette에서 ([DO Factory 변수])를 클릭한 후 디자인 영역을 클릭한다. DOF 변수 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
EMB Designer - DB DOF 변수 - 디자인 영역DOF 변수를 디자인 에디터에 생성하면 다음과 같이 자동 소스가 생성된다.
EMB Designer - DB DOF 변수 - 소스젠
다음은 DOF 변수 속성과 Properties에 대한 설명이다.
-
DOF 변수 속성
DOF 변수 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - DB DOF 변수 - 속성-
(삭제)
DOF 변수 모듈을 삭제한다.
-
(주석 처리)
DOF 변수 모듈을 주석 처리한다.
-
(조회 파라미터 셋팅)
DOF 조회 파라미터에 값을 설정한다. Assign 모듈과 기능이 유사하다.
EMB Designer - DB DOF 변수 - 조회 파라미터 설정 화면 -
(결과값 셋팅)
DOF를 통해 가져온 결과 값을 설정한다. Assign 모듈과 기능이 유사하다.
EMB Designer - DB DOF 변수 - 결과값 설정 화면 -
(호출 전 코드)
DOF가 호출되기 전 수행해야 하는 코드를 입력한다.
-
(호출 후 코드)
DOF가 호출된 후 수행해야 하는 코드를 입력한다.
EMB Designer - DB DOF 변수 - 조회 파라미터, 결과값 셋팅 코드 생성
-
-
[Properties] 탭
DOF 변수 모듈을 선택한 후 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - DB DOF 변수 - [Properties] - [일반] 탭항목 설명 클래스명
호출된 DOF의 실제 리소스를 확인할 수 있다.
변수명
DOF 타입을 선언할 때 정의한 변수명을 보여준다.
데이터 소스
DOF가 사용하는 데이터소스명이다.
트랜잭션 타입
모듈 수행시 적용 되는 트랜잭션 타입이다.
-
none : 해당 모듈에서 별도 트랜잭션 처리를 하지 않는다. 서비스 종료시 정상/오류 여부에 따라 트랜잭션이 Commit/Rollback된다.
-
auto commit : 지정된 데이터소스는 같은 트랜잭션에 묶이지 않으며, 서비스의 성공/실패 여부와는 상관없이 항상 데이터가 반영된다.
이름
DOF 변수의 논리명이다.
실행 타입
DOF의 실행 타입을 설정한다.
-
EXECUTE_IMMEDIATE : SQL을 즉시 수행한다.
-
EXECUTE_BATCH : Jdbc의 addBatch/executeBatch 기능을 활용하여 모아서 SQL을 수행한다.
Query 타입
DOF가 실행할 쿼리를 선택한다.
-
FULL : FULL 타입으로 생성한 DOF의 SQL 내역을 선택할 수 있다. (데이터 오브젝트 팩토리 생성(Full) 참고)
-
DYNAMIC : DYNAMIC 타입으로 생성한 DOF의 SQL 내역을 선택할 수 있다. BO/SO 내부에서 DOF에 정의된 Dynamic 변수로 추가적인 SQL 내용을 파라미터로 전달하여 완성된 SQL이 수행된다. (데이터 오브젝트 팩토리 생성(Dynamic) 참고)
Query 선택
DOF가 실행할 쿼리를 선택한다. 'Query 타입'에 해당하는 SQL Alias 내역이 선택 대상이다.
sql 종류
DOF가 실행할 쿼리의 타입을 보여준다.
다건 조회
조회된 결과가 다건일 경우 for 루프로 결과 값을 조회한다. 'sql 종류' 항목이 SELECT일 경우에만 활성화된다.
설명
DOF 변수 모듈에 대한 내용을 입력한다.
-
-
[예외] 탭
EMB Designer - DB DOF 변수 - [Properties] - [예외] 탭항목 설명 이 노드에서 예외 처리
try-catch 문이 소스젠에 자동으로 생성되여 부모 노드로 예외를 발생하지 않는다. 해당 항목이 체크되어 있어야 '사용자 정의 예외처리' 항목이 활성화된다.
사용자 정의 예외 처리
소스에서 개발자가 직접 catch 문을 추가할 수 있다.
[소스 편집기로 가기]
모듈의 try-catch 해당 소스 라인으로 이동한다.
-
3.4.11. DO Factory 변수 (FILE)
DO Factory 변수는 변수 정의에서 DOF type으로 DOF를 변수 선언할 경우 Palette에서 DOF 레퍼런스 변수를 확인할 수 있다.
다음은 File DO Factory Resource에 변수를 추가하는 과정에 대한 설명이다. 개발할 때 필요한 API Level 설명은 ProObject 런타임 엔진 개발자 안내서의 파일 데이터 오브젝트 팩토리를 참고한다.
-
([멤버 변수 설정]) 아이콘을 클릭하면 변수 정의 화면이 나타난다.
해당 화면에서 DO Type을 설정한 후 생성한 DO Type을 검색한다. 검색된 DO Type을 더블클릭하면 아래와 같이 변수가 생성된다.
EMB Designer - File DOF 변수 - 변수 정의 -
변수 정의 화면을 저장한 후 Palette에서 DOF 변수가 생성된 것을 확인할 수 있다.
EMB Designer - File DOF 변수 - Palette -
Palette에서 ([DO Factory 변수])를 클릭한 후 디자인 영역을 클릭한다. DOF 변수 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
EMB Designer - File DOF 변수 - 일반EMB Designer - File DOF 변수 - 루프 모드DOF 변수를 디자인 에디터에 생성하면 다음과 같이 자동 소스가 생성된다.
EMB Designer - File DOF Source - 일반EMB Designer - File DOF Source - 루프 모드
다음은 File DOF 변수 속성과 Properties에 대한 설명이다.
-
DOF 변수 속성
DOF 변수 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - File DOF 변수 - 속성-
(삭제)
DOF 변수 모듈을 삭제한다.
-
(주석 처리)
DOF 변수 모듈을 주석 처리한다.
-
(조회 파라미터 셋팅)
DOF 조회 파라미터에 값을 설정한다. Assign 모듈과 기능이 유사하다.
EMB Designer - File DOF 변수 - 조회 파라미터 설정 화면 -
(결과값 셋팅)
DOF를 통해 가져온 결과 값을 설정한다. Assign 모듈과 기능이 유사하다.
EMB Designer - File DOF 변수 - 결과값 설정 화면 -
(호출 전 코드)
DOF가 호출되기 전 수행해야 하는 코드를 입력한다.
-
(호출 후 코드)
DOF가 호출된 후 수행해야 하는 코드를 입력한다.
-
-
[Properties] 탭
DOF 변수 모듈을 선택한 후 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - File DOF 변수 - [Properties] - [일반] 탭항목 설명 클래스명
호출된 DOF의 실제 리소스를 확인할 수 있다.
변수명
DOF 타입을 선언할 때 정의한 변수명을 보여준다.
이름
DOF Class명이다.
파일위치
File 위치를 설정한다.
덮어쓰기
File을 Write할 때 이전 데이터를 무시하고 Overwrate할지 여부를 선택한다. 체크박스를 체크하면 Overwrite한다.
루프 모드
Loop 처리를 할지 여부를 나타낸다. 체크박스를 체크하면 버추얼 모듈을 하위 노드로 추가할 수 있다.
설명
DOF 변수 모듈에 대한 내용을 입력한다.
-
[예외] 탭
EMB Designer - File DOF 변수 - [Properties] - [예외] 탭항목 설명 이 노드에서 예외 처리
try-catch 문이 소스젠에 자동으로 생성되여 부모 노드로 예외를 발생하지 않는다. 해당 항목이 체크되어 있어야 '사용자 정의 예외처리' 항목이 활성화된다.
사용자 정의 예외 처리
소스에서 개발자가 직접 catch 문을 추가할 수 있다.
[소스 편집기로 가기]
모듈의 try-catch 해당 소스 라인으로 이동한다.
-
3.4.12. Query Object 변수
EMB Designer에서 Query Object 사용을 위해서는 변수 선언이 선행 되어야 한다. 변수 정의 화면에서 Query Object 변수를 설정한 후 EMB Designer에서 사용 할 수 있다.
다음은 Query Object 변수를 추가하는 과정에 대한 설명이다.
-
([멤버 변수 설정]) 아이콘을 클릭하면 변수 정의 화면이 나타난다. 해당 화면에서 DO Type을 선택한 후 생성한 Query Object Type을 검색한다. 검색된 Query Object를 더블클릭하면 아래와 같이 변수가 생성된다.추가된 변수에 변수명, 테이터소스 등을 설정한다.
EMB Designer - Query Object 변수 - 변수 정의 -
변수 정의 화면을 저장한 후 Palette에서 Query Object 변수가 생성된 것을 확인할 수 있다.
EMB Designer - Query Object 변수 - Palette -
Palette에서 ([Query Object 변수])를 클릭한 후 디자인 영역을 클릭한다. Query Object 변수 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
EMB Designer - Query Object 변수 - 디자인 영역다음은 [Properties] 탭의 항목에 대한 설명이다.
항목 설명 클래스명
호출된 Query Object의 실제 리소스를 확인할 수 있다.
변수명
Query Object 타입을 선언할 때 정의한 변수명을 보여준다.
데이터 소스
Query Object가 사용하는 데이터소스명이다.
이름
Query Object 변수의 논리명이다.
Query 선택
Query Object가 실행할 쿼리를 선택한다. Query Object에 설정한 Alias 내역이 선택 대상이다.
SQL 종류
Query Object가 실행할 쿼리의 타입을 보여준다.
다건조회
조회된 결과가 다건일 경우 for 루프로 결과 값을 조회한다. 'SQL 종류' 항목이 SELECT일 경우에만 활성화된다.
설명
Query Object 변수 모듈에 대한 내용을 입력한다.
다음은 Query Object 변수 속성과 Properties에 대한 설명이다.
-
Query Object 변수 속성
Query Object 변수 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - Query Object 변수 - 속성-
(삭제)
Query Object 변수 모듈을 삭제한다.
-
(주석 처리)
Query Object 변수 모듈을 주석 처리한다.
-
(조회 파라미터 셋팅)
Query Object 조회 파라미터에 값을 설정한다. Assign 모듈과 기능이 유사하다.
EMB Designer - Query Object 변수 - 조회 파라미터 설정 화면 -
(결과값 셋팅)
Query Object를 통해 가져온 결과 값을 설정한다. Assign 모듈과 기능이 유사하다.
EMB Designer - Query Object 변수 - 결과값 설정 화면 -
(호출 전 코드)
Query Object가 호출되기 전 수행해야 하는 코드를 입력한다.
-
(호출 후 코드)
Query Object가 호출된 후 수행해야 하는 코드를 입력한다.
-
3.4.13. 로컬 메소드
메소드는 BO에 정의한 메소드 내역이 Palette의 로컬 메소드 영역에 나타난다. EMB Designer에 로컬 메소드를 추가하면 BO 내의 로컬 메소드를 호출하여 사용할 수 있으며 'this.method' 이름으로 소스가 생성된다.
다음은 로컬 메소드를 추가하는 과정에 대한 설명이다.
-
[메소드 정의] 버튼을 클릭하면 나타나는 메소드 정의 화면에 기본 정보를 등록한다.
EMB Designer - 로컬 메소드 - 메소드 정의 화면 -
메소드 정의 화면을 저장한 후 Palette에서 로컬 메소드가 생성된 것을 확인할 수 있다.
EMB Designer - Query Object 변수 - Palette -
Palette에서 ([로컬 메소드])를 클릭한 후 디자인 영역을 클릭한다. 로컬 메소드를 디자인 화면에 삽입한다. 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
EMB Designer - 로컬 메소드 - 디자인 영역로컬 메소드를 디자인 에디터에 추가하면 아래와 같이 자동 소스가 생성된다.
EMB Designer - 로컬 메소드 - 소스젠 -
메소드 매핑이 필요한 경우 메소드 모듈의 [+]을 클릭하면 다음과 같은 매핑 화면이 나타난다.
EMB Designer - 로컬 메소드 - 매핑항목 설명 변수 목록
사용자가 BO에 선언한 멤버 변수 목록이 표시된다.
리턴 값
해당 메소드의 리턴값을 설정할 수 있다. 변수 목록에서 리턴값으로 사용할 변수를 드래그 앤드 드롭하여 추가하거나, [삭제] 버튼을 클릭해서 리턴값에서 삭제할 수 있다.
리턴타입
사용자가 설정한 리턴 타입을 표시한다. 해당 타입에 해당하는 변수만 리턴 값으로 추가할 수 있다.
인자값
변수 목록에서 인자로 사용할 변수를 드래그 앤드 드롭하여 추가하거나, [삭제] 버튼을 클릭해서 인자값에서 삭제할 수 있다.
인자목록
사용자가 설정한 인자 타입을 표시한다. 해당 타입에 해당하는 변수만 인자 값으로 추가할 수 있다.
캐스팅 타입
리턴타입의 변수를 입력된 타입으로 캐스팅할 수 있다.
다음은 로컬 메소드의 노드 속성과 Properties에 대한 설명이다.
-
로컬 메소드 노드 속성
로컬 메소드 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - 로컬 메소드 - 노드 속성 -
[Properties] 탭
로컬 메소드을 선택하면 나타나는 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - 로컬 메소드 - [Properties] - [일반] 탭항목 설명 변수명
로컬 메소드는 this 변수로 호출되므로 변수명은 'this’로 표기된다.
클래스명
로컬 메소드가 생성된 클래스명을 나타낸다.
메소드명
호출된 메소드명을 나타낸다.
리턴 타입
메소드의 리턴 타입을 나타내며 리턴 타입 변경이 없을 경우 기본적으로 'void’를 사용한다.
파라미터
메소드 생성할 때 설정된 agrs 값을 보여준다.
-
[예외] 탭
EMB Designer - 로컬 메소드 - [Properties] - [예외] 탭항목 설명 이 노드에서 예외 처리
try-catch 문이 소스젠에 자동으로 생성되여 부모 노드로 예외를 던지지 않는다. 해당 항목이 체크되어 있어야 '사용자 정의 예외처리' 항목이 활성화된다.
사용자 정의 예외 처리
소스에서 개발자가 직접 catch 문을 추가할 수 있다.
[소스 편집기로 가기]
모듈의 try-catch 해당 소스 라인으로 이동한다.
-
3.4.14. 상위 메소드
상위 메소드는 BO를 생성할 때에 지정한 상위 클래스의 메소드 내역이 Palette의 상위 메소드에 나타난다. EMB Designer에 상위 메소드를 추가하면 상위 클래스의 메소드를 호출하여 사용할 수 있으며 'super.method’로 소스가 생성된다.
다음의 방법으로 상위 메소드를 등록할 수 있다.
-
BO를 생성할 때 상위 클래스를 등록한다.
EMB Designer - 상위 메소드 - BO 생성 상위 클래스 등록BO property의 [수퍼] 탭에서 '상위 클래스' 항목에 [변경] 버튼을 클릭한다.
EMB Designer - 상위 메소드 - 상위 클래스 등록부모 클래스 선택 화면에서 상위 클래스를 등록한다.
EMB Designer - 상위 메소드 - 부모 클래스 선택 화면 -
Palette의 ([상위 메소드])에 상위 클래스의 메소드가 추가된 것을 확인할 수 있다.
Palette의 해당 로컬 메소드를 클릭한 후 디자인 영역을 클릭해 삽입한다. 상위 메소드 모듈을 클릭한 후 원하는 위치로 이동할 수 있다.
EMB Designer - 상위 메소드 - 디자인 영역상위 메소드를 디자인 에디터에 생성하면 다음과 같이 자동 소스가 생성된다.
EMB Designer - 상위 메소드 - 소스젠 -
메소드 매핑이 필요한 경우 메소드 모듈의 [+]을 클릭하면 다음과 같은 매핑 화면이 나타난다.
EMB Designer - 상위 메소드 - 매핑
다음은 상위 메소드의 노드 속성과 Properties에 대한 설명이다.
-
상위 메소드 노드 속성
로컬 메소드 모듈을 클릭하면 아래와 같이 아이콘이 보이며 각각의 아이콘은 기능을 갖고 있다.
EMB Designer - 상위 메소드 - 노드 속성-
(삭제)
상위 메소드를 삭제한다.
-
(주석 처리)
상위 메소드 호출부를 주석 처리한다.
-
(선할당 처리)
상위 메소드를 호출하기 전 set할 값을 설정한다. Assign 모듈과 기능이 유사하다. 상위 메소드의 set 메소드에 전달될 변수 값을 assign한다. 선할당 처리 방법은 로컬 메소드의 선할당 처리동작과 동일한 방식으로 진행된다.
-
(후할당 처리)
상위 메소드의 get 메소드에 전달될 변수 값을 assign한다. 로컬 메소드의 후할당 처리동작과 동일한 방식으로 진행된다.
-
-
[Properties] 탭
상위 메소드을 선택한 후 화면 하단의 [Properties] 탭에서 다음과 같은 특성을 설정할 수 있다.
-
[일반] 탭
EMB Designer - 상위 메소드 - [Properties] - [일반] 탭항목 설명 변수명
상위 메소드는 super 변수로 호출되므로 변수명은 'super’로 표기된다.
클래스명
상위 메소드가 생성된 클래스명을 나타낸다.
메소드명
호출된 메소드명을 나타낸다.
리턴 타입
메소드의 리턴 타입을 나타내며 리턴 타입 변경이 없을 경우 기본적으로 'void"를 사용한다.
파라미터
메소드 생성할 때 설정된 agrs 값을 보여준다.
-
[예외] 탭
EMB Designer - 상위 메소드 - [Properties] - [예외] 탭항목 설명 이 노드에서 예외 처리
try-catch 문이 소스젠에 자동으로 생성되여 부모 노드로 예외를 던지지 않는다. 해당 항목이 체크되어 있어야 '사용자 정의 예외처리' 항목이 활성화된다.
사용자 정의 예외 처리
소스에서 개발자가 직접 catch 문을 추가할 수 있다.
[소스 편집기로 가기]
상위 메소드 모듈의 try-catch 해당 소스 라인으로 이동한다.
-
4. Service Object (SO)
Service Object(SO)는 서비스를 수행 및 관리하는 오브젝트로 비지니스 오브젝트를 Orchestration하는 플로우 중심 애플리케이션이다.
4.1. SO 생성
다음은 SO를 생성하는 과정에 대한 설명이다.
-
Package Explorer의 컨텍스트 메뉴에서 [New] > [Service Object]를 선택한 후 New Service Object 화면에서 SO를 생성하기 위한 모듈의 기본 정보를 등록한다.
New Service Object 화면 - SO 생성항목 설명 프로젝트
생성할 SO가 위치할 실제 프로젝트명을 입력한다.
패키지
실제 사용하는 패키지 네이밍 규칙에 따라 패키지명을 정의한다.
이름
생성할 SO의 물리명을 입력한다.
논리명
생성할 SO의 논리명을 입력한다.
클래스
생성할 SO의 클래스명을 입력한다.
Input DO
생성할 SO의 입력 DO를 지정한다.
외부로 호출 받아 처리되는 부분이므로 입력 전문에 대한 반드시 정의해야 한다.
Output DO
생성할 SO의 출력 DO를 지정한다.
외부로 호출 받아 처리되는 부분이므로 출력 전문에 대한 반드시 정의해야 한다.
설명
생성할 SO에 대한 부가 설명을 입력한다.
다음은 Input DTO를 지정하는 과정에 대한 설명이다.
-
New Service Object 화면에서 'Input DO' 항목의 [탐색…] 버튼을 클릭하면 Search DO 화면이 나타난다.
New Service Object - Search DO 화면 -
'리소스명' 항목에 내용을 입력하면 자동으로 리소스가 검색되어 리소스 선택 화면에 리소스 목록이 나열된다.
-
리소스를 선택한 후 [OK] 버튼을 클릭하면 New Service Object 화면의 'Input DO'에 리소스 내역이 지정된 것을 확인할 수 있다. Input DTO와 동일한 방법으로 Output DO를 지정한다.
-
-
New Service Object 화면에서 모듈의 기본 정보를 모두 설정한 후 [Finish] 버튼을 클릭하면 Service Flow Editor 화면으로 이동한다.
[비구현 메서드 추가] 아이콘을 선택하면 기본 SO 메소드 이름은 'service', 리턴 타입은 'Output DO’로 기본 설정된다.
Service Object - 비구현 메소드 추가
4.2. Design Editor
다음은 기본 디자인 에디터이며 기본 정보를 등록한 후 첫 화면으로 보이는 디자인 에디터이다.
기본 정보를 등록할 때 입력했던 물리명으로 클래스를 생성하며, 논리명은 최상위 박스의 이름으로 보인다. SO를 생성하는 경우 지정한 Input DO 및 Output DO가 맴버변수로 추가된다.
멤버 변수와 메소드 박스에서 [+] 버튼을 클릭하면 해당 SO의 멤버 변수와 메소드를 선언할 수 있다. 자세한 내용은 툴바, 멤버 변수, 메소드를 참고한다. SO의 Design Editor의 추가 기능은 내용은 하위 단락(서비스 오브젝트 일반 속성)에서 설명하도록 한다.
디자인 에디터의 여백에 마우스 오른쪽 버튼을 클릭하면 아래와 같은 서비스 오브젝트 화면에 표시된다.
[Properties] > [일반] 탭에서 SO의 리소스 정보 및 Op Code Method를 관리한다. [추가] 버튼을 클릭하면 OP code 목록에 OP Code를 추가하고, [삭제] 버튼을 클릭하면 OP code 목록에서 선택된 OP Code를 삭제할 수 있다.
-
기본 정보
항목 설명 물리명
ProStudio에서 생성하는 리소스의 식별 기준이 되는 Physical Name이다.
논리명
리소스의 가독성을 위한 물리명과 1:1로 매치되는 간략한 이름이다.
서비스명
서비스의 위한 기준이 되는 이름이다.
설명
서비스에의 상세 Spec 등을 기술한다.
Use OP code
Op Code Method 기능의 사용 여부이다.
체크박스를 체크하는 경우 OP code를 사용하며 Executor Source가 전문의 opCode 값에 의해 분기 가능하도록 변경된다. 자세한 설명은 "OP Code 사용"을 참고한다.
-
OP code 목록
항목 설명 Op Code
OP Code명이다.
Method Name
OP Code Method Name이다. Method Name 기준으로 디자인 에디터의 메소드로 추가되어 관리된다.
Input DO
Input DO명을 입력한다. [...] 버튼을 클릭하여 대상 DO를 선택한다.
Output DO
Output DO명을 입력한다. [...] 버튼을 클릭하여 대상 DO를 선택한다.
OP Code 사용
OP Code는 하나의 서비스만 처리 가능한 구조를 확장하기 위해서 사용한다. 하나의 서비스에는 ServiceObject를 Overrice한 1개의 서비스를 만드는 것이 일반적이다. 여러 개의 서비스 메소드의 지원을 위한 기능이 OP Code이다.
디자인 에디터의 일반 속성 화면(디자인 에디터 - 일반 속성)의 'Use OP code' 항목을 체크하는 경우 아래 예시와 같이 Executor Source가 전문의 opCode 값에 의해 분기 가능하도록 변경된다. 아래 예시와 같이 입력된 Header에 "opCode" 노드에 값이 존재하는 경우 해당 매칭되는 OP Code Method를 처리하게 된다. Default(Use OP code가 체크 되지 않았을 때)는 ServiceObject를 Overrice한 메소드를 사용한다.
다음은 'Use OP code' 항목을 체크하는 경우 Executor 발췌한 내용이다.
package com.tmax.test; import com.tmax.proobject.engine.service.executor.ServiceExecutor; import com.tmax.proobject.engine.promapper.ProMapperUtil; import com.tmax.proobject.engine.servicemanager.ServiceContext; import com.tmax.proobject.engine.servicemanager.thread.ServiceWorkerThread; public class TestSo01Executor extends ServiceExecutor { public TestSo01Executor() { serviceObject = new TestSo01(); } public Object execute(Object serviceInput, String serviceExecutionMethod) throws Throwable { ServiceWorkerThread worker = (ServiceWorkerThread)Thread.currentThread(); ServiceContext serviceContext = (ServiceContext)worker.getExecutingServiceInfo(); String opCode = serviceContext.getServiceRequestContext().getRequest().getHeader().get("opCode"); ClassLoader classLoader = serviceContext.getServiceRequestEvent().getServiceGroupClassLoader(); Object unmarshaledInput = ProMapperUtil.unmarshal(serviceContext.getServiceRequestEvent(), serviceInput, serviceContext.getServiceRequestEvent().getServiceMeta().getInputDto(), classLoader); Object output; switch( opCode ) { case "svc1OpCode" : output = ((TestSo01) serviceObject).svc1( (com.tmax.test.TestDo0001) unmarshaledInput); break; default : output = serviceObject.service(unmarshaledInput); } if(serviceContext.getDelayedServiceCall() != null) { return null; } else { Object marshaledOutput = ProMapperUtil.marshal(serviceContext.getServiceRequestEvent(), output, serviceContext.getServiceRequestEvent().getServiceMeta().getOutputDto(), classLoader); return marshaledOutput; } } public String getRendezvousMethodName(String service){ return null; } }
4.3. EMB Designer
EMB Designer는 메소드 내용을 플로우 설계, 플로우 편집, 소스 편집, 플로우 삭제 등 개발자가 실질적으로 개발할 수 있는 영역으로 EMB 모듈의 플로우를 가시적으로 나타낸다. 사용자는 Palette에서 다양한 모듈을 가져다 드래그 앤드 드롭으로 추가할 수 있다. 자세한 내용은 EMB Designer를 참고한다.
EMB Designer의 소스 에디터와 디자인 에디터를 이동하면서 편집하기에는 불편하므로 소스 에디터의 원하는 위치에서 이너 모듈, 버츄얼 모듈, 루프 모듈을 추가할 수 있다.
다음은 소스 에디터에서 모듈을 추가하는 방법에 대한 설명이다.
-
EMB Designer에서 모듈을 추가할 SO를 생성한다(SO 생성 참고).
EMB Designer -
EMB Designer의 [소스] 탭을 선택한 후 모듈을 추가할 위치에 마우스를 이동한다.
EMB Designer - [소스] 탭 -
[에디터 모듈 생성] 버튼을 클릭한 후 [모듈 추가] > [Vertual Modeule]을 선택한다. [에디터 모듈 생성] 버튼은 [소스] 탭에서만 활성화되고 모듈을 생성하거나 삭제할 수 있다.
EMB Designer - [소스] 탭 - 에디터 모듈 생성 버튼 -
선택한 모듈별 소스 코드가 소스 에디터에 추가된다. 다음은 소스 에디터에 버츄얼 모듈(소스)이 추가된 내용이다.
EMB Designer - [소스] 탭 - 버츄얼 모듈 추가 (소스)EMB Designer - [소스] 탭 - 버츄얼 모듈 추가 (디자인)
4.4. Service Object(SO) 연동
이미 개발된 SO를 연동하여 동기(Synchronous), 비동기(Asynchronous) Call 등을 수행하여 다양한 유형의 업무 유형을 처리할 수 있다.
다음은 EMB의 노드에서 연동 모듈을 추가하는 과정에 대한 설명이다.
-
View 영역의 [Object Pool] 탭에서 연동할 SO를 조회한 후 연동할 SO를 드래그 앤드 드롭으로 EMB Flow Editer에 추가한다.
SO연동 - SO 연동 노드 추가 -
추가된 연동 Node를 업무 목적에 맞게 설정한다. 자세한 개발 방법은 "ProObject 런타임 엔진 개발자 안내서"를 참고한다.
SO연동 - SO 연동 노드 설정항목 설명 이름
EMB Flow에 표시 및 소스의 주석에 사용되는 이름이다.
어플리케이션
Callee의 애플리케이션명이다.
서비스 아이디
실제로 Call되는 SO이며, Package+Class명(SO명)이다.
연동방법
SO의 연동 방법은 다음과 같다.
-
SYNC : 동기(Synchronous)을 의미한다. 런타임 API기준 ServiceManager.call이다.
-
ASYNCREPLY : 비동기(Asynchronous) Call을 의미하며, 결과 값을 받는다. 런타임 API는 ServiceManager.acall이다. 결과값을 받기 위해서는 연동 호출 이후 ServiceManager.getReply를 해야 한다.
-
ASYNCNOREPLY : 비동기(Asynchronous) Call을 의미하며, 결과 값을 받지 않는다. 런타임 API는 ServiceManager.acall_noreply이다.
-
RETURNCALL : call 방식과 유사하며, 서비스를 동기적(Synchronous)으로 요청하는 경우에 사용한다. 연동할 때도 단일 Thread로 처리 가능하다. 런타임 API는 ServiceManager.rcall이다.
-
FORWARD : 전문 및 Response 권한을 Callee에게 넘기긴다. 런타임 API는 ServiceManager.forward이다.
연동 트랜잭션
Caller와 Callee의 Transaction을 하나로 할 것인지를 나타 낸다.
-
NONE : 해당 사항이 없음(acall, acall_noreply에서 지원하지 않는다.)
-
JOIN : Caller와 Callee의 트랜잭션을 하나로 처리한다. 런타임의 Type은 TransactionType.JOIN이다.
-
SPLIT : Caller와 Callee의 트랜잭션을 각각 처리한다. 런타임의 Type은 TransactionType.SPLIT이다.
time out
Time out 시간을 설정한다.
rcall 호출 methode명
RCall한 메소드명을 설정한다.
error handle method명
RCall할 때 사용할 Error Handler를 설정한다.
랑데뷰 match key 변수명
랑데뷰 Match Key를 설정한다.
-
5. Job Object(JO)
배치 JOB 개발을 위한 표준 프레임 및 대용량 배치 처리를 위한 아키텍처 제공하며 배치 개발 및 운영 편의성을 위한 스케줄러를 제공한다. Job Object는 배치를 수행할 때 태스크를 정의하고 데이터 가공할 BO의 수행 순서 및 런타임에 Thread 및 DB 세션관리를 제어할 수 있다.
5.1. JO 생성
다음은 JO를 생성하는 과정에 대한 설명이다.
-
Package Explorer의 컨텍스트 메뉴에서 [New] > [JOB Object]를 선택한 후 JOB 생성 화면에서 Batch Job 플로우를 생성하기 위한 모듈의 기본 정보를 등록한다.
JOB 생성 화면항목 설명 프로젝트명
생성할 JO가 위치할 실제 프로젝트명을 입력한다.
패키지
실제 사용하는 패키지 네이밍 규칙에 따라 패키지명을 정의한다.
논리명
생성할 Job 플로우의 논리명을 입력한다.
파라미터 DO
JO에서 사용될 배치 입력 파라미터 값을 설정한다. 설정할 파라미터는 [검색] 버튼을 클릭하면 Search DTO 화면(JOB 생성 화면 - Search DTO화면)에서 선택한다.
물리명
생성할 Job 플로우의 논리명을 입력한다.
설명
생성할 Job 플로우에 대한 부가 설명을 입력한다.
'파라미터 DO'항목에서 [검색] 버튼을 클릭하면 Search DTO 화면이 나타난다. 목록에서 등록할 항목을 선택한 후 [OK] 버튼을 클릭한다.
JOB 생성 화면 - Search DTO화면JOB 생성 화면에서 파라미터 DO가 등록된 것을 확인할 수 있다.
JOB 생성 화면 - 파라미터 설정 -
JOB 생성 화면에서 모듈의 기본 정보를 모두 설정한 후 [Finish] 버튼을 클릭하면 Job Object Task를 편집할 수 있는 에디터로 이동한다.
Job 일반 화면 -
생성한 JO의 Job 일반 화면에서 [배치 스크립트] 탭을 클릭한 후 [Shell 배포] 버튼을 클릭하면 배치 Shell을 배포할 수 있다.
Job 배포배치 Shell 배포를 위해서는 아래와 같이 PoDevSvr.xml에 배포할 Path Config인 GENERATE_JOB_SCRIPT_LOCATION가 설정되어 있어야 한다.
<?xml version="1.0" encoding="EUC-KR" standalone="yes"?> <serverConfig xmlns="http://www.tmax.co.kr/proobject/serverConfig"> : 중략 : <configField id="GENERATE_JOB_SCRIPT_LOCATION" value="/home/newdev/proobject/resources/jobShell" type="String" xmlns=""/> </serverConfig>
5.2. Design Editor
디자인 에디터는 JO 생성하는 경우 조회되는 초기 화면으로 Job Task를 등록, 구성하는 화면이다.
JO를 디자인할 수 있는 에디터로 Task를 조립, 연결할 수 있으며 Properties를 이용하여 사용할 오브젝트를 선택할 수 있다.
JO 최상위 노드로 JOB명, 파라미터 등록 등 기본 정보를 설정한다. JO의 시작점으로 다음과 같이 JO 디자인 노드의 시작이다.
JO 디자인 영역에 추가할 수 있는 모듈은 Condition Block, Step Block, Partitioner Block, ETL Task, Online Task, Normal Task 6가지로 구분된다.
메뉴 | 설명 |
---|---|
(Nodes) |
|
5.2.1. Condition Block
Condition Block을 통해 조건에 따른 분기를 지원한다.
Palette의 [Condition Block]을 선택한 후 디자인 화면에 드래그 앤드 드롭하면 모듈이 생성된다. Condition Block을 클릭하면 [Properties] 탭에서 내용을 확인할 수 있고, Condition Block의 이름 변경도 가능하다.
항목 | 설명 |
---|---|
Block 명 |
Condition Block의 이름을 정의한다. |
설명 |
Condition Block의 설명을 넣는다. |
ELSE IF |
'ELSE IF' 체크박스는 XOR 처리로 Condition Block이 3개 이상 묶인 경우 마지막 블록에 ELSE 조건이 아닌 ELSE IF 조건을 설정하는 경우 선택한다. |
조건 |
해당 Condition Block이 수행 되기 위한 조건을 작성하는 영역이다. |
5.2.2. Step Block
Palette의 [Step Block]을 선택한 후 디자인 화면에 드래그 앤드 드롭하면 모듈이 생성된다. Step Block을 클릭하면 [Properties] 탭에서 내용을 확인할 수 있고, Step Block의 이름 변경도 가능하다.
항목 | 설명 |
---|---|
Step ID |
Step Block의 식별자이다. |
Block 명 |
개발자가 인식하기 쉬운 논리적인 이름이다. |
Step 실행 결과 변수명 |
Step Block 수행 결과를 받을 변수명을 정의한다. |
마지막 블록 사용 |
마지막 블록의 사용 여부를 설정한다. |
선 후 처리 클래스 |
해당 Step Block의 선 후 처리를 할 수 있는 클래스를 지정한다. IStepPrePostHandle 인터페이스를 implements받은 클래스여야 한다. |
5.2.3. Partitioner Block
Palette의 [Partitioner Block]을 선택한 후 디자인 화면에 드래그 앤드 드롭하면 모듈이 생성된다. Partitioner Block을 클릭하면 [Properties] 탭에서 내용을 확인할 수 있고, Partitioner Block의 이름 변경도 가능하다.
항목 | 설명 |
---|---|
Partitioner ID |
Partitioner Block의 식별자이다. |
Block 명 |
개발자가 인식하기 쉬운 논리적인 이름이다. |
Chunk Size |
한개의 처리(Call)시에 순차적으로 처리 되는 처리 개수이다. 예를 들어 200개의 처리 대상 중 Chunk Size가 10이면 20개의 Block이 수행된다. |
병렬 실행 수 |
동시에 최대 수행될 수 있는 병렬 처리 수행 횟수를 정의한다. |
파티셔너 클래스 |
IDataPartitioner 혹은 IRangePartitioner 인터페이스를 implements 받은 클래스여야 한다. |
5.2.4. ETL Task
ETL Task는 사용자의 설정에 따라 수집/가공/적재 순의 데이터 처리를 병렬로 처리하는 Task이다. 수집, 가공, 적재는 사용에 따라 구성, 조립하여 사용할 수 있다.
Palette의 [ETL Task]을 선택한 후 디자인 화면에 드래그 앤드 드롭하면 수집/가공/적재 순으로 BO를 등록할 수 있다. ETL Task를 클릭하면 [Properties] 탭에서 내용을 확인할 수 있다.
항목 | 설명 |
---|---|
Task ID |
ETL Task의 식별자이다. |
이름 |
개발자가 인식하기 쉬운 논리적인 이름이다. |
Extract BO |
처리할 대상의 내역을 추출하는 BO를 설정한다. |
Transform BO |
Extract에서 추출된 내역을 처리하는 BO를 설정한다. |
Load BO |
Transform에서 처리된 결과를 Load 처리하는 를 설정한다. |
5.2.5. Online Task
Online Task는 단일 건수 처리 온라인 서비스를 병렬로 일괄 기동하여, 비즈니스 로직의 재사용성과 처리 성능을 극대화하는 Task 배치이다.
Palette의 [Online Task]을 선택한 후 디자인 화면에 드래그 앤드 드롭하면 모듈을 등록할 수 있다. Online Task를 클릭하면 [Properties] 탭에서 내용을 확인할 수 있다.
항목 | 설명 |
---|---|
Task ID |
Online Task의 식별자이다. |
이름 |
개발자가 인식하기 쉬운 논리적인 이름이다. |
애플리케이션 이름 |
서비스 이름에 소속된 애플리케이션을 설정한다. |
서비스 그룹 이름 |
서비스 이름에 소속된 서비스 그룹 을 설정한다. |
서비스 이름 |
Online Task에서 수행할 서비스 이름을 설정한다. |
Input Handler |
RangePartitioner가 앞에 있는 경우만 지정하며, 서비스의 입력값 처리를 위한 Handler이다. |
5.2.6. Normal Task
Normal Task는 ETL Task와 같이 수집/가공/적재로 데이터를 처리하는 경우 데이터를 가공할 때 별도의 BO 등록 및 개발해야 하는 불편을 해소하고 기존 프레임워크에 익숙한 개발자에게 편의성을 제공한다.
Palette의 [Normal Task]을 선택한 후 디자인 화면에 드래그 앤드 드롭하면 Task BO를 등록할 수 있다. Normal Task를 클릭하면 [Properties] 탭에서 내용을 확인할 수 있다.
항목 | 설명 |
---|---|
Task ID |
Normal Task의 식별자이다. |
이름 |
개발자가 인식하기 쉬운 논리적인 이름이다. |
Task BO |
Normal Task에서 처리할 BO를 설정한다. |