수제비 2022 정보처리기사 실기 수험서를 보고 공부한 기록입니다.
EAI Platform 기반 위에 각 애플리케이션의 어댑터가 데이터 및 프로세스를 변환하여 이기종 간의 비즈니스를 연결한다
EAI 플랫폼(EAI Platform)
어댑더(Adapter)
브로커(Broker)
메시지 큐(Message Queue)
비즈니스 워크플로우(Business Workflow)
포인트 투 포인트(Point-to-point)
허브 앤 스포크(Hub & Spoke)
메시지 버스(Message Bus)
하이브리드(Hybrid)
구분 | EAI | ESB |
---|---|---|
개념 | 미들웨어(Hub)를 이용하여 비즈니스 로직을 중심으로 기업 내 애플리케이션을 통합 연계 | 미들웨어(Bus)를 이용하여 서비스 중심으로 서비스를 지원하기 위한 관련시스템과 유기적 연계 |
수행 목적 | 기업 내부의 이기종 응용 모듈 간 통합 | 기업 간의 서비스 교환을 위해 표준 API로 통합 |
토폴로지 | 포인트 투 포인트, 허브 앤 스포크, 메시지 버스, 하이브리드 | 버스 방식의 분산형 토폴로지 구성 |
표준 | 벤더 종속적 기술 적용 | 표준기술사용(웹 서비스, XML 등) |
핵심 기술 | 어댑터, 브로커, 메시지 큐 | 웹 서비스, 지능형 라우터, 포맷 변환, 개방형 표준 |
통합 형태 | 애플리케이션 간의 단단한 통합 | 서비스 간의 느슨한 통합 |
적용 영역 | 기업 내부망 | 기업 내부+기업 외부 채널망 |
연계 모듈 환경 구축을 위해 계정 생성, 테이블 생성, 프로그램 구현 절차를 가진다
1. 연계 DB 또는 계정 생성
2. 연계를 위한 테이블 생성
3. 연계 응용 프로그램 구현
CREATE OR REPLACE TRIGGER 프로그램명
//[프로그램명]으로 트리거를 생성
AFTER INSERT
OR UPDATE
OR DELETE ON 테이블명
FOR EACH ROW
//연계 데이터를 추출할 테이블 각 행에 INSERT, UPDATE, DELETE가 발생할 때마다 수행
DECLARE AFTER_CODE VARCHAR2(5);
//선언부
//사용할 변수 선언
IF INSERTING THEN
//데이터가 추가 된 경우
SELECT [변환 후 코드 값]
INTO AFTER_CODE
FROM [코드 매핑 테이블]
WHERE [변환 전 코드 값] = :new.[코드 컬럼]
//공통 코드 및 데이터 변환 처리
INSERT INTO [로그 테이블명] ([컬럼명1], [컬럼명2], ... [컬럼명n]) VALUES(...);
//진행 단계별 수행 결과에 대한 로깅 처리
로그 테이블에 처리 결과 INSERT
INSERT INTO [연계 테이블명] ([컬럼명1-처리 일시], [컬럼명2-변경 구분], ...[컬럼명n])
VALUES (SYSDATE, 'I', AFTER_CODE, ...[:new.컬럼명]);
//연계 테이블에 INSERT 처리
//변경 구분을 'I'로 설정
ELSIF DELETING THEN
(...)
//데이터가 삭제된 경우 처리
//공통 코드 및 데이터 변환 처리
//연계에 INSERT 처리
//변경 구분을 'D'로 설정
//진행 단계별 수행 결과에 대한 로깅 처리
//로그 테이블에 처리 결과 INSERT
ELSE
IF UPDATING('[코드1 컬럼]') OR UPDATING('[코드2 컬럼]')
THEN
...
ELSIF UPDATING('[텍스트 컬럼]')
THEN
...
ELSIF UPDATING
THEN
...
END IF;
END IF;
//데이터가 수정된 경우
//연계 데이터 중 코드 컬럼이 변경된 경우
//연계 데이터 중 텍스트 컬럼이 변경된 경우
//연계 데이터가 아닌 컬럼이 변경된 경우
EXCEPTION
//오류 처리
WHEN NO_DATA_FOUND THEN (...)
//등록된 코드에 매핑 코드가 없을 경우
WHEN DUP_VAL_ON_INDEX THEN (...)
//테이블 등록 시 동일 PK 데이터 존재
END;
//트리거 종료
웹 서비스는 네트워크에 분산된 정보를 서비스 형태로 개방하여 표준화된 방식으로 공유하는 기술로써 서비스 지향 아키텍처 개념을 실현하는 대표적인 기술이다
웹 서비스는 SOAP 방식, UDDI 방식, WSDL 방식 등이 존재한다
웹 서비스 방식은 EAI/ESB 방식과는 달리 실제 전송이나 전송 이력에 대한 기록 및 모니터링 기능을 별도로 구현해야 한다
웹 서비스 방식인 SOAP 및 WSDL을 활용한 XML 방식으로 구현한다
▼SOAP 요청/응답 구현 예시
[헤더]
<SOAP-ENV: Envelope
xmlns: SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV: encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
[바디]
HTTP 요청 SOAP 메시지
<SOAP-ENV: body>
<m: NoteSrch xmlns: m="">
<NoteNo>202001011</NoteNo>
<m: NoteSrch>
</SOAP-ENV: body>
</SOAP-ENV: Envelope>
HTTP 응답 SOAP 메시지
<SOAP-ENV: body>
<m: NoteRes xmlns: m="">
<NoteNm>채용공고</NoteNm>
<m: NoteRes>
</SOAP-ENV: body>
</SOAP-ENV: Envelope>
▼WSDL 문법구조
//서비스 인터페이스
<wsdl:definitions>
<wsdl:types>데이터 타입 선언</wsdl:types>
<wsdl:message>메시지 인자와 리턴값 선언</wsdl:message>
<wsdl:portType>인터페이스 정의
<wsdl:operation>메서드 선언</wsdl:operation>
</wsdl:protType>
//서비스 구현
<wsdl:binding>네트워크 프로토콜 및 포트매핑</wsdl:binding>
<wsdl:service>서비스 정의
<wsdl:port>웹 서비스 URL</wsdl:port>
</wsdl:service>
<wsdl:definitions>
▼WSDL 문법 상세 설명
WSDL 1.1 | WSDL 2.0 | 설명 |
---|---|---|
service | service | 웹 기반 프로토콜에 노출되는 시스템 함수의 집합을 포함한다 |
port | endpoint | 웹 서비스로의 주소 또는 연결 지점을 정의한다 |
binding | binding | 인터페이스를 규정하고 SOAP 바인딩 스타일(RPC/Document)과 트랜스포트(SOAP 프로토콜)을 정의한다 |
porttype | interface | 웹 서비스를 정의한다 |
operation | operation | SOAP의 동작 및 메시지 인코딩 방식을 정의한다 |
message | 없음 | 보통 message는 operation에 상응한다 |
types | types | 데이터를 기술한다 |
현재의 표준은 2.0으로, RESTful 웹 서비스에 대한 더 나은 지원을 제공하며 구현하기가 훨씬 쉬워졌다
송신 시스템에서 전달받은 XML의 정보를 추출하여 운영 DB에 INSERT하는 연계 응용 프로그램을 작성한다
▼수신 연계 응용 프로그램 구현(자바)
//변수 선언
String dbURL="jdbc:[DB제품명]:[드라이버 명]@[ip]:[port]:[인스턴스명]";
Connection Conn=null;
PreparedStatement pstmt=null;
String logString="";
try{
//연계(인터페이스) 파일 읽기
NodeList nList=doc.getElementsbyTagName("[연계 데이터 XML Tag명]");
//진행 단계별 수행 결과에 대한 로깅 처리, 로그 파일에 처리 결과 기록
logString="[진행단계명]"+[진행단계 변수명]+"[처리결과]"+[처리 결과 변수명];
logWriter.write(logString);
//운영 DB Connection
Class.forName("[JDBC 드라이버명]");
conn=DriverManager.getConnection(dbURL, "[DB ID]", "[DB PW]");
if(conn==null){
//운영 DB 연결 실패, 오류 로그 처리
}
else{
//진행 단계별 수행 결과에 대한 로깅 처리, 로그 파일에 처리 결과 기록
//운영 DB의 테이블에 데이터 INSERT를 위한 SQL
String sql="INSERT INTO[운영 DB 데이터 반영 대상 테이블명]" + "([컬럼명1], [컬럼명2], ...,
[컬럼명n])" + "VALUES(?, ?, ..., ?)";
pstmt=conn.perpareStatement(sql);
for(int idx=0; idx<nList.getLength(); idx++){
//행(Row)의 수만큼 반복
Node dataNode=nList.item(idx);
if(dataNode.getNodeType==Node.ELEMENT_NODE){
Element dataElement=(Element)dataNode;
//INSERT SQL 파라미터(물음표)를 연계 파일에서 읽는다
pstmt.setString(1, dataElement.getAttribute("[컬럼단위 XML 태그명1]"));
pstmt.setString(2, dataElement.getAttribute("[컬럼단위 XML 태그명2]"));
pstmt.setString(n, dataElement.getAttribute("[컬럼단위 XML 태그명n]"));
//행의 각 컬럼 값으로 설정
//운영 DB의 테이블에 INSERT
int insertCnt=pstmt.executeUpdate();
}
} catch(SQLException sqle){
//SQLException 예외 처리
} catch(NullPointerException npe){
//NullPointerException 예외 처리
} catch(FileNotFoundException fnfe){
//FileNotFoundException 예외 처리
} catch(IOException ioe){
//IOException 예외 처리
}
IPC는 운영체제에서 프로세스 간 서로 데이터를 주고받기 위한 통신 기술이다
IPC의 주요 기법에는 메시지 큐, 공유메모리, 소켓, 세마포어가 있다