BXM 표준

1. Service, Bean, DBIO 사용 공통

1.1. 필수 작성 사항

Service, Bean, DBIO 사용시 공통적인 필수 작성 사항에 대해 설명한다.

(1) @BxmCategory

Service, Bean 의 클래스와 각 클래스의 메소드는 @BxmCategory 어노테이션을 포함 해야 한다(DBIO는 소스생성 방식이므로 개발자가 직접 작성하지 않음).

  • Class에 정의된 @BxmCategory 어노테이션

@BxmService("SSMP1001A")
@BxmCategory(logicalName = "단건 처리")
public class SSMP1001A {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private MSmpEmpInfMng01 mSmpEmpInfMng01;
    ... ...
}
java
  • 메소드에 정의된 @BxmCategory 어노테이션

@BxmServiceOperation("ssmp1001a001")
@BxmCategory(logicalName = "샘플직원정보관리 단건 조회")
public SSMP1001A001OutDto ssmp1001a001(SSMP1001A001InDto input) throws DefaultApplicationException {
    logger.debug("============== SERVICE START ==============");
    logger.debug("input = {}", input);
                ... ...
}
java

(2) Application Exception

Service 오퍼레이션과 Bean 메소드는 반드시 bxm.dft.app.DefaultApplicationException을 throws 해야 한다.

@BxmServiceOperation("ssmp1001a001")
@BxmCategory(logicalName = "샘플직원정보관리 단건 조회")
public SSMP1001A001OutDto ssmp1001a001(SSMP1001A001InDto input) throws DefaultApplicationException /* Exception */ {
    logger.debug("============== SERVICE START ==============");
    logger.debug("input = {}", input);
                ... ...
}
java

1.2. 금지 항목

Service, Bean, DBIO 사용 시 사용하지 말아야 하는 항목에 대해 설명한다.

(1) 객체 직접 생성 금지

Service, Bean, DBIO는 프레임워크에서 관리하는 객체이므로 개발자가 new를 통해 직접 객체를 생성하지 않는다.

/* 직접 New 연산자를 통해서 생성하면 안된다 */
private MSmpEduCustomerMng mSmpEduCustomerMng = new MSmpEduCustomerMng();
java

객체의 생성은 Service 오퍼레이션 또는 Bean 메소드에서 getBean 방식을 이용한다.

/* getBean 방식을 사용한 Bean 생성 */
if(mSmpEduCustomerMng == null){
    mSmpEduCustomerMng = DefaultApplicationContext.getBean(MSmpEduCustomerMng.class);
}
java

(2) 데이터 객체를 멤버변수로 포함 금지

Service, Bean, DBIO는 싱글톤 객체로 해당 클래스의 인스턴스는 프래임워크 내에 1개만 생성 된다. 따라서, 멤버변수로 데이터를 저장하는 일반객체(원시타입 포함) 및 IO 객체를 갖게 되면 객체의 데이터가 공유되는 형태가 되므로 멤버변수에 포함하지 않아야 한다(버그발생가능)

(3) 자신의 타입을 멤버 변수에 포함 금지

Bean의 경우 자신을 멤버 변수로 갖는 구조는 허용되지 않는다.

@BxmBean
@BxmCategory(logicalName = "샘플직원정보관리")
public class MSmpEmpInfMng {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /* MSmpEmpInfMng Bean이 자기 자신(MSmpEmpInfMng)을 맴버변수로 가지고 있으면 안된다 */
    private MSmpEmpInfMng mSmpEmpInfMng;
    ... ...
}
java

(4) 멤버변수의 get/set 메소드 작성 금지

@BxmService("SSMP1001A")
@BxmCategory(logicalName = "단건 처리")
public class SSMP1001A {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private MSmpEmpInfMng mSmpEmpInfMng; /* 샘플직원정보관리 */

    /* 멤버변수의 get 메소드가 있으면 안된다 */
    public MSmpEmpInfMng getmSmpEmpInfMng() {
        return mSmpEmpInfMng;
    }

    /* 멤버변수의 set 메소드가 있으면 안된다 */
    public void setmSmpEmpInfMng(MSmpEmpInfMng mSmpEmpInfMng) {
        this.mSmpEmpInfMng = mSmpEmpInfMng;
    }
    ... ...
}
java

2. Service

2.1. 필수 작성 사항

Service 작성 시 필수로 작성해야 하는 항목에 대해 설명한다.

(1) Service는 @BxmService 어노테이션을 클래스 정의부에 포함한다.

(2) @BxmService는 Service 이름을 포함한다. Service 이름과 클래스 이름은 명명규칙 표준을 따른다.

2.2. 금지 항목

Service 작성 시 금지 항목에 대해 설명한다.

(1) Service는 다른 Service의 오퍼레이션을 직접 호출 할 수 없다.

(2) 멤버변수로 Bean의 객체만 가질 수 있다.

(3) 비즈니스 로직을 작성하지 않는다. 비즈니스 로직은 Bean에 작성해야 한다.

3. Bean

3.1. 필수 작성 사항

Bean 작성 시 필수로 작성해야 하는 항목에 대해 설명한다.

(1) @BxmBean

Bean은 @BxmBean 어노테이션을 클래스 정의부에 포함한다.

/* Bean 작성 시 필수 어노테이션 */
@BxmBean
@BxmCategory(logicalName = "샘플직원정보관리")
public class MSmpEmpInfMng {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    ... ...
}
java

배치 Bean(ItemReader, ItemProcessor, ItemWriter, Tasklet Interface로 구현)일 경우에는 Bean 명을 명시한다.

/* Bean 작성 시 필수 어노테이션 */
@BxmBean("MSmpTaskletBtch")
@Scope("step")
@BxmCategory(logicalName = "Tasklet 샘플")
public class MSmpTaskletBtch implements Tasklet{
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    ... ...
}
java

3.2. 금지 항목

Bean 작성시 금지 항목에 대해 설명한다.

(1) Service 오퍼레이션 직접 호출 금지

Bean 에서 Service의 오퍼레이션을 호출 할 수 없다.

@BxmBean
@BxmCategory(logicalName = "샘플직원정보관리")
public class MSmpEmpInfMng {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /* BxmService */
    private SSMP1001A ssmp1001a;

    @BxmCategory(logicalName = "단건 조회")
    public DSmpEmpTst000Dto getEmpInf(DSmpEmpTst000Dto input) throws DefaultApplicationException {
        if(ssmp1001a == null){
            ssmp1001a = DefaultApplicationException.getBean(SSMP1001A.class);
        }

        /* Bean에서 Service의 오퍼레이션을 호출하면 안된다 */
        ssmp1001a.getmSmpEmpInfMng();
        return new DSmpEmpTst000Dto();
    }
}
java

4. DBIO

4.1. 금지 항목

다음은 DBIO를 사용시 주의 사항에 대한 설명이다.

(1) DBIO 인터페이스 구현 금지

프래임워크에서 DI(Dependency Injection)을 통해 구현클래스를 주입하므로 DBIO 인터페이스를 구현하는 구현클래스를 개발자가 직접 작성하지 않는다.

(2) 인터페이스 파일 직접 편집 금지

DBIO는 .dbio 파일과 .java(interface로 정의됨)이 한 쌍으로 생성되며 .java 파일은 개발자가 직접 작성/편집하지 않는다.

(3) DBIO 에 생성하는 SQL 의 개수는 10개 미만으로 권장한다.

SQL의 개수가 너무 많으면 DBIO 에디터 동작 및 커밋 동작이 느려질 수 있다.

5. IO

5.1. 금지 항목

다음은 IO 사용 시 주의 사항에 대한 설명이다.

(1)자동 생성된 파일 직접 편집 금지

자동 생성된 .java 파일은 개발자가 직접 수정하지 않는다.

6. @BxmCategory

@BxmCategory 어노테이션은 플로우다이어그램 생성 시 반드시 필요한 어노테이션이다. 다음은 Service, Service 오퍼레이션, Bean, Bean 메소드, DBIO, DBIO 메소드에 포함되는 @BxmCategory 어노테이션의 사용상 주의 사항을 설명한다.

6.1. 필수 작성 사항

(1) @BxmCategory 는 logicalName정보를 포함한다.

(2) 논리명인 logicalName은 Package 익스플로러에 노출되는 이름으로 알아보기 쉬운 이름을 사용한다

6.2. 금지 항목

(1) logicalName은 문자열로 작성하며 \n, \t 등의 특수 문자(Escape)를 사용하지 않는다. 또한 '+' 로 문자열을 표현 하지 않는다

@BxmBean
@BxmCategory(logicalName = "샘플직원\n정보\n관리")
public class MSmpEmpInfMng {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    ... ...
}
java

7. 어노테이션 요약

어노테이션은 JAVA 메타 언어로 소스 상에 표기하는 것만으로 런타임에 어떤 기능을 수행하거나, 클래스로부터 어떤 정보를 추출 할 수 있도록 한다.

어노테이션 요약
구분 설명 표기위치

@BxmService

Service 클래스로 기능함

Service 클래스 선언부

@BxmServiceOperation

Service 오퍼레이션으로 기능함

Service 클래스
public 메소드 선언부

@BxmBean

Bean 클래스로 기능함

Bean 클래스 선언부

@BxmCategory

논리명 입력

Service 클래스 선언부

Service 클래스 public 메소드 선언부

Bean 클래스 선언부

Bean 클래스 public 메소드 선언부

DBIO 인터페이스 선언부(자동생성)

DBIO 인터페이스 메소드 선언부(자동생성)

@TransactionalOperation

트랜잭션을 처리할 때 사용

(트랜잭션 분리 시 사용)

트랜잭션을 처리할 메소드 선언부

SWLab Bankware Global
  • 전체
  • BXM
  • BXCM
  • BXCP
  • BXI
제품 선택 시 더 정확한 매뉴얼 가이드를 제공해드립니다.

제품

Copyright© Bankwareglobal All Rights Reserved.