Skip to content

Repository files navigation

FlinkAPI CEP Library

Apache FlinkJavaMavenLicense

Apache Flink 기반 실시간 Complex Event Processing (CEP) 라이브러리
DDD(Domain-Driven Design) 아키텍처로 설계된 멀티모듈 프로젝트


📋 목차


프로젝트 개요

FlinkAPI CEP Library는 Apache Flink를 기반으로 한 실시간 복합 이벤트 처리(CEP) 라이브러리입니다. DDD 아키텍처를 적용하여 확장 가능하고 유지보수가 용이한 구조로 설계되었습니다.

주요 특징

  • 실시간 이벤트 처리: Apache Flink CEP를 활용한 고성능 스트림 처리
  • DDD 아키텍처: 도메인 중심 설계로 비즈니스 로직과 기술적 구현 분리
  • 멀티모듈 구조: 각 레이어별 독립적인 모듈 관리
  • 타입 안전성: Java 8+ 기반의 강타입 시스템
  • 확장 가능성: 플러그인 아키텍처 지원

활용 사례

  • 금융 사기 탐지 시스템
  • IoT 센서 데이터 모니터링
  • 실시간 로그 분석
  • 비즈니스 프로세스 모니터링
  • 네트워크 보안 이벤트 감지

아키텍처

FlinkAPI CEP Library는 DDD(Domain-Driven Design) 원칙을 따라 다음과 같은 레이어로 구성됩니다:

┌─────────────────────────────────────────┐
│ Starter │ ← 애플리케이션 엔트리포인트
├─────────────────────────────────────────┤
│ Interfaces │ ← REST API, 웹 컨트롤러 (개발 중)
├─────────────────────────────────────────┤
│ Application │ ← 애플리케이션 서비스, DTO
├─────────────────────────────────────────┤
│ Infrastructure │ ← Flink 엔진, 외부 시스템 연동
├─────────────────────────────────────────┤
│ Domain │ ← 도메인 모델, 비즈니스 룰
└─────────────────────────────────────────┘

모듈 구성

모듈설명상태
flink-cep-domain도메인 모델, 비즈니스 룰, 값 객체완료
flink-cep-application애플리케이션 서비스, 포트, DTO완료
flink-cep-infrastructureFlink 엔진, CEP 패턴 빌더, 룰 파서완료
flink-cep-interfacesREST API, 웹 컨트롤러개발 중
flink-cep-starter올인원 스타터, 메인 애플리케이션완료

모듈별 주요 컴포넌트

Domain Layer

  • Rule: 룰 도메인 모델
  • Event: 이벤트 도메인 모델
  • RuleCondition: 룰 조건 값 객체
  • TimeWindow: 시간 윈도우 값 객체

Application Layer

  • RuleManagementService: 룰 관리 서비스
  • EventStreamingService: 이벤트 스트리밍 서비스
  • RuleRepository: 룰 저장소 포트
  • EventRepository: 이벤트 저장소 포트

Infrastructure Layer

  • RuleEngine: Flink CEP 룰 엔진
  • CEPPatternBuilder: CEP 패턴 빌더
  • FlinkStreamProcessor: Flink 스트림 프로세서
  • RuleParserService: 룰 파싱 서비스

시작하기

필수 요구사항

  • Java: 8 이상
  • Maven: 3.8 이상
  • Apache Flink: 1.14.6 (자동 포함)

설치

  1. 저장소 클론

    git clone https://github.com/ukukdin/FlinkAPI.git
    cd FlinkAPI
  2. 의존성 설치 및 빌드

    mvn clean install
  3. 애플리케이션 실행

    java -jar flink-cep-starter/target/flink-cep-starter-1.0.0.jar

빌드 및 실행

전체 프로젝트 빌드

# 컴파일
mvn clean compile
# 테스트 포함 빌드
mvn clean package
# 테스트 제외 빌드 (권장)
mvn clean package -DskipTests

개별 모듈 빌드

# 특정 모듈만 빌드
mvn clean package -pl flink-cep-starter -am
# 특정 모듈부터 빌드
mvn clean package -rf :flink-cep-infrastructure

Fat JAR 실행

# 메인 애플리케이션 실행
java -jar flink-cep-starter/target/flink-cep-starter-1.0.0.jar
# 커스텀 설정으로 실행
java -Dflink.env=production -jar flink-cep-starter/target/flink-cep-starter-1.0.0.jar

사용 예제

기본 사용법

