FlexRIC의 등장


FlexRIC은 2021년에 공개된 오픈소스 RIC 플랫폼으로, 현재 O-RAN 아키텍처 중 Near-RT RIC까지만 지원하고 있다.
이 플랫폼은 OAI나 srsrAN과 같은 오픈소스 RAN과 연통이 가능하며, 멀티언어(C, Go, 파이썬 등)을 지원한다.
위 그림이 최초의 FlexRIC v 0.1의 아키텍처이다
FlexRIc의 구조에는 E2AP와 E2SM이라는 두 가지 핵심 요소가 있다.
- E2AP (E2 Application Protocol)은 RIC과 RAN 노드가 통신할 때 사용하는 프로토콜 계층을 말한다.
이를 통해 RIC이 RAN으로부터 데이터를 보고받거나(Report), 정책(Policy)이나 제어 명령(Control/Action)을 내려보낼 수 있다. - E2SM (E2 Service Model)은 말 그대로 “서비스 모델”로, 특정한 기능을 정의한 모듈이다.
예를 들어, Key Performance 모니터링을 하는 모델이나, RAN을 제어하는 xApp 등이 여기에 포함된다.

따라서, FlexRIC을 사용할 때는 자신이 원하는 기능에 맞는 E2SM을 설치해서 연결을 하면 된다.
E2AP와 E2SM은 주로 Pair로 구성되어 설치되기 때문에, 각각의 버전에 따라 호환되는 형태로 동작한다.
이후 FlexRIC이 v 0.2로 업데이트가 되면서, xApp과 RIC 사이의 E42 라는 새로운 프로토콜을 정의했고,
Sllice나 Traffic Control과 같은 새로운 서비스 모델을 배포했다.
이를 포함한 전체 구조는 아래에서 설명할 것.
FlexRIC의 전체 구조

FlexRIC의 전체 구조를 보면, 실제로 핵심이 되는 xApp이 시스템의 상단 부분에 위치한다.
이 xApp은 개발자가 직접 구현하는 지능형 Application으로, RAN을 제어하거나 Network 성능을 최적화하는 역할을 한다.
FlexRIC은 SWIG을 통해 여러 프로그래밍 언어를 지원한다는 장점이 있다.
그 아래에는 E2SM (E2 Service Model)이 있다.
이건 일종의 iApp 형태로 작동하는 모듈화된 Service Layer로, RIC이 RAN을 제어하거나 데이터를 수집할 때 사용하는 표준 Interface를 제공한다.
예를 들어, KPM (Key Performance Measurement) iApp은 성능 지표를 수집하는 기능을 담당하고, RAN Control iApp은 RAN 파라미터를 제어하는 기능을 수행할 수 있다.
따라서, 개발자가 Power Control 용 xApp을 새로 만들고 싶다면 RAN에서 측정값이나 상태 정보를 가져오는 부분은 이미 제공되는 KPM iApp을 재활용할 수 있고, 실제로 Power Control 명령을 내려주는 부분은 RAN Control iApp을 활용하면 된다. 즉, 개발자는 iApp이 제공하는 기본 기능들을 조합해서 자신의 xApp 로직만 구현하면 되는 구조이다.
다음으로 Service Library와 Agent Library는 FlexRIC의 통신과 연결을 담당하는 핵심 구성 요소이다.
Service Library는 RIC과 iApp, 그리고 기지국(Base Tation) 사이의 통신을 관리하는 계층으로, 메시지 교환과 프로토콜 처리를 담당하며, Agent Library는 gNB(기지국)이 E2 Node로서 동작하도록 만들어주는 모듈이다.
위 라이브러리를 통해 gNB가 RIC과 연결되고, 우리가 개발한 xApp의 제어 명령을 받을 수 있게 된다.
FlexRIC의 SDK 방식과 API 구조


개발을 위한 접근 방식에는 크게 Network API 방식과 SDK 방식이 있다.
FlexRIC에서는 이 중 SDK 방식을 채택했다고 한다.
Network API 방식에서는 Near-RT RIC의 각 기능(endpoint)이 Network API 형태로 직접 노출된다.
즉, xApp과 RIC이 통신하기 위해서는 각각의 네트워크 endpoint에 맞는 프로토콜과 인코딩 형식을 지정해야 한다.
그렇게 되면 아래와 같은 것들을 일일이 고려해야 한다.
- 응용 계층 프로토콜(Application Protocol): 여러 정보를 담은 메시지 세트를 주고받기 위해 사용된다.
- 데이터 인코딩 방식(Data Encoding Protocol): 데이터 구조를 정의하는 형식 — 예를 들어 ASN.1, Protobuf, JSON 등.
- 네트워크 전송 프로토콜(Transport Protocol): SCTP, HTTPS, gRPC 등 통신 방식을 정의한다.
- 보안 및 암호화(Security): 통신 시 사용할 인증 및 암호화 방법을 명시한다.
이런 저수준 접근 방식을 넘어서 RIC 벤더가 제공하는 Software Development Kit를 사용하는 방식이 SDK 접근 방식이다.
SDK가 모든 연결 관리와 프로토콜 처리를 내부에서 해주기 때문에, 개발자는 단순한 API 호출을 통해 xApp을 개발할 수 있다.
FlexRIC에서는 조금 더 간편한 SDK 방식을 채택하였다.

Near-RT RIC에는 xApp이 사용할 수 있는 API들은 위의 그림에 잘 나와 있다.
각각의 기능 영역에 따라 다음과 같이 구분된다.
| API 종류 | 주요 역할 |
| A1 API | Non-RT RIC과 연결되어 정책이나 지시사항(Policy/Intent)을 전달 |
| E2 API | RAN(E2 Node)과 연결되어 RAN 상태를 구독·제어하며, 충돌 완화(Conflict Mitigation) 관리 |
| O1 Management API | 시스템 및 구성 관리 (예: 모니터링, 설정 변경 등) |
| SDL API (Shared Data Layer) | 여러 xApp 간에 데이터를 공유하기 위한 데이터 계층 접근 |
| Enablement API | xApp이 API 활성화 기능(API enablement)과 통신할 수 있도록 지원 |
FlexRIC의 SDK 개요

SDK는 구체적으로 xApp이 Near-RT RIC과 통신할 때 필요한 연결 관리, 메시지 송수신, 이벤트 처리 등을 자동으로 처리해준다.
주요 컴포넌트는 다음과 같다.
- Message Handler / Generator: 메시지를 수신하고 생성하는 모듈
- Thread-safe Queue: 멀티스레드 환경에서 안전하게 메시지를 주고받기 위한 큐
- Pending Events / Active Procedures: 처리 대기 중인 이벤트와 실행 중인 작업을 관리
- Plug-in & Sync UI: 확장 가능한 구조와 동기화 인터페이스를 제공
SDK는 매우 간단한 API 구조를 제공하는데 주요 함수는 아래와 같다.
- init() / stop(): SDK 초기화 및 종료
- get_e2_nodes(): 연결된 E2 Node 목록 조회
- subscribe() / remove_subscription(): RAN 데이터 구독 및 해제
- control(): 제어 명령 전송
또한, SDK 내부에 sQLite Databse가 내장되어 있어, xApp은 수집한 데이터를 코드 내부 변수로 저장할 필요 없이 SQL 쿼리로 바로 접근할 수 있다는 장점이 있다. 이는 곧 xApp이 DB 기반의 상태 관리(Stateful xApp)을 쉽게 구현할 수 있도록 한다.
결국 xApp의 SDK 철학은 다음 3가지로 정리할 수 있게 된다.
- Simplicity (단순성) — KISS 원칙 (“Keep It Simple, Stupid”)
복잡한 네트워크 로직을 SDK가 모두 처리하고, xApp 개발자는 함수만 호출하면 됨. - Multi-language Support — 다양한 언어(C/C++, Python, Go, Java 등) 지원
- Efficiency (효율성) — 최소한의 오버헤드로 빠른 통신 처리
'RAN CN 테스트베드 구축 > OAI & FlexRIC (RAN)' 카테고리의 다른 글
| OpenAirInterface에서 gNB 역할을 하는 USRP (0) | 2025.10.24 |
|---|---|
| OAI 5G - OAI RAN - FlexRIC Setup 방법 (0) | 2025.10.16 |
| Window에서 Linux 사용하기 - wsl2 (0) | 2025.10.15 |
| Lab에서 쓸 수 있는 O-RAN Testbed 정리 (OAI, srsRAN) (2) | 2025.10.15 |
| O-RAN의 개념과 특징 (0) | 2025.10.15 |