BxM 프레임워크의 일반적인 계층 및 파일 매핑을 실제 파일명과 함께 예를 들어 설명해 드릴게요. 가상의 "고객 정보 조회 및 수정" 기능을 중심으로 설명하겠습니다.
예시: 고객 정보 조회 및 수정 기능
1. WebSquare 화면 (클라이언트 계층)
- 역할: 사용자가 고객 정보를 조회하고 수정할 수 있는 UI를 제공합니다. 서버에 조회/수정 요청을 보내고, 받은 결과를 화면에 표시합니다.
- 주요 파일:
- CM0101.xml: 고객 정보 조회/수정 화면의 UI(레이아웃, 입력 필드, 버튼, 그리드 등)를 정의합니다.
- 예시 내용: 고객ID 입력란, 조회 버튼, 고객 목록을 표시할 그리드, 상세 정보 입력란, 저장 버튼 등
- CM0101.js: CM0101.xml 화면의 클라이언트 측 로직을 정의합니다. (버튼 클릭 시 서버 호출, 조회 결과 받아서 그리드에 표시, 입력값 유효성 검사 등)
- 예시 내용:
- fn_searchCustomer() 함수: 조회 버튼 클릭 시 SC_CustomerService.getCustomerList 서비스 호출
- fn_saveCustomer() 함수: 저장 버튼 클릭 시 SC_CustomerService.saveCustomer 서비스 호출
- 예시 내용:
- CM0101.xml: 고객 정보 조회/수정 화면의 UI(레이아웃, 입력 필드, 버튼, 그리드 등)를 정의합니다.
2. 서버 측 진입점 (SC: Service Controller / Service Component)
- 역할: WebSquare 화면에서 넘어온 요청을 처음으로 받아서 처리할 자바 메서드를 찾아 매핑하고, 비즈니스 로직을 담당하는 BC 계층을 호출합니다. 트랜잭션의 시작과 종료를 관리합니다.
- 주요 파일:
- SC_CustomerService.java: 고객 서비스와 관련된 요청을 처리하는 컨트롤러 역할을 합니다.
- 예시 메서드:
-
Java
@BxMServiceOperation("getCustomerList") // WebSquare에서 "getCustomerList" 오퍼레이션 호출 시 이 메서드 실행 public BxMServiceResponse getCustomerList(BxMServiceRequest request) { // BC_Customer.java의 getCustomerListBySearchCondition 메서드 호출 // 검색 조건을 담은 DTO를 BC에 전달하고, BC로부터 결과 DTO를 받음 CustomerSearchConditionInDto inDto = request.getParam(CustomerSearchConditionInDto.class); CustomerListOutDto outDto = bc_Customer.getCustomerListBySearchCondition(inDto); return BxMServiceResponse.create().addParam(outDto); } @BxMServiceOperation("saveCustomer") // WebSquare에서 "saveCustomer" 오퍼레이션 호출 시 이 메서드 실행 public BxMServiceResponse saveCustomer(BxMServiceRequest request) { // BC_Customer.java의 saveCustomerInfo 메서드 호출 CustomerSaveInDto inDto = request.getParam(CustomerSaveInDto.class); bc_Customer.saveCustomerInfo(inDto); // 저장 로직 수행 return BxMServiceResponse.create().addResult("Success", true); }
- SC_CustomerService.java: 고객 서비스와 관련된 요청을 처리하는 컨트롤러 역할을 합니다.
3. 비즈니스 로직 계층 (BC: Business Component)
- 역할: SC로부터 호출되어 실제 핵심 비즈니스 로직을 수행합니다. 데이터 가공, 복잡한 업무 규칙 적용, 여러 DBIO 호출 조합 등이 이루어집니다.
- 주요 파일:
- BC_Customer.java: 고객 정보와 관련된 구체적인 비즈니스 규칙을 구현합니다.
- 예시 메서드:
-
Java
// 고객 목록 조회 비즈니스 로직 public CustomerListOutDto getCustomerListBySearchCondition(CustomerSearchConditionInDto inDto) { // 1. 입력값 유효성 검사 (예: 검색 조건 필수 여부) // 2. DBIO 호출하여 고객 목록 조회 (dbio_Customer.xml의 selectCustomerList 쿼리 호출) List<CustomerDto> customerList = dbio_Customer.selectCustomerList(inDto); // DBIO 호출 예시 // 3. 조회된 데이터를 Business 규칙에 따라 가공 (예: 상태 코드 변환) // 4. 결과 DTO에 담아 반환 CustomerListOutDto outDto = new CustomerListOutDto(); outDto.setCustomerList(customerList); return outDto; } // 고객 정보 저장 비즈니스 로직 public void saveCustomerInfo(CustomerSaveInDto inDto) { // 1. 입력값 유효성 검사 (예: 필수 필드 누락 여부) // 2. 기존 고객인지 신규 고객인지 판단 if (inDto.isNewCustomer()) { dbio_Customer.insertCustomer(inDto); // 신규 고객 등록 (DBIO 호출) } else { dbio_Customer.updateCustomer(inDto); // 기존 고객 수정 (DBIO 호출) } // 3. 추가적인 관련 데이터 처리 (예: 이력 저장 등, 다른 DBIO 호출 가능) }
- BC_Customer.java: 고객 정보와 관련된 구체적인 비즈니스 규칙을 구현합니다.
4. 데이터 접근 계층 (DBIO: Data Base Input/Output)
- 역할: 데이터베이스와의 연동을 전담합니다. SQL 쿼리를 정의하고 실행하며, 데이터베이스 결과를 자바 객체로 매핑합니다. (DAO 역할)
- 주요 파일:
- dbio_Customer.dbio: 고객 테이블에 대한 데이터베이스 CRUD 쿼리를 정의합니다.
- 예시 내용 (.dbio 파일은 XML 기반입니다):
-
XML
<?xml version="1.0" encoding="UTF-8"?> <dbio namespace="dbio_Customer"> <select id="selectCustomerList" resultClass="com.example.dto.CustomerDto"> SELECT CUST_ID, CUST_NM, CUST_TEL_NO, CUST_ADDR FROM TB_CUSTOMER WHERE 1=1 <if test="searchCustNm != null and searchCustNm != ''"> AND CUST_NM LIKE '%' || #{searchCustNm} || '%' </if> ORDER BY CUST_ID </select> <insert id="insertCustomer" parameterClass="com.example.dto.CustomerSaveInDto"> INSERT INTO TB_CUSTOMER ( CUST_ID, CUST_NM, CUST_TEL_NO, CUST_ADDR ) VALUES ( #{custId}, #{custNm}, #{custTelNo}, #{custAddr} ) </insert> <update id="updateCustomer" parameterClass="com.example.dto.CustomerSaveInDto"> UPDATE TB_CUSTOMER SET CUST_NM = #{custNm}, CUST_TEL_NO = #{custTelNo}, CUST_ADDR = #{custAddr} WHERE CUST_ID = #{custId} </update> </dbio>
- dbio_Customer.dbio: 고객 테이블에 대한 데이터베이스 CRUD 쿼리를 정의합니다.
5. 데이터 전송 객체 (DTO: Data Transfer Object / OMM: Object Meta Model)
- 역할: 각 계층 간 데이터를 주고받을 때 사용되는 구조를 정의합니다. .omm 파일을 통해 DTO 자바 클래스가 자동으로 생성됩니다.
- 주요 파일:
- CustomerSearchConditionIn.omm: 고객 목록 조회 시 입력받는 검색 조건 DTO를 정의합니다.
- 자동 생성: CustomerSearchConditionInDto.java
-
Java
// 자동 생성된 DTO 예시 public class CustomerSearchConditionInDto { private String searchCustNm; // Getter, Setter }
- CustomerListOut.omm: 고객 목록 조회 결과로 반환되는 DTO를 정의합니다.
- 자동 생성: CustomerListOutDto.java
-
Java
// 자동 생성된 DTO 예시 public class CustomerListOutDto { private List<CustomerDto> customerList; // CustomerDto는 별도 OMM 또는 DBIO resultClass로 정의됨 // Getter, Setter }
- CustomerSaveIn.omm: 고객 정보 저장 시 입력받는 DTO를 정의합니다.
- 자동 생성: CustomerSaveInDto.java
-
Java
// 자동 생성된 DTO 예시 public class CustomerSaveInDto { private String custId; private String custNm; private String custTelNo; private String custAddr; // Getter, Setter, isNewCustomer() 등의 로직 추가 가능 }
- Customer.omm (또는 DBIO의 resultClass에서 직접 지정): 단일 고객 정보를 담는 DTO를 정의합니다. (DBIO에서 resultClass로 사용될 수 있음)
- 자동 생성: CustomerDto.java
-
Java
// 자동 생성된 DTO 예시 public class CustomerDto { private String custId; private String custNm; private String custTelNo; private String custAddr; // Getter, Setter }
- CustomerSearchConditionIn.omm: 고객 목록 조회 시 입력받는 검색 조건 DTO를 정의합니다.
전체적인 호출 흐름:
- CM0101.js (WebSquare)에서 사용자가 조회 버튼 클릭 시, 서버의 SC_CustomerService의 getCustomerList 오퍼레이션 호출.
- 이때 CustomerSearchConditionInDto에 검색 조건을 담아 전달.
- **SC_CustomerService.java**의 getCustomerList 메서드가 호출됨.
- SC_CustomerService는 BC_Customer.java의 getCustomerListBySearchCondition 메서드 호출.
- **BC_Customer.java**의 getCustomerListBySearchCondition 메서드에서 비즈니스 로직 수행 후, dbio_Customer.dbio 파일의 selectCustomerList 쿼리를 호출.
- dbio_Customer.dbio에서 데이터베이스로부터 고객 목록을 조회하여 CustomerDto 객체 리스트로 반환.
- BC_Customer는 이 리스트를 받아 CustomerListOutDto에 담아 SC_CustomerService로 반환.
- SC_CustomerService는 CustomerListOutDto를 최종 응답으로 WebSquare 화면에 반환.
- **CM0101.js**는 받은 CustomerListOutDto 데이터를 파싱하여 CM0101.xml 화면의 고객 목록 그리드에 표시.
이 예시를 통해 BxM 프레임워크의 각 계층이 어떤 파일로 구성되고 어떻게 상호작용하는지 이해하시는 데 도움이 되셨기를 바랍니다.
'Sql' 카테고리의 다른 글
| SQL 프로그램없이 웹으로 실습하기 (1) | 2025.07.07 |
|---|---|
| 실무에서 SQL 쿼리를 초보자가 쉽게 이해하고 익히려면 (0) | 2025.07.07 |
| IN,BETWEEN,EXISTS (0) | 2025.07.07 |
| GROUP BY 와 HAVING (0) | 2025.07.07 |
| BxM 프레임워크 이해 (레스토랑 예제) (0) | 2025.07.02 |