Inflearn brand logo image

인프런 커뮤니티 질문&답변

차재선님의 프로필 이미지
차재선

작성한 질문수

Oracle PL/SQL 딱 이만큼.. [개념+실전]

Tips . 생각해 볼만한 것들

트랜잭션 처리의 주체는 누가 될 것인가 에 대해서 궁금합니다.

작성

·

39

1

안녕하세요.
관련 강의를 시청하던 중, 궁금한 점이 있어 문의드립니다.

현재 회사에서는 Oracle E-Business Suite(EBS)를 사용 중이며, 대부분의 비즈니스 로직이 PL/SQL 기반으로 구성되어 있습니다.
이와 별개로, Java(Spring) 기반으로 자체 개발한 ERP 시스템도 운영 중이며, 이 시스템에서는 EBS에서 사용 중인 PL/SQL 프로시저들을 직접 호출하여 사용하고 있습니다.

문제는 이 과정에서 트랜잭션 정합성에 문제가 발생하는 경우가 있다는 점입니다.
예를 들어, EBS의 PL/SQL 프로시저 내부에서 COMMIT을 수행하는 구조이다 보니, Java에서 여러 프로시저를 하나의 트랜잭션 안에서 호출하더라도, 중간에 커밋이 되어버려 정합성이 깨지는 상황이 발생하고 있습니다.

이러한 구조적인 상황에서, 실무에서는 일반적으로 어떤 방식으로 트랜잭션 정합성을 유지하거나 해결하는지 궁금합니다.

답변 2

1

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

안녕하세요.
실무에서 발생하는 문제를 공유해 주셔서 감사합니다.
저는 EBS를 직접 사용하지 않기 때문에 좋은 답변이 될지는 모르겠지만,
제 생각을 적어 봅니다.
(더존 ERP, SAP 는 다뤄봤지만, EBS는 직접 다뤄본적은 없습니다.)

일반적인 웹환경(오라클+Java)이라면 오라클 PL/SQL 의 트랜잭션 관리를 App(자바,파이썬등)에서

컨트롤하는게 맞겠지만,
말씀하신 EBS ERP의 PL/SQL이 내부에서 트랜잭션 처리를 하고 있다면
외부(Java)에서 해당 EBS의 PL/SQL을 호출할때 Java에서 트랜잭션의 컨트롤을 하는건 사실상 어렵습니다.

예전에는 제공되는 패키지(EBS)를 수정하여 커스터마이징 하는 경우도 본적이 있지만,
제 개인적으로는 제공되는 ERP 패키지는 그 원본으로 보존하는게 맞겠다는 생각입니다.
(전에 더존 ERP 패키지를 커스터마이징 했다가 뼈저리게 후회한적이 있어서요)

도움이 되실지 모르겠지만 나름대로 해결방안을 말씀드린다면

1.EBS PL/SQL경우 파라메터를 통해 트랜잭션을 처리하는 API가 있을것으로 생각되는데
최대한 API가 있는 부분을 체크해서 사용하는 방안

2.PL/SQL 재구현

기존 EBS에서 사용하는 프로시저를 그대로 카피해서 사용하는 오라클 PL/SQL 에
별도로 생성/커스터마이징 하여 사용하는 방법입니다.
저같은 경우는 기존의 PL/SQL의 원본유지를 원칙으로 하기 때문에 이렇게 사용하는 경우가 간혹 있습니다.

제 업무 환경과 일치하지 않기 때문에 좋은 답변이 되었는지 모르겠네요.
주신 질문으로 저 또한 고민을 해보는 시간이었습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 차재선님.

Oracle E-Business Suite(EBS)와 Java(Sprint) 기반의 ERP 시스템 간의 트랜잭션 정합성 문제는 실무에서 자주 발생할 수 있는 복잡한 문제입니다. 주로 Oracle PL/SQL의 커밋 전략과 Java 애플리케이션의 트랜잭션 관리 간의 상호작용에서 문제가 발생할 수 있습니다. 다음은 이를 해결하기 위해 실무에서 일반적으로 고려할 수 있는 접근 방안입니다:

트랜잭션 처리 전략

  1. 트랜잭션 경계 명확화:

    • PL/SQL에서 커밋을 남발하지 않도록 주의하고, 가능한 경우 트랜잭션의 경계를 명확히 할 수 있는 아키텍처를 설계합니다.
    • Java(Spring)에서 트랜잭션을 관리하고 PL/SQL 프로시저 내에서는 COMMIT을 자제함으로써, 트랜잭션의 경계를 Java 측에 두는 방법이 있습니다.
  2. 중첩된 트랜잭션 관리:

    • PL/SQL에서의 중첩된 트랜잭션을 관리하기 위해 자주 사용하는 방법은 SAVEPOINT를 사용하여 트랜잭션의 특정 시점을 저장하고, 필요 시 롤백하는 기능을 이용하는 것입니다.
  3. ATG/CTG를 통한 관리:

    • 특정 상황에서는 트랜잭션 관리를 Java 애플리케이션으로 전가하여, PL/SQL 호출 전후의 트랜잭션 경계를 Java(Spring)의 트랜잭션 관리자에서 설정하고 조정합니다.
  4. 프로세스 재구성:

    • PL/SQL 절차의 디자인을 재구성하여 트랜잭션에 대한 책임을 필요에 따라 조정할 수 있습니다. 경우에 따라서는 일부 로직을 Java로 완전히 이관시킬 수 있습니다.
  5. 데이터베이스 링크 활용:

    • 데이터베이스 간의 링크를 사용하여 분배된 트랜잭션을 관리하거나 조정하는 것도 하나의 방법입니다.

참고 자료

위에서 언급한 방법들은 코딩 관행과 아키텍처 설계에 따라 달라질 수 있습니다. 또한, SQL Developer나 Oracle의 공식 문서에 있는 트랜잭션 관리 예시를 참조하시길 추천드립니다.

다음 링크에서 유사한 실무 경험과 해결 방법에 대한 설명을 확인하실 수 있습니다:
- 테이블 및 컬럼 설명 관련 문의
- SQL Developer 프로그램 사용 팁 질문

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

차재선님의 프로필 이미지
차재선

작성한 질문수

질문하기