importcom.flinkapi.cep.FlinkCEPApplication;
importcom.flinkapi.cep.domain.model.Rule;
importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
publicclassExample {
publicstaticvoidmain(String[] args) throwsException {
// 1. 애플리케이션 생성FlinkCEPApplicationapp = FlinkCEPApplication.create();
// 2. 룰 등록 (향후 구현 예정)// Rule fraudRule = Rule.builder()// .ruleName("고액 거래 탐지")// .ruleType(Rule.RuleType.THRESHOLD)// .build();// app.registerRule(fraudRule);// 3. 이벤트 스트리밍 시작app.startEventStreaming("transaction-events");
// 4. 애플리케이션 실행app.execute("FlinkCEP Example");
}
}

커스텀 환경 설정

// 커스텀 Flink 환경으로 애플리케이션 생성StreamExecutionEnvironmentenv = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(4);
FlinkCEPApplicationapp = FlinkCEPApplication.create(env);

프로젝트 구조

FlinkAPI/
├── pom.xml # 부모 POM
├── README.md # 프로젝트 문서
├── ModuleTest.java # 모듈 통합 테스트
│
├── flink-cep-domain/ # 도메인 레이어
│ ├── src/main/java/
│ │ └── com/flinkapi/cep/
│ │ ├── domain/model/ # 도메인 모델
│ │ ├── domain/service/ # 도메인 서비스
│ │ └── domain/value/ # 값 객체
│ └── pom.xml
│
├── flink-cep-application/ # 애플리케이션 레이어
│ ├── src/main/java/
│ │ └── com/flinkapi/cep/
│ │ ├── application/dto/ # 데이터 전송 객체
│ │ ├── application/port/ # 포트 (인터페이스)
│ │ └── application/service/ # 애플리케이션 서비스
│ └── pom.xml
│
├── flink-cep-infrastructure/ # 인프라스트럭처 레이어
│ ├── src/main/java/
│ │ └── com/flinkapi/cep/
│ │ ├── engine/ # CEP 엔진
│ │ └── infrastructure/ # 인프라 구현체
│ └── pom.xml
│
├── flink-cep-interfaces/ # 인터페이스 레이어 (개발 중)
│ ├── src/main/java/
│ │ └── com/flinkapi/cep/
│ │ └── web/ # REST 컨트롤러
│ └── pom.xml
│
└── flink-cep-starter/ # 스타터 애플리케이션
├── src/main/java/
│ └── com/flinkapi/cep/
│ ├── FlinkCEPApplication.java
│ ├── FlinkCEPLibrary.java
│ ├── app/ # 샘플 애플리케이션
│ └── examples/ # 사용 예제
├── src/test/java/ # 통합 테스트
└── pom.xml

개발 상태

완료된 기능

  • DDD 아키텍처 기반 멀티모듈 구조
  • 도메인 모델 정의 (Rule, Event, Condition 등)
  • Flink CEP 패턴 빌더
  • 룰 엔진 기본 구현
  • 이벤트 스트리밍 서비스 틀
  • Maven 빌드 시스템
  • Fat JAR 패키징
  • 코드 정리 (이모지 제거 완료)

개발 중인 기능

  • REST API 인터페이스 (interfaces 모듈)
  • 실시간 룰 등록/수정 기능
  • Kafka 연동
  • 데이터베이스 퍼시스턴스
  • 웹 대시보드

향후 계획

  • Spring Boot 통합
  • Docker 컨테이너 지원
  • Kubernetes 배포 가이드
  • 성능 최적화
  • 모니터링 및 메트릭스
  • 자동화된 테스트 케이스 확장

기여하기

개발 환경 설정

  1. 포크 및 클론

    git fork https://github.com/ukukdin/FlinkAPI.git
    git clone https://github.com/YOUR_USERNAME/FlinkAPI.git
  2. 개발 브랜치 생성

    git checkout -b feature/your-feature-name
  3. 변경사항 커밋

    git commit -m "feat: add your feature description"
  4. 풀 리포트 생성

    git push origin feature/your-feature-name

코드 스타일

  • Java 코딩 컨벤션 준수
  • DDD 패턴 따르기
  • 단위 테스트 작성
  • 문서화 유지

이슈 리포팅

버그 발견이나 기능 요청 시 GitHub Issues를 이용해 주세요.


라이선스

이 프로젝트는 Apache License 2.0 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.


개발자 정보


관련 링크


이 프로젝트가 유용하다면 Star를 눌러주세요!

About

Flink 라이브러리

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages