트랜잭션 프로세서

마지막 업데이트: 2022년 6월 7일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
그림 5. Bean-1의 A-method가 Transaction을 가지지 않는 경우

ConsenSource 트랜잭션 프로세서

트랜잭션 프로세서에는 ConsenSource의 인증서 레지스트리 트랜잭션 제품군에 대한 비즈니스 로직이 포함되어 있습니다 . Sawtooth 프로세서 클래스를 구현하여 개발자가 인증서 레지스트리 트랜잭션 (또는 실제로 모든 트랜잭션 제품군)을 처리하기위한 애플리케이션 별 코드를 작성할 수 있습니다.

CreateAgentAction

거래는 거래를 서명 및 관련 조직의 대신 작업을 수행 할 수있는 에이전트 개체를 만듭니다. 이 에이전트 개체는 연결된 조직 ID없이 초기화됩니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • 이름이 제공되지 않았습니다.
  • 이미 에이전트와 연결된 공개 키 서명

CreateOrganizationAction

거래는 조직 개체를 만듭니다. 조직은 표준 생성, 인증서 발급 또는 요청과 같이 조직이 수행 할 작업에 따라 STANDARDS_BODY, CERTIFYING_BODY 또는 FACTORY가 될 수 있습니다. 이러한 작업은 조직과 관련된 권한있는 에이전트가 수행합니다. 생성 된 조직 개체는 조직의 권한 목록 내에서 ADMIN으로 트랜잭션에 서명 한 에이전트로 초기화됩니다.

다음 중 하나가 발생하면이 거래는 유효하지 않은 것으로 간주됩니다.

  • 조직 ID, 이름 및 / 또는 조직 유형이 제공되지 않았습니다.
  • 조직 ID가 이미 있습니다.
  • 서명 공개 키가 유효한 에이전트 개체와 연결되어 있지 않습니다.
  • 거래를 제출하는 에이전트에 이미 연결된 조직이 있습니다.
  • 유형이 표준 기관 또는 인증 기관인 트랜잭션 프로세서 경우 주소가 제공됩니다.
  • 유형이 공장 인 경우 주소가 제공되지 않습니다.

UpdateOrganizationAction

트랜잭션 상태에서 조직의 값을 수정합니다. 주소 (공장 용)와 연락처 정보가 모두 업데이트 될 수 있습니다. 제공된 값은 거래와 함께 제출 된 그대로 적용됩니다. 둘 중 하나가 동일하게 유지되어야하는 경우 원래 값을 제공해야합니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • 거래 서명자가 해당 조직의 관리자로 나열되지 않습니다.
  • 제공된 연락처 또는 주소 개체가 완전히 채워지지 않았습니다.
  • 조직이 공장이 아닌 경우 주소 제공

AuthorizeAgentAction

트랜잭션은 지정된 역할에 지정된 공개 키에 대한 조직의 권한 목록에서 항목을 작성합니다. 이 작업은 관련 조직에서 관리자 권한을 부여받은 에이전트 만 수행 할 수 있습니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • 공개 키가 제공되지 않았습니다.
  • 역할이 제공되지 않았습니다.
  • 공개 키 서명은 에이전트와 연결되어 있지 않습니다.
  • 제공된 공개 키는 에이전트와 연결되어 있지 않습니다.
  • 거래를 제출하는 에이전트는 관련 조직 내에서 관리자 권한이 없습니다.
  • 제공된 공개 키는 이미 조직과 연결된 에이전트를 지정합니다.
  • 잘못된 권한 부여 역할이 제공되었습니다.

IssueCertificateAction

거래 정보 지정된 공장에 관한 특정 정책에 대한 자신의 준수를 포함하는 인증서 개체를 만듭니다. 인증서 개체는 인증 기관과 연결된 에이전트에 의해 생성됩니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • ID, 공장 ID, 표준 이름, 타임 스탬프부터 유효 및 / 또는 타임 스탬프까지 유효하지 않음
  • 인증서 ID가 이미 인증서 개체와 연결되어 있습니다.
  • 공장 ID가 유효한 공장을 참조하지 않습니다.
  • 공개 키 서명이 에이전트와 연결되어 있지 않습니다.
  • 거래를 제출하는 에이전트가 인증 기관과 연결되어 있지 않습니다.
  • 발급 기관과 관련된 인증 기관이 표준을 발급하도록 인증되지 않았습니다.
  • 거래를 제출하는 에이전트는 관련 조직 내에서 승인 된 TRANSACTOR가 아닙니다.
  • 표준 이름이 기존 표준과 연결되어 있지 않습니다.
  • 현재 날짜 및 형식과 관련된 잘못된 날짜가 제공되었습니다.

CreateStandardAction

이 거래는 주에서 새로운 인증 표준을 생성합니다. 또한 제공된 표준 버전과 관련된 세부 정보를 포함하는 StandardVersion 하위 개체를 만듭니다. CreateStandardAction 트랜잭션은 표준 기관과 관련된 에이전트에 의해 제출됩니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • standard_id, 이름, 버전, 설명, 링크 또는 승인 날짜가 제공되지 않습니다.
  • standard_id는 이미 기존 표준과 연결되어 있습니다.
  • 서명자는 표준 기관과 관련이 없습니다.
  • 서명자는 조직 내에서 거래자 권한이 없습니다.

UpdateStandardAction

거래는 관련 표준 개체 아래 상태에서 새로운 표준 버전을 만듭니다. UpdateStandardAction 트랜잭션은 표준 기관과 관련된 에이전트에 의해 제출됩니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • standard_id, 버전, 설명, 링크 또는 승인 날짜가 제공되지 않았습니다.
  • standard_id는 기존 표준과 연관되지 않습니다.
  • 버전이 이미 기존 표준 버전과 연결되어 있습니다.
  • 서명자는 표준 기관과 관련이 없습니다.
  • 서명자는 조직 내에서 거래자 권한이 없습니다.
  • 표준은 서명자의 조직과 관련이 없습니다.

AccreditCertifyingBodyAction

이 거래는 인증 기관에 인증을 추가합니다. UpdateStandardAction 트랜잭션은 표준 기관과 관련된 에이전트에 의해 제출됩니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • 서명자는 표준 기관과 관련이 없습니다.
  • 서명자는 조직 내에서 트랜잭션 프로세서 거래자 권한이 없습니다.
  • 인증 기관 ID가 인증 기관과 연결되어 있지 않습니다.
  • 이름이 기존 표준과 관련이 없습니다.
  • 현재 날짜 및 형식과 관련된 잘못된 날짜가 제공되었습니다.

OpenRequestAction

트랜잭션은 공장 인증에 대한 요청을 엽니 다. 이 거래는 공장과 관련된 에이전트가 제출하고 관련 공장의 TRANSACTOR로 승인되었습니다.

다음 중 하나가 발생하면이 트랜잭션은 유효하지 않은 것으로 간주됩니다.

  • 서명자가 팩토리와 연결되어 있지 않습니다.
  • 서명자는 조직 내에서 거래자 권한이 없습니다.
  • ID가 고유하지 않습니다.
  • 표준 이름이 유효한 표준과 연결되어 있지 않습니다.
  • 이러한 필드가 비어있는 경우

ChangeRequestStatusAction

공장의 인증 요청 상태가 같은 CLOSED, IN_PROGRESS, 또는 인증에 관해서는, 변경 될 때 트랜잭션이 수행됩니다. 이 트랜잭션은 공장에서 상태를 CLOSED 또는 IN_PROGRESS로 변경 한 결과로, 공장과 관련된 에이전트가 제출하고 TRANSACTOR로 권한을 부여합니다.

안랩 세이프 트랜잭션 Ahlab safe Transaction 이거 뭐니? 프로세서 종료도 안되고 다시 언인스톨 하다

농협쪽 인터넷으로 금융 처리할 때 Ahnlab safe transaction 1.0 이 설치가 되는데 근데 이거 좀 피곤하게 잘 만들었는지 컴을 부팅할 때 속도가 조금 느린감이 있어서 점검했더니 피곤하게 메모리에 상주해 있습니다 많은 양의 메모리 점유는 아니지만 safetranscationSVC(서비스) 종료도 안되고 설정도 수동으로 바꿀수도 없고 물론 윈도우를 안전모드로 부팅하면 서비스가 현재 자동에서 트랜잭션 프로세서 수동으로 바꿔줄수 있습니다

웃긴것이 요즘 인터넷 뱅킹 쓰면 이런게 예전보다 더 피곤하네요 안쓸수도 없고 액티브엑스 없애라고 했더니 뭐 더 피곤하게 만든격이라고 할까요?

하지만 컴퓨터에 알수없는 프로그램으로 인해 내 소중한 머니를 갈취해 가는 것을 방지하는 취지는 이해는 합니다만

안랩 세이프 트랜잭선 환경설정은 별다르게 건드릴게 없죠 보시다시피 알림설정 옵션 정도 뿐

컴퓨터에 이거 띄워놓고 사용해도 될겁니다 유해 사이트 차단도 해주고 hosts파일도 보호 해 줄 겁니다

아래 옵션을 개인적으로 테스트 삼아 첫번째 체크를 해제 해 본 거임.

백신깔려 있는데 이거 뭐 구지 2개 구동할 필요까지는.. 그건 각자 판단할 일이지만. 혹시 이로 인해 다른 프로그램에 문제가 있다면 뭐 당연히 언인스톨 시켜야 합니다 경험상 그런 일도 있었으니까요

Ahnlab safe Transaction Application 이 2개가 떠있는데요 윈도우10에서 사용 중이며 윈도우7에서도 역시 비슷한 상황이죠

프로세서 종료하기위해'작업끝내기'를 시도해도 종료가 되지 않습니다 한편으로 참 잘 만들어 놨죠 그래야 안전하게 인터넷 뱅킹 처리 할수 있으니.

SafeTransactionSVC 서비스 중지 (ahnlab safe Transaction Service)

서비스를 중지 할수 없습니다 뭐라고? 역시 안되는 군

로컬 서비스를 쉽게 들어가려면 작업관리자의 맨끝 서비스 항목이 보입니다 또는 실행창에 services.msc 라고 입력하던지 , 검색으로 서비스를 한글로 입력하면 쉽게 찾아 갈수 있죠 방법은 여러가지 라능

그럼 Ahnlap safe TransactionSVC 서비스를 수동으로 바꿔 볼까? 오잉~

시작유형이 자동으로 되어 있는 것을 수동으로 전환 ! 불가능 이게 뭔일! 헐~ 갈수록 태산이 웬말인가?

가능하게 하려면 컴퓨터를 안전모드로 부팅을 하여 위 서비스를 수동으로 변경해 줄수 있습니다 자세한 설명은 생략합니다

윈도우7의 경우 컴퓨터를 안전모드 부팅하려면 전원을 켜고 F8 키(여러번. 연속)를 누르면 안전모드로 진입합니다

이런 과정들로 인해 이런 프로그램들이 램에 상주하게 되면 컴퓨터 부팅속도도 느려지게 만드는 원인이며, 이외에도 다른 은행쪽 것도 올라오긴 하는데 그건 프로세서 종료가 되어 다행이지만.

이런 이유로 인해서 개인적으로는 ahnlab safe transaction 을 언인스톨 시켜버리고 필요할 때 다시 설치해서 쓰고 있는데요

암튼 요즘 들어 인터넷으로 금융처리 드럽게 피곤하다는거 모두가 그런것은 아니지만,트랜잭션 프로세서 은행을 갈아 타던지 , 거래를 중지하고 다른곳으로 바꿔야 할까 봅니다

Oracle 11g의 새로운 백그라운드 프로세스

이 인스턴스별 프로세스는 분산 SGA 메모리 업데이트가 성공 시 전역적으로 커밋되거나 Oracle RAC 환경에서 장애가 발생한 경우 전역적으로 중단되도록 하는 에이전트입니다.

DBRM(데이터베이스 리소스 관리자)

이 프로세스는 리소스 계획 및 기타 리소스 관리자 관련 작업을 설정하는 역할을 합니다.

DIA0(진단 프로세스 0)

이 프로세스(현재 0만 사용 중임)는 정지 감지 및 교착 상태 해결을 담당합니다.

DIAG(진단 가능성) 프로세스

이 프로세스는 진단 덤프를 수행하고 전역 oradebug 명령을 실행합니다.

EMNC(이벤트 모니터 코디네이터)

이 프로세스는 데이터베이스 이벤트 관리 및 알림에 사용되는 백그라운드 서버 프로세스입니다.

FBDA(플래시백 데이터 아카이버 프로세스)

이 프로세스는 추적된 테이블의 기록 행을 플래시백 데이터 아카이브로 아카이브합니다. 추적 테이블은 플래시백 아카이브가 활성화된 테이블입니다. 추적된 테이블에 DML을 포함하는 트랜잭션이 커밋되면 이 프로세스는 행의 사전 이미지를 플래시백 아카이브에 저장합니다. 또한 현재 행에 대한 메타데이터를 유지합니다.

FBDA는 또한 공간, 조직 및 보존을 위한 플래시백 데이터 아카이브를 자동으로 관리하고 추적된 트랜잭션의 아카이브가 얼마나 많이 발생했는지 추적합니다.

GTX0-j(글로벌 트랜잭션) 프로세스

이 프로세스는 Oracle RAC 환경에서 XA 글로벌 트랜잭션에 대한 투명한 지원을 제공합니다. 데이터베이스는 XA 글로벌 트랜잭션의 워크로드를 기반으로 이러한 프로세스의 수를 자동 조정합니다. 글로벌 트랜잭션 프로세스는 Oracle RAC 환경에서만 볼 수 있습니다.

이 프로세스는 디스크가 오프라인 상태가 될 때 ASM 메타파일에 대한 프록시 I/O를 수행합니다.

이 프로세스는 오프라인 디스크에 대한 쓰기 누락 후 ASM 할당 단위를 오래된 것으로 표시합니다.

SMCO(공간관리 코디네이터) 프로세스

이 프로세스는 사전 공간 할당 및 공간 회수와 같은 다양한 공간 관리 관련 작업의 실행을 조정합니다. 작업을 구현하기 위해 동적으로 슬레이브 프로세스(Wnnn)를 생성합니다.

VKTM(시간의 가상 키퍼)

이 프로세스는 벽시계 시간(1초마다 업데이트됨) 및 참조 시간 카운터(20ms마다 업데이트되고 높은 우선 순위에서 실행될 때만 사용 가능)를 제공하는 역할을 합니다.

10G에 문서화되지 않은 일부 추가 프로세스

PZ(전역 보기에 사용되는 PQ 슬레이브)

이러한 프로세스는 RAC 병렬 서버 슬레이브 프로세스이지만 일반 병렬 슬레이브 프로세스가 아닙니다. PZn 프로세스(99부터 시작)는 둘 이상의 PZ 프로세스가 필요한 경우 모든 인스턴스에서 병렬 실행을 사용하여 수행되는 GV$ 보기를 쿼리하는 데 사용됩니다. , PZ98, PZ97,…(순서)가 자동으로 생성됩니다.

O00(ASM 슬레이브 프로세스)

슬레이브 프로세스 그룹은 ASM 인스턴스에 대한 연결을 설정합니다. 이 연결 풀을 통해 데이터베이스 프로세스는 ASM 인스턴스에 메시지를 보낼 수 있습니다. 예를 들어 파일을 열면 슬레이브를 통해 ASM 인스턴스에 열기 요청이 전송됩니다. 그러나 슬레이브는 파일 생성과 같은 장기 실행 작업에는 사용되지 않습니다. 슬레이브(풀) 연결을 사용하면 짧은 요청에 대해 ASM 인스턴스에 로그인하는 오버헤드가 제거됩니다.

설계경험: WAS에서 트랜잭션 처리

이번 프로젝트는 대부분의 Process Layer Component에서 다양한 DB 접근하여 데이터를 조회하고, 조회된 DATA을 요구사항에 따라 조합하여 화면에 보여주는 형태의 프로세스 개발이 많은 프로젝트였다. 다양한 DB을 사용하면서, WAS에서의 Transaction은 One Phase Commit만 지원하도록 설정되어 있었다. 따라서 GLOBAL TRANSACTION을 안됨에 SERVICE/PROVIDER LOGIC 중간 중간에 Transaction을 분리해야만 했다. 우선 Transaction의 속성을 먼저 정리하고, 적용했던 Transaction 분리 했던 방법을 설명하려 한다.

Transaction 속성은 Transaction의 영역을 제어한다. 그림 1은 EJB Bean-1의 method-A가 TX1 Transaction을 가지고 실행 중, EJB Bean-2의 method-B을 호출하는 그림으로써, Bean-2의 methjod-B가 실행할 때, TX1 Transaction을 가지고 실행할 지?, 새로운 TX? Transaction을 가지고 실행할 지?, 또는 Transaction 없이 실행할지? 는 Transaction의 속성에 따라 Transaction의 영역이 달라짐을 보여주고 있다.

그림1. Transaction Scope[3]

Transaction Propagation에는 7가지(REQUIRED, REQUIRESNEW, MADATORY, NOTSUPPORTED, SUPPORTS, NEVER, and NESTED)을 가진다. 7가지 속성은 다음과 같다.

REQUIRED 속성[3]

Bean-2의 b-Method에 Transaction 속성을 REQUIRED로 설정하였다면, 그림2, 3과 같은 경우가 발생한다. 그림 2는 Bean-1의 A-method가 TX1 Transaction을 가지고 있는 경우, B-method 호출 시 B-method은 A-method의 TX1 Transaction을 가지고 수행한다. 따라서, A-method와 B-method는 항상 같이 Commit 또는 Roll-Back 된다. 예를 들어 설정하자면, A-method의 transaction을 REQUIRED/REQUIRESNEW로 하고, B-method의 transaction을 REQUIRED로 설정한 경우이다.

그림2. Bean-1의 A-method가 TX1 트랜잭션 프로세서 Transaction을 가진 경우

그림 3은 만약 Bean-1의 A-method가 Transaction을 가지고 있지 않다면, 컨테이너는 새로운 TX2 Transaction을 생성해서 Bean-2의 B-Method를 실행한다. 예를 들어 설정하자면, A-method의 transaction을 NOTSUPPORTED로 하고, B-method의 transaction을 REQUIRED로 설정한 경우이다.

그림 3. Bean-1의 A-method가 Transaction을 가지지 않는 경우

결론적으로, B-method는 항상 Transaction 속에서 실행된다. B-method를 호출하는 method의 transaction 존재여부에 따라 Transaction을 공유할 지, 새로 생성할지가 결정된다.

참고로, 컨테이너로부터 트랜잭션 프로세서 트랜잭션 프로세서 관리되는 Transaction을 가진 모든 Enterprise Bean Method는 암묵적으로 REQUIRED을 가지고 있다. 따라서 REQUIRED외 다른 Transaction을 사용할 것이 아니면 REQUIRED을 설정하지 않아도 된다.

REQUIRESNEW 속성[3]

Bean-2의 b-Method에 Transaction 속성을 REQUIRESNEW로 설정하였다면, 그림4, 5과 같은 경우가 발생한다. 그림 4는 Bean-1의 A-method가 TX1 Transaction을 가지고 실행 중, Bean-2의 B-method를 호출한 경우를 나타낸다. 예를 들어 설정하자면, A-method의 transaction을 REQUIRED/REQUIRESNEW로 하고, B-method의 transaction을 REQUIRESNEW로 설정한 경우이다.

그림 4. Bean-1의 A-method가 TX1 Transaction을 가진 경우

그림 4의 Transaction의 흐름은 아래 절차에 따른다.

  1. B-method 호출 시, A-method TX1 Transaction을 일시 중지한다.
  2. 컨테이너는 새로운 TX2 Transaction을 시작한다.
  3. 새로운 TX2 Transaction 속에서 B-Method를 호출한다.
  4. B-Method가 완료된 후, A-Method Transaction을 다시 시작한다.

그림 5는 A-method가 Transaction 없이 B-Method를 호출한 것을 나타낸다. A-method가 B-method를 호출하는 시점에, 컨테이너는 새로운 TX2 Transaction을 생성하여, 그 TX2 Transaction 속에서 B-method를 실행한다. 예를 들어 설정하자면, A-method의 transaction을 NOTSUPPORTED로 하고, B-method의 transaction을 REQUIRESNEW로 설정한 경우이다.

그림 5. Bean-1의 A-method가 Transaction을 가지지 않는 경우

결론적으로, method의 Transaction 속성을 REQUIRESNEW로 설정하면, 항상 새로운 Transaction 속에서 실행된다.

참고로, A-method(호출자)가 Transaction이 없고, B-method(호출받는 자)의 Transaction 속성을 REQUIRED/REQUIRESNEW로 설정하면 동일한 결과를 보인다(그림 3, 그림 5).

MADATORY 속성[3]

Bean-2의 b-Method에 Transaction 속성을 MADATORY로 설정하였다면, 그림6, 7과 같은 경우가 발생한다. 그림 6은 A-method가 Transaction을 가지고 B-method을 호출하는 경우를 나타내며, B-method 호출 시, B-method은 A-method의 TX1 Transaction을 가지고 수행한다. 예를 들어 설정하자면, A-method의 transaction을 REQUIRED/REQUIRESNEW로 하고, B-method의 transaction을 MADATORY로 설정한 경우이다.

그림 6. Bean-1의 A-method가 TX1 Transaction을 가진 경우

그림 7은 A-method가 Transaction 없이, B-method을 호출한 경우를 나타낸다. B-method 호출 시, 컨테이너는 A-method에게 TransactionRequiredException을 던진다. 예를 들어 설정하자면, A-method의 transaction을 NOTSUPPORTED로 하고, B-method의 transaction을 MADATORY로 설정한 경우이다.

그림 7. Bean-1의 A-method가 Transaction을 가지지 않는 경우

이 MADATORY 속성은 호출하는 A-method가 반드시 Transaction을 가지고 수행해야 할 때, 사용한다. 다시말해, B-method가 독립적으로 Transaction을 진행하면 안 되는 경우 사용한다. 예를 들어, A-method가 계좌이체 서비스이고, B-method는 출금 서비스, C-method 입금 서비스라고 가정해 보자. A-method는 B-method를 호출한 후, C-method를 호출할 것이다. B, C-method를 MADATORY로 설정하면, A-method는 Transaction을 가질 수 밖에 없게되고, A, B, and C-method는 하나의 Transaction으로 묶이게 된다. 누군가는 A,B, and C-method를 REQUIRED로 설정한다면, 이전과 같은 결과를 가지지 않느냐라고 반문할 수 있을 것이다(동일한 결과를 얻음으로). 그러나 만약 누군가가 실수로 A- method를 REQUIRED에서 NOTSUPPORTED로 변경하였다면, 오류가 발생해도 찾아 내기 쉽지 않을 것이다. 따라서, 호출자와 Transaction을 반드시 묶어야 할 때는 명시적으로 사용하는 것이 낫다고 생각한다.

NOTSUPPORTED 속성[3]

Bean-2의 b-Method에 Transaction 속성을 NOTSUPPORTED로 설정하였다면, 그림8, 9과 같은 경우가 발생한다. 그림 8은 A-method TX1 Transaction을 가지고, B-method을 호출한 경우를 나타낸다. B-method 호출 시, 컨테이너는 B-Method를 호출하기 전에 A-Method의 TX1 Transaction을 일시 중지하고, B-Method가 완료된 후, 컨테이너는 A-Method의 TX1 Transaction을 다시 시작한다. 예를 들어 설정하자면, A-method의 transaction을 REQUIRED로 하고, B-method의 transaction을 NOTSUPPORTED로 설정한 경우이다.

그림 8. Bean-1의 A-method가 TX1 Transaction을 가진 경우

그림 9는 A-method가 Transaction 없이 B-method을 호출하는 것을 나타낸다. B-method 호출 시점에, 컨테이너는 B-Method을 진행하기 전까지 새로운 Transaction을 시작하지 않는다. 예를 들어 설정하자면, A-method의 transaction을 NOTSUPPORTED로 하고, B-method의 transaction을 NOTSUPPORTED로 설정한 경우이다.

그림 9. Bean-1의 A-method가 Transaction을 가지지 않는 경우

이 NOTSUPPORTED 속성은 Transaction이 필요하지 않는 Method을 위해 사용한다. Transaction은 항상 overhead가 따르기 때문에, 이 속성을 사용하면 performance을 개선할 수 있다.

SUPPORTS 속성[3]

Bean-2의 b-Method에 Transaction 속성을 SUPPORTS로 설정하였다면, 그림10, 11과 같은 경우가 발생한다. 그림 10은 A-method가 TX1 Transaction을 가지고, B-method을 호출하는 것을 나타낸다. B-method를 호출 시, A-method의 TX1 Transaction을 가지고 수행한다. 예를 들어 설정하자면, A-method의 transaction을 REQUIRED로 하고, B-method의 transaction을 SUPPORTS로 설정한 경우이다.

그림 10. Bean-1의 A-method가 TX1 Transaction을 가진 경우

그림 11은 A-method가 Transaction 없이 B-method을 호출하는 것을 나타낸다. B-method 호출 시, 이 B-Method는 Transaction 없이 실행한다. 컨테이너는 B-Method를 진행하기 전까지 새로운 Transaction을 시작하지 않는다. 예를 들어 설정하자면, A-method의 transaction을 NOTSUPPORTED로 하고, B-method의 transaction을 SUPPORTS로 설정한 경우이다.

그림 11. Bean-1의 A-method가 Transaction을 가지지 않는 경우

다시 말해, B-method의 Transaction은 A-method의 Transaction 속성을 따라간다. Method의 Transaction 행위가 다양함에 따라 이 SUPPORTS 속성은 주의해서 사용해야 한다.

NEVER 속성[3]

Bean-2의 b-Method에 Transaction 속성을 NEVER로 설정하였다면, 그림12, 13과 같은 경우가 발생한다. 그림 12는 A-method가 TX1 Transaction을 가지고 B-method을 호출하는 것은 나타낸다. B-method 호출 시, 컨테이너는 RemoteExcepiton 발생한다. 예를 들어 설정하자면, A-method의 transaction을 REQUIRED로 하고, B-method의 transaction을 NEVER로 설정한 경우이다.

그림 12. Bean-1의 A-method가 TX1 Transaction을 가진 경우

그림 13은 A-Method가 Transaction 없이, B-Method을 호출하는 것을 나타낸다. B-method 호출 시, 컨테이너는 B-Method을 진행하기 전까지 새로운 Transaction을 시작하지 않는다. 예를 들어 설정하자면, A-method의 transaction을 NOTSUPPORTED로 하고, B-method의 transaction을 NEVER로 설정한 경우이다.

그림 13. Bean-1의 A-method가 Transaction을 가지지 않는 경우

Manatory와 반대로 Transaction이 없이 실행해야 한다.

NESTED 속성[6, 7]

이 속성은 중접된 Transaction을 지원하는 WAS에서만 지원되는 Transaction 속성이다.
Bean-2의 b-Method에 Transaction 속성을 NESTED로 설정하였다면, 그림14, 15과 같은 경우가 발생한다. 그림 14는 A-method가 TX1 Transaction을 가지고, B-method을 나타낸다. 이 경우 컨테이너는 A-method의 TX1 Transaction 내의 nested transaction형태로 TX1’ transaction을 만들어 B-Method을 실행한다. B-Method에서 발생한 변경사항이 commit이 되기 전까지는 A-method의 TX1 Transaction에서 보이지 않는다. 또한 TX1’ transaction은 자체적으로 commit, rollback이 가능하다

그림 14. Bean-1의 A-method가 TX1 Transaction을 트랜잭션 프로세서 가진 경우

A-method의 TX1 Transaction의 상태는 B-method에게 영향을 주고, B-method의 TX1’ Transaction의 상태는 A-method TX1 Transaction에게 영향을 주지 않는다[7].

그림 15는 A-method가 Transaction 없이 B-method을 호출하는 것을 나타낸다. 이 경우 컨테이너는 B-method을 REQUIRED 속성으로 실행한다.

그림 15. Bean-1의 A-method가 Transaction을 가지지 않는 경우

NESTED 속성은 WAS에 따라 지원여부가 결정된다.

  1. 지원하지 않는 WAS는 WebLogic, JEUS, and, Java EE 5 등 이다. WebLogic Server implements the flat transaction model. Nested transactions are not supported[1]. The Enterprise JavaBeans architecture supports flat transactions. A flat transaction cannot have any child (nested) transactions[2].
  2. 지원하는 WAS는 ODBC, OLE DB, and, SQL Server 등이다. Neither Open Database Connectivity (ODBC), nor Microsoft OLE DB Provider, supports Nested Transactions [4, 5].

Transaction 적용 예

그림 16은 한 Process에서 영업, 인사, 고객, 계약 등 정보를 조회하여 데이터를 조합하는 보여주는 시나리오이고, 여기의 계약 DB, 인사 DB, 고객 DB, 영업 DB가 별도로 존재한다고 가정한다.

그림 16. Transaction 분리 예

이 시나리오는 특정 계약에 가입한 고객이 다른 어떤한 종류의 계약을 가입했는 지 조회하여 목록으로 보여주는 것이다. 이 시나리오를 수행하는 흐름은 1) 로그인 사용자 정보를 기반으로 권한을 체크하고, 2) 계약번호로 계약 정보를 조회한 후, 3) 계약의 고객 번호로 고객 정보를 조회 하고, 4) 이 고객이 가지고 있는 다른 계약을 모두 조회, 5) 영업한 사람이 누구인지 조회하여 데이터를 조회하여 보여준다.

Transaction의 분리 고려사항

필자는 Transaction 분리하기 위해 4가지를 고려하였다.

  1. 이 기능은 주요 목적은 무엇인가?
  2. 어떤 Service를 어느 Transaction에 묶을 것인가?
  3. Transaction을 분리하는 횟수에 따라 overhead는 가중된다.
  4. Overhead는 성능에 영향을 준다.트랜잭션 프로세서

위 고려 사항에 따라서 그림 16의 시나리오에서는 아래와 같이 설정하였다.

  1. 이 기능은 계약을 조회하는 목적이다.
  2. 주 목적에 따라, A-method의 TX1의 Transaction에 계약 조회 서비스(C, E - methods)를 Requried로써 하나의 Transaction으로 처리하였다.
  3. 인사, 고객, 영업은 이 기능의 주요 목적의 sub 정보임에 따라, RequiresNew로 Transaction을 나누었다.

더군다나 같은 계약 DB를 한 Transaction으로 묶어서, Transation의 Overhead도 약간이나마 줄일 수 있다.

여기에서 RequiresNew 대신에 NotSupported로 설정을 하여도 실행은 될 것이다. 단지 실행하는 method가 Transation을 가지고 실행할 것인가? 아닌가? 하는 선택의 문제이다. 오히려 NotSupported으로 설정하였을 때, Transaction Overhead가 줄어들어 트랜잭션 프로세서 성능을 개선시켜주는 효과를 줄 것이다(단. 한, 두번 테스트가 아닌 스트레스 테스트를 한 경우). 필자는 이 프로젝트가 금융과 관련되어있어 안정성을 위해서 NotSupported보다 RequiresNew를 사용하였다.

트랜잭션 프로세서

1

2

3

4

문제 풀이
관련 포럼글
자유 댓글
    댓글이 없습니다.
    아직 글이 없습니다.
과목 선택
  • 전체 랜덤 보기
  • 맞췄던 문제 제외하고 보기
  • 풀었던 문제 제외하고 보기
  • 맞췄던 문제만 보기
  • 틀렸던 문제만 보기
정보보안기사 복구 문제의 한계

정보보안기사는 기출문제를 공개하지 않는 시험입니다.

본 사이트에 수록된 문제들은 기출문제와 유사하게 복구된 것이며 기출문제와 정확히 일치하지 않습니다. (이 부분은 다른 모든 사이트 및 정보보안기사 수험서 또한 마찬가지 입니다.)

문제들 중 일부는 위키나 블로그 등을 참조하여 직접 복구하고 일부는 웹상에서 복구된 문제를 수집하여 재정리하였습니다. 만약 복구 문제에 본인이 직접 만든 그림, 본인이 직접 작성한 문장 등이 그대로 사용되어 조치를 원하시는 경우 연락주시면 지체 없이 처리하도록 하겠습니다.

저희 문제은행은 집단지성 발현을 위해 IT위키를 통한 해설을 제공해드리고 있습니다.

문제와 관련된 위키 문서를 선택해서 등록할 수 있습니다. 위키 문서는 이용자분께서 직접 내용을 보강하거나 위키 문서를 추가하실 수 있습니다!

위키 해설 추가/수정

IT, 컴퓨터공학, 보안 등 기술 용어 전문 위키 https://itwiki.kr/

모든 문제들의 저작권은 원저작권자에게 있습니다. 본 사이트는 웹상에 공개되어 있는 문제만 모아서 보여드립니다.저작권 안내


0 개 댓글

답장을 남겨주세요