Oracle EBS OAF 개발 완벽 가이드 1편 – 개념부터 JDeveloper 세팅, Hello World까지

Oracle EBS 프로젝트에 투입됐는데 “OAF 화면 하나만 만들어 주세요”라는 말을 들었다면, 대부분 첫 이틀은 코딩이 아니라 JDeveloper가 안 켜져서 날아갑니다. 이 글은 그 이틀을 두 시간으로 줄이는 것이 목표입니다. OA Framework의 구조를 먼저 그림으로 잡고, 내 EBS 인스턴스에 맞는 JDeveloper를 찾아 설치한 뒤, Hello World 페이지를 브라우저에 띄우는 데까지 순서대로 갑니다.

01 — OrientationOAF가 도대체 뭔가

Oracle Application Framework, 줄여서 OA Framework 또는 OAF는 Oracle E-Business Suite 안에서 HTML 기반 화면을 만들고 배포하기 위해 오라클이 만든 프레임워크입니다. EBS를 써보셨다면 화면이 두 종류라는 걸 아실 겁니다. Java 애플릿이 뜨면서 실행되는 Forms 화면과, 브라우저에서 그냥 열리는 Self-Service 화면. 후자가 OAF입니다.

기술적으로는 J2EE 기반의 MVC(Model-View-Controller) 패턴이고, Model 계층은 BC4J(Business Components for Java)라는 오라클 고유 기술로 구현돼 있습니다. 개발 도구는 오라클이 EBS 버전별로 따로 배포하는 JDeveloper + OA Extension을 씁니다. 여기서 “버전별로 따로”라는 게 핵심인데, 뒤에서 자세히 다루겠습니다.

iProcurement, iSupplier Portal, iExpenses, Approvals Management 같은 모듈이 전부 OAF로 만들어져 있습니다. 즉 OAF를 안다는 건 이 화면들을 고칠 수 있다는 뜻입니다.

Forms와 뭐가 다른가

구분Oracle FormsOA Framework
실행 환경Java 애플릿 / JRE 필요순수 HTML — 브라우저만 있으면 됨
개발 도구Forms BuilderJDeveloper + OA Extension
주 언어PL/SQLJava + XML (+ PL/SQL)
화면 정의FMB 바이너리 파일XML 문서 (DB의 JDR 저장소에 보관)
커스터마이징CUSTOM.pll / 폼 복사Personalization / Extension / 신규 페이지
모바일사실상 불가가능

가장 중요한 차이는 마지막 줄에서 두 번째입니다. OAF는 화면 정의가 XML로 DB에 들어있기 때문에, 소스 코드를 건드리지 않고도 화면을 바꿀 수 있는 길이 열려 있습니다. 이게 Personalization이고, 2편의 주제입니다.

02 — ArchitectureMVC 3계층 구조와 BC4J 용어 정리

OAF 코드를 처음 열면 AM, VO, EO, VL, AO, CO 같은 두 글자 약어가 쏟아집니다. 이걸 먼저 정리하지 않으면 어떤 문서를 읽어도 진도가 안 나갑니다. 아래 그림 한 장으로 정리됩니다

FIG.01 — OA Framework의 MVC 3계층. View는 전부 XML, Controller와 Model은 Java. 브라우저 요청이 View → Controller → Model 순으로 내려가고, 조회 결과가 역순으로 올라와 HTML로 렌더링됩니다.

외우기 요령

“CO는 AM만 부른다” 한 줄만 기억하세요. Controller에서 직접 JDBC를 열거나 SQL을 던지는 코드는 OAF 코딩 표준 위반이고, 실제로 패치 때 깨집니다. CO는 getApplicationModule(webBean)으로 AM을 가져와서 AM에 정의한 메서드를 호출하고, 실제 쿼리는 그 안의 VO가 처리합니다.

페이지 하나가 열릴 때 실제로 벌어지는 일

OAF 디버깅의 90%는 “지금 processRequest인가 processFormRequest인가”를 구분하는 데서 갈립니다. 값이 안 찍힌다, 버튼을 눌러도 반응이 없다 같은 증상은 대부분 잘못된 메서드에 코드를 넣어서 생깁니다

FIG.02 — 페이지 요청 처리 라이프사이클. processRequest는 화면이 그려지기 전에 딱 한 번, processFormRequest는 사용자가 무언가를 누를 때마다 실행됩니다.

STEP 1

내 EBS 인스턴스의 OAF 버전 확인하기

본격적인 세팅의 출발점입니다. 범용 JDeveloper를 다운로드하면 안 됩니다. EBS OAF 확장을 개발할 때는 EBS 제품개발팀이 배포한 전용 빌드를 써야 하고, 이 빌드는 EBS의 ATG 패치 레벨에 종속됩니다. 그래서 순서가 “JDeveloper 설치”가 아니라 “내 서버 버전 확인 → 거기 맞는 JDeveloper 찾기”입니다.

1-1. 프로파일 옵션 2개 켜기

System Administrator 책임으로 로그인해서 아래 두 개를 사용자 레벨로 켭니다.

프로파일 옵션내부명용도
FND: DiagnosticsFND_DIAGNOSTICSYesAbout This Page 링크 노출
Personalize Self-Service DefnFND_CUSTOM_OA_DEFINTIONYesPersonalize Page 링크 노출

1-2. About This Page에서 버전 읽기

아무 OAF 화면이나 열면 (예: iProcurement 홈, 또는 Preferences 화면) 페이지 하단에 About this Page 링크가 생깁니다. 클릭하면 진단 화면이 뜨는데, Technology Components 탭에 OA Framework 버전이 찍혀 있습니다. 12.2.012.1.3 같은 형태입니다. 이 숫자를 메모하세요

FIG.03 — JDeveloper 버전 매칭 흐름. 이 4단계를 건너뛰고 아무 JDeveloper나 설치하는 것이 OAF 입문자의 1번 실수입니다.

필독 문서

Doc ID 416708.1 — OA Framework: How to Identify Required Oracle JDeveloper Patches For Oracle E-Business Suite Release 12.x or 11i. My Oracle Support에서 이 번호로 검색하세요. (신규 MOSFS 체계에서는 Article ID KB852730으로도 조회됩니다.) 11i, 12.0, 12.1, 12.2 전 버전의 대응표가 한 문서에 정리돼 있습니다.

STEP 2

JDeveloper 압축 풀고 폴더 구조 이해하기

받은 패치 zip을 경로에 공백과 한글이 없는 위치에 풉니다. D:\OAF 정도가 무난합니다. 풀면 폴더 세 개가 나옵니다.

D:\OAF\
├── jdevbin\    # JDeveloper 실행 파일 본체. 여기는 건드리지 않습니다.
│   └── jdev\bin\jdevW.exe   # ← 실제 실행 파일
├── jdevdoc\    # OAF Developer's Guide WebHelp. 오프라인 문서.
└── jdevhome\   # 내 작업 공간. 소스와 접속정보가 전부 여기 있습니다.
    └── jdev\
        ├── myprojects\          # 내가 만든 워크스페이스(.jws)와 소스
        ├── myclasses\           # 컴파일된 .class 산출물
        └── dbc_files\secure\    # ← .dbc 파일을 여기에 넣습니다

구조를 이렇게 나눠 놓은 이유가 있습니다. jdevbin은 오라클이 준 것이라 EBS 패치가 올라가면 통째로 교체되고, jdevhome은 내 자산이라 그대로 유지됩니다. 그래서 소스는 반드시 jdevhome 아래에만 둡니다.

STEP 3

dbc 파일 가져오기 · 환경변수 설정

JDeveloper가 EBS 인스턴스에 붙으려면 .dbc 파일(Database Connection descriptor)이 필요합니다. 이 파일에는 DB 접속 정보와 애플리케이션 서버 보안 키가 들어 있고, 서버에만 존재합니다. WinSCP나 FTP로 로컬로 내려받아야 합니다.

# 애플리케이션 서버에 SSH 접속 후
$ cd $FND_SECURE
$ pwd
/u01/app/EBSDEV/fs1/inst/apps/EBSDEV_ebsapp/appl/fnd/12.0.0/secure
$ ls -ltr *.dbc
EBSDEV.dbc

# R12  : $INST_TOP/appl/fnd/12.0.0/secure   (= $FND_SECURE)
# 11i  : $FND_TOP/secure

내려받은 EBSDEV.dbc를 D:\OAF\jdevhome\jdev\dbc_files\secure\ 안에 넣습니다.

환경변수 JDEV_USER_HOME

내 PC > 속성 > 고급 시스템 설정 > 환경 변수 > 새로 만들기.

변수 이름변수 값
JDEV_USER_HOMED:\OAF\jdevhome\jdev

끝에 \jdev까지 붙는다는 점에 주의하세요. D:\OAF\jdevhome까지만 잡으면 JDeveloper가 dbc 파일을 못 찾아서 접속 목록이 비어 보입니다. 흔한 실수입니다.

FIG.04 — 로컬 개발 환경과 EBS 서버의 관계. JDeveloper는 dbc 파일의 정보로 EBS DB에 직접 붙어서, 내 PC에서 실제 데이터를 조회하는 OAF 페이지를 띄웁니다.

STEP 4

JDeveloper 실행 · DB 접속 만들기

D:\OAF\jdevbin\jdev\bin\jdevW.exe를 실행합니다. 바탕화면에 바로가기를 만들어 두면 편합니다. 처음 실행하면 마이그레이션 여부를 묻는 창이 몇 개 뜨는데 그냥 확인 누르고 넘어가면 됩니다.

JDK 관련

JDeveloper 10g/11g 계열은 최신 Windows에서 실행 안 되는 경우가 있습니다. 이때는 jdevbin\jdev\bin\jdev.conf 안의 SetJavaHome 항목을 패치에 동봉된 JDK 경로로 명시해 주면 대부분 해결됩니다.

4-1. 워크스페이스 열기

File > Open 에서 jdevhome\jdev\myprojects\toolbox.jws를 엽니다. 오라클이 학습용으로 넣어둔 ToolBox Tutorial 워크스페이스입니다.

4-2. 프로젝트에 DB 접속 연결

Navigator에서 Tutorial 프로젝트 우클릭 > Project Properties > Oracle Applications > Database Connection 탭 > New.

  1. Connection Type: Oracle (JDBC)
  2. Username / Password: EBS DB의 apps 계정
  3. Driver: thin
  4. Host Name / JDBC Port / SID: DB 서버 정보 입력
  5. Test Connection 눌러서 Success 확인

같은 작업을 LabSolutions 프로젝트에도 반복합니다. LabSolutions에는 튜토리얼 실습의 정답 코드가 들어 있어서, 막힐 때 비교해 보기 좋습니다.

4-3. Runtime Connection 설정

같은 Oracle Applications 탭의 Runtime Connection에서 실행 시 사용할 정보를 넣습니다.

항목입력 값
DBC File Namedbc_files\secure\EBSDEV.dbc 선택
User NameEBS 애플리케이션 로그인 ID (예: OPERATIONS)
Password해당 계정 비밀번호
Application Short NameAK (튜토리얼 기본값)
Responsibility KeyFWK_TBX_TUTORIAL

이 네 가지가 있어야 JDeveloper가 실행 시점에 EBS 애플리케이션 컨텍스트(사용자, 책임, Operating Unit)를 잡아줍니다. 안 넣으면 페이지는 뜨는데 데이터가 안 나오거나 권한 오류가 납니다.

STEP 5

Hello World 띄우기

Navigator에서 Tutorial > oracle.apps.ak.hello > webui 아래의 HelloWorldPG.xml을 찾습니다. 우클릭 > Run.

브라우저가 열리면서 이런 URL이 뜹니다.

http://localhost:8988/OA_HTML/runregion.jsp?region=/oracle/apps/ak/hello/webui/HelloWorldPG
&akRegionApplicationId=601&regionAppId=601

화면에 텍스트 필드와 Go 버튼이 하나씩 보이고, 이름을 넣고 Go를 누르면 인사말이 나오면 성공입니다. 여기까지 오면 환경 세팅은 끝난 겁니다. 이제부터는 실제 개발입니다.

확인 습관

Hello World가 뜬 상태에서 HelloWorldPG.xml을 열어 Structure 창을 보세요. pageLayout > mainContent > messageTextInput > submitButton 이라는 트리가 보일 텐데, 이게 FIG.01에서 본 Region-Item 구조 그대로입니다. 개념과 실물이 여기서 처음 연결됩니다.

03 — Troubleshooting여기서 자주 막힙니다

증상원인조치
DBC 파일 목록이 비어 있음JDEV_USER_HOME 경로 오류끝에 \jdev까지 붙었는지 확인 후 JDeveloper 재시작
Invalid DBC file / 인증 실패dbc를 바이너리 모드로 전송FTP를 ASCII 모드로 다시 받거나 WinSCP로 재전송
페이지 실행 시 500 오류Responsibility Key 누락Runtime Connection에 책임 키 입력
서버 배포 후 NoSuchMethodErrorJDeveloper 버전 불일치Doc 416708.1로 패치 재확인 (FIG.03)
About this Page 링크 안 보임FND: Diagnostics 미설정프로파일 Yes로 설정 후 재로그인
한글이 깨짐인코딩 설정프로젝트 인코딩을 UTF-8로 지정

04 — Reference공식 문서 확보하기

OAF는 서적이 거의 없습니다. 오라클 공식 Developer’s Guide가 사실상 유일한 정본이고, 다행히 Oracle Help Center에 버전별 PDF가 공개돼 있습니다.

  • 12.2.14 — docs.oracle.com/cd/F21816_01/infoportal/oafdg/12214_OAFDevGuide.pdf
  • 12.2.12 — .../12212_OAFDevGuide.pdf
  • 12.2.10 — .../12210_OAFDevGuide.pdf
  • 12.2.7~12.2.8 — .../1227_to_1228_OAFDevGuide.pdf
  • 12.2.4 — .../1224_OAFDevGuide.pdf

같은 문서가 JDeveloper 설치 폴더의 jdevdoc 안에 WebHelp 형태로도 들어 있고, JDeveloper 내부 도움말에서도 열립니다. 읽는 순서는 1~3장으로 개념을 잡고, 8장의 코딩 표준을 반드시 읽는 것입니다. 8장을 건너뛰면 나중에 패치 적용 시 커스터마이징이 전부 날아가는 코드를 쓰게 됩니다.

2편에서 다룰 내용

환경이 준비됐으니 다음은 실제 개발입니다. 요구사항을 받았을 때 Personalization으로 끝낼지, Extension을 할지, 새 페이지를 만들지 판단하는 기준부터 시작해서, EO/VO/AM/CO를 순서대로 만드는 커스텀 페이지 개발, 커스텀 패키지 네이밍 규칙, VO Extension과 CO Extension, 그리고 R12.2 온라인 패치 환경에서의 배포 절차를 다룹니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