주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI 함수를 사용하여 데이터를 Oracle Autonomous Transaction Processing 데이터베이스로 스트리밍
소개
이 사용지침서에서는 Oracle Cloud Infrastructure(OCI) 서비스를 사용하여 실시간 데이터 스트리밍 파이프라인을 구축하고 배포하는 방법을 알아봅니다. 이 파이프라인은 OCI Connector Hub 및 OCI Functions를 활용하여 OCI 스트림에서 Oracle Autonomous Database로 데이터를 스트리밍합니다. 이 함수는 OCI 서비스에 대한 보안 액세스를 위한 Resource Principal Authentication 메소드와 Oracle Autonomous Database와의 연결을 설정하기 위한 데이터베이스 전자 지갑을 사용하여 Java로 작성됩니다.
OCI Streaming: OCI는 클라우드에서 데이터를 처리하기 위한 다양한 도구를 보유하고 있으며, OCI Streaming은 높은 처리량, 실시간 데이터 스트림을 위한 맞춤형 서비스 중 하나입니다. 개발자는 OCI Streaming을 활용하여 데이터 스트림을 효율적으로 수집, 처리 및 배포하는 확장 가능하고 신뢰할 수 있는 데이터 파이프라인을 구축할 수 있습니다.
OCI Functions: OCI Functions는 확장성이 뛰어난 완전 관리형 멀티 테넌트 온디맨드 Functions-as-a-Service 플랫폼입니다. 엔터프라이즈급 OCI를 기반으로 구축되었으며 Fn Project 오픈 소스 엔진을 기반으로 합니다. 비즈니스 요구사항을 충족하기 위해 코드를 작성하는 데 집중하려면 OCI Functions를 사용합니다.
리소스 주체 인증: 리소스 주체를 사용하여 OCI 리소스를 인증하고 액세스할 수 있습니다. 리소스 주체는 임시 세션 토큰과 OCI Functions가 OCI Streaming과 같은 다른 OCI 서비스에 대해 자체 인증을 수행할 수 있는 보안 인증서로 구성됩니다.
OCI Connector Hub: OCI Connector Hub는 OCI 서비스 간 데이터 이동 시 상호 작용을 설명, 실행, 모니터링하기 위한 단일 창을 제공하는 클라우드 메시지 버스 플랫폼입니다.
참고:
- 이 튜토리얼은 교육 및 학습 목적으로만 설계되었습니다. 학습자가 통제 된 환경에서 실제 경험을 실험하고 얻을 수있는 환경을 제공합니다. 이 자습서에 사용된 보안 구성 및 관행은 실제 시나리오에 적합하지 않을 수 있습니다.
- 실제 응용 프로그램에 대한 보안 고려 사항은 훨씬 더 복잡하고 동적입니다. 따라서 운용 환경에서 여기에 설명된 기술 또는 구성을 구현하기 전에 포괄적인 보안 평가 및 검토를 수행해야 합니다. 이 검토에는 액세스 제어, 암호화, 모니터링 및 규정 준수를 포함한 보안의 모든 측면이 포함되어 시스템이 조직의 보안 정책 및 표준에 부합하도록 해야 합니다.
- 보안은 랩 환경에서 실제 배포 환경으로 전환할 때 항상 최우선 순위가 되어야 합니다.
목표
- 실시간으로 메시지를 처리하는 원활한 데이터 스트리밍 파이프라인을 구축합니다. 새 메시지가 OCI 스트림에 게시되면 자동으로 전달되고 OCI Functions에 의해 처리되어 데이터가 Oracle Autonomous Transaction Processing(ATP) 데이터베이스로 로드됩니다. 이 엔드 투 엔드 솔루션은 OCI 서비스를 사용한 효율적인 데이터 입수 및 변환을 보여 주므로 스트리밍과 데이터베이스 시스템 간의 안전하고 확장 가능한 통합을 보장합니다.
필요 조건
-
Oracle Cloud Infrastructure:
-
관리자 레벨 액세스 권한이 있는 Oracle 계정입니다.
-
리소스를 생성할 컴파트먼트입니다.
주: 컴파트먼트 이름 및 컴파트먼트 ID를 기록해 두십시오.
-
프라이빗 서브넷을 사용하는 VCN입니다. 자세한 내용은 가상 클라우드 네트워크 생성을 참조하십시오.
주: VCN OCID 및 서브넷 이름에 유의하십시오. 스트림 풀 및 함수에 필요합니다.
-
VCN에서 프라이빗 서브넷에 스트림 풀을 생성합니다. 자세한 내용은 스트림 풀 생성을 참조하십시오.
-
이전에 생성된 동일한 스트림 풀에
myfirststream
이라는 스트림을 생성합니다. 자세한 내용은 스트림 생성을 참조하십시오. -
Oracle Autonomous Database입니다. 자세한 내용은 Oracle Autonomous Database를 참조하십시오.
-
암호를 저장하기 위한 OCI 저장소입니다. 자세한 내용은 저장소 생성을 참조하십시오.
-
OCI 컨테이너 레지스트리에 로그인을 사용으로 설정하는 OCI 인증 토큰입니다. 자세한 내용은 Oracle Cloud Infrastructure Registry에 로그인을 사용으로 설정하기 위한 인증 토큰 생성을 참조하십시오.
-
-
OCI Cloud Shell 환경:
- OCI Cloud Shell에 함수를 배치하려면 OCI Cloud Shell이 필요합니다. OCI Cloud Shell이 없는 경우 대신 배스천 호스트를 사용할 수 있습니다. 자세한 내용은 Bastion Overview를 참조하십시오.
작업 1: 동적 그룹 설정
OCI 콘솔에 로그인하여 도메인으로 이동한 후 동적 그룹을 누르고 다음 정보가 포함된 그룹을 생성합니다.
-
그룹 이름:
MyFunctions
를 입력합니다.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
태스크 2: 정책 생성
OCI 콘솔로 이동하여 정책으로 이동하고 다음 정보로 정책을 생성합니다.
-
정책 이름:
FunctionsPolicies
을 입력합니다.Allow dynamic-group MyFunctions to {STREAM_INSPECT, STREAM_READ, STREAM_CONSUME, STREAM_PRODUCE} in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read objects in compartment YOUR-COMPARTMENT-NAME Allow dynamic-group MyFunctions to read secret-bundles in compartment YOUR-COMPARTMENT-NAME
작업 3: OCI 컨테이너 레지스트리 생성
-
OCI 콘솔로 이동하여 개발자 서비스, 컨테이너 및 아티팩트로 이동하고, 컨테이너 레지스트리를 선택하고, 저장소 생성을 눌러 함수 이미지에 대한 프라이빗 저장소를 생성합니다.
-
저장소 이름:
lab/fn-java-event-to-atp
을 입력합니다.
-
-
저장소를 확인하고 네임스페이스를 기록해 둡니다.
-
OCI CLI 및 Docker가 설치되어 있어야 하는 OCI Cloud Shell을 열고 레지스트리에 로그인을 계속합니다. 해당 지역의 URL이 올바른지 확인해 보세요. 이 자습서에서는 레지스트리 URL이
gru.ocir.io
인 브라질 동부(상파울루)를 사용합니다.주: [필요 조건] 섹션에서 생성된 사용자 인증 토큰이 필요합니다.
docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
작업 4: 데이터베이스 전자 지갑을 저장할 OCI 객체 스토리지 버킷 생성
OCI 콘솔로 이동하여 스토리지, 오브젝트 스토리지 및 아카이브 스토리지, 버킷으로 이동하고 버킷 생성을 눌러 데이터베이스 전자 지갑 zip 파일을 저장할 Wallet
이라는 새 버킷을 생성합니다.
작업 5: 데이터베이스 전자 지갑을 다운로드하여 OCI Object Storage 버킷에 저장
주: 이 코드 예제는 전자 지갑을 사용하여 Oracle Autonomous Database에 안전하게 접속하는 방법을 보여줍니다. 계속하려면 전자 지갑 인증서를 구성하고 이 자습서 전체에서 사용할 비밀번호를 설정해야 합니다.
-
OCI 콘솔로 이동하여 Oracle Database로 이동한 후 Autonomous Database를 누르고 ATP를 선택합니다.
-
데이터베이스 접속을 누릅니다.
-
전자 지갑 비밀번호를 입력하고 애플리케이션에 이 비밀번호가 필요합니다.
-
작업 4에서 생성된 OCI Object Storage 버킷으로 이동하고 업로드를 눌러 다운로드한 전자 지갑 zip 파일을 업로드합니다.
작업 6: 저장소 내에 데이터베이스 인증서 및 전자 지갑 비밀번호를 안전하게 저장
주: 필요 조건으로 저장소를 이미 생성했는지 확인하십시오.
-
OCI 콘솔로 이동하여 ID 및 보안, 저장소로 이동하고 저장소를 선택합니다.
-
비밀, 비밀 생성을 누르고 다음 정보로 암호를 생성합니다.
암호 이름 값 MYRDBMS_WALLET_PASSWORD
일반 텍스트로 된 전자 지갑 비밀번호 MYRDBMS_DB_PASSWORD
일반 텍스트로 된 데이터베이스 비밀번호입니다. 참고 비밀번호 유형 템플리트에 대해 일반 텍스트를 선택했는지 확인하십시오.
MYRDBMS_DB_PASSWORD
에 대해서도 이 프로세스를 반복하고 함수 구성에 사용될 두 OCID를 기록해 둡니다.
작업 7: 이벤트 메시지를 수신하고 ATP 데이터베이스에 삽입할 Java OCI 함수 생성
참고 스트림 풀의 동일한 서브넷인 프라이빗 서브넷을 선택해야 합니다.
-
OCI 콘솔로 이동하여 개발자 서비스, 함수, 애플리케이션으로 이동하고 애플리케이션 생성을 누릅니다.
-
Docker, OCI CLI, Fn Project CLI가 설치된 OCI Cloud Shell로 이동하고 다음 명령을 실행하여 기능을 초기화하십시오.
주: 작업을 수행한 경우 Docker 로그인 명령이 현재 이미 실행된 것입니다. 실행되지 않은 경우 작업 3의 Docker 로그 단계를 진행하십시오.
-
OCI Cloud Shell을 사용 중이므로 현재 컨텍스트를 확인하십시오. 현재 컨텍스트는 이미 설정되어 있어야 합니다.
fn list context
-
다음 명령을 실행하여 작업 3에서 생성된 컨테이너 레지스트리에서 이미지를 가져올 수 있도록 기능 설정을 업데이트합니다.
fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn list context
참고: 이 자습서에서는 브라질 동부(상파울루) 지역을 사용 중이며, 다른 지역을 사용 중인 경우 API URL 및 REGISTRY 위치를 변경해야 합니다.
-
다음 명령을 실행하여 생성한 애플리케이션이 OCI Cloud Shell에 나열되는지 확인합니다.
참고: OCI Cloud Shell에서 네트워크: 퍼블릭을 사용하고 있는지 확인하십시오.
fn list apps
-
fn-java-event-to-atp.zip에서 Java 함수 샘플 코드를 가져와서 OCI Cloud Shell에 업로드한 다음 파일 압축을 해제하십시오.
-
오른쪽 위 휠 메뉴를 누르고 업로드를 선택하여 파일을 업로드합니다.
-
다음 명령을 실행하여 파일의 압축을 풉니다.
# check your file is there ls -lrt # unzip the file unzip fn-java-event-to-atp.zip # check again ls -lrt
참고: 이 간결한 Java 프로젝트는 OCI Connector Hub에서 JSON 데이터 입력을 검색하여, 사전 정의된 형식에 따라 구문 분석하고, 추출된 정보를 ATP 데이터베이스에 매끄럽게 삽입합니다. 데이터를 적절히 삽입하려면 ATP 데이터베이스 내의 필수 메시지 형식 및 해당 테이블에 대한 지침을 보려면 다음 단계를 참조하십시오.
-
OCI Cloud Shell에서 다음 명령을 실행하여 코드를 작성하고 함수를 배치합니다.
fn deploy --app MyApp # After deploy complete, check the function is there: fn list functions MyApp |grep fn-java-event-to-atp
-
OCI 콘솔로 이동하여 개발자 서비스, 함수, 애플리케이션으로 이동하여 애플리케이션(
Myapp
)을 선택하고 기능을 누릅니다.주 이 자습서의 Java 샘플 코드는 구성 변수를 사용하여 데이터베이스 접속을 설정합니다. 성공적인 실행을 보장하기 위해 유저 환경에서 적절한 값을 제공해야 합니다.
-
다음 구성을 모두 만듭니다.
암호 이름/키 | 값 |
---|---|
WALLET_BUCKET | 전자 지갑 |
WALLET_OBJECT | zip 파일 이름 |
BUCKET_NAMESPACE | 버킷 네임스페이스 |
DB_USER | 데이터베이스 유저 이름 |
DB_SERVICE_NAME | 데이터베이스 접속 세부정보에서 찾은 데이터베이스 서비스 이름입니다. |
DB_PASSWORD_OCID_VAULT | 암호 OCID 붙여넣기 |
DB_WALLET_PASSWORD_OCID_VAULT | 암호 OCID 붙여넣기 |
태스크 8: ATP 데이터베이스에 신규 테이블 생성
스트리밍으로부터 데이터를 수신하려면 ATP 데이터베이스에 MY_TABLE
라는 새 테이블을 생성합니다.
-
전자 지갑을 다운로드한 Oracle Autonomous Database를 선택하고 데이터베이스 작업 드롭다운 메뉴를 누른 다음 SQL을 누릅니다.
-
다음 테이블 생성 DDL 명령을 실행합니다.
주 이 실습에서는 데이터베이스 접속에 ADMIN 사용자를 사용합니다. 사용자 이름이 다르면 사용자 이름을 대체합니다.
CREATE TABLE "ADMIN"."MY_TABLE" ( "CODE" VARCHAR2(50 BYTE), "NAME" VARCHAR2(500 BYTE) ) ;
작업 9: 새 메시지가 스트림에 나타날 때 함수를 호출하도록 OCI Connector Hub 설정
이제 함수와 데이터를 저장할 새 테이블을 생성했으므로 모든 항목을 함께 연결해야 합니다. OCI Streaming에서 OCI Connector Hub를 거쳐 OCI Functions로 이동하는 파이프라인을 설정하면 됩니다.
-
OCI 콘솔로 이동하여 분석 및 AI, 메시징으로 이동하고 커넥터 허브를 누릅니다.
-
커넥터 생성을 누르고 다음 정보를 입력합니다.
- 커넥터 이름:
StreamingToFN
을 입력합니다. - 소스: 스트리밍을 선택합니다.
- 대상: 함수를 선택합니다.
주 필요 조건으로
myfirststream
라는 스트림 풀과 스트림을 이미 생성했는지 확인하십시오. - 커넥터 이름:
-
소스 구성에서 스트림 풀 및 스트림을 선택합니다.
-
대상 구성에서 MyApp을 함수 애플리케이션으로, fn-java-event-to-atp를 함수로 선택합니다.
참고 커넥터 생성 페이지에서 제안된 대로 추가 정책을 생성해야 할 수 있습니다.
작업 10: OCI Streaming에서 메시지 생성 및 파이프라인 작동 확인
주 제공된 Java 코드 샘플은 특정 JSON 구조에서 메시지를 처리하도록 설계되었습니다. 이 코드는 이 JSON을 구문 분석하여 필요한 데이터를 추출한 다음
MY_TABLE
테이블에 삽입합니다. 예상 JSON 형식에서 임의의 편차가 발생하면 구문 분석 오류가 발생하고 데이터베이스 삽입이 성공적으로 수행되지 않습니다.
JSON 샘플 메시지:
{"code": "001", "name":"Larry"}
단계를 수행합니다:
-
OCI 콘솔로 이동하여 분석 및 AI, 메시징, 스트리밍으로 이동하고 스트림(
myfirststream
)을 선택한 후 테스트 메시지 생성을 누릅니다. -
데이터에 샘플 JSON 메시지를 입력하고 생성을 누릅니다.
주 스트림 파이프라인은 첫번째 실행 시 콜드 시작이 발생하여 상당한 지연이 발생할 수 있습니다. 이는 커넥터 허브가 메시지를 전송하려고 처음 시도할 때 발생하는 함수 초기화 결과입니다.
작업 11: 데이터베이스에 도착한 데이터 검증
-
전자 지갑을 다운로드한 Oracle Autonomous Database를 선택하고 데이터베이스 작업 드롭다운 메뉴를 누르고 SQL을 누릅니다.
-
다음 질의를 실행합니다.
select * from admin.my_table;
문제 해결 및 팁
-
함수에 대한 로그를 사용으로 설정하고 오류가 있는지 확인하십시오. 로깅에 대한 자세한 내용은 함수 로그 저장 및 보기를 참조하십시오.
-
모든 정책이 Prerequisites 섹션에 설명된 대로 적용되었는지 검증합니다.
-
OCI 커넥터 허브에 대한 로그를 사용으로 설정합니다. 자세한 내용은 Logs for Connector Hub을 참조하십시오.
관련 링크
확인
- 작성자 - Joao Tarla(Oracle LAD A-Team 솔루션 엔지니어)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Stream Data to Oracle Autonomous Transaction Processing Database using OCI Functions
G25953-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.