Intro

๊ฐœ์š”

  • Spring Cloud Data Flow: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ(์ŠคํŠธ๋ฆผ & ๋ฐฐ์น˜)์„ ์†์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์šด์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”Œ๋žซํผ.

  • ์ฃผ์š” ์žฅ์ 

    • Spring Cloud Stream, Spring Cloud Task ๋“ฑ์„ ํ™œ์šฉํ•ด ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ์™€ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํ†ตํ•ฉ

    • REST API, ์›น UI, CLI(Shell) ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ

    • ๋ฐ์ดํ„ฐ ์†Œ์Šค(Source) โ†’ ํ”„๋กœ์„ธ์„œ(Processor) โ†’ ์‹ฑํฌ(Sink) ํ˜•ํƒœ์˜ ์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹œ๊ฐ์ ์œผ๋กœ ๊ด€๋ฆฌ

    • ์Šค์ผ€์ผ ์•„์›ƒ ๊ตฌ์กฐ๋กœ ํ™•์žฅ์„ฑ ์šฉ์ด

  • ๊ตฌ์„ฑ ์š”์†Œ

    • Data Flow Server: ์ŠคํŠธ๋ฆผยทํƒœ์Šคํฌ ์ •์˜/๋ฐฐํฌ/๋ชจ๋‹ˆํ„ฐ๋ง์˜ ์ค‘์‹ฌ

    • Skipper: ๋ฒ„์ „ ๊ด€๋ฆฌ, ๋กค๋ง ์—…๋ฐ์ดํŠธ ๋ฐ ๋กค๋ฐฑ ๋“ฑ ์ŠคํŠธ๋ฆผ ์šด์˜ ์ „๋ฐ˜ ์ง€์›

    • Shell: CLI ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋ฉฐ ์ŠคํŠธ๋ฆผยทํƒœ์Šคํฌ ์ •์˜, ๋ฐฐํฌ, ์กฐํšŒ ๋“ฑ ์ˆ˜ํ–‰


SCDF ๋กœ์ปฌ ์„ค์น˜ ๋ฐ ์‹คํ–‰

Docker Compose๋กœ ๋น ๋ฅด๊ฒŒ ์„ธํŒ…

์•„๋ž˜ ์˜ˆ์‹œ docker-compose.yml ํŒŒ์ผ์„ ์ค€๋น„ํ•˜๊ณ  docker-compose up -d๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šด๋‹ค.

version: '3.7'
services:
  dataflow-server:
    image: springcloud/spring-cloud-dataflow-server:latest
    container_name: dataflow-server
    ports:
      - 9393:9393
    environment:
      - SPRING_PROFILES_ACTIVE=docker
      - MAVEN_REMOTE_REPOSITORIES_RELEASE_ENABLED=true
      - MAVEN_REMOTE_REPOSITORIES_SNAPSHOTS_ENABLED=true
    depends_on:
      - skipper
      - mysql
    links:
      - skipper
      - mysql

  skipper:
    image: springcloud/spring-cloud-skipper-server:latest
    container_name: skipper
    ports:
      - 7577:7577
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    depends_on:
      - mysql
    links:
      - mysql

  mysql:
    image: mysql:5.7
    container_name: scdf-mysql
    environment:
      - MYSQL_DATABASE=dataflow
      - MYSQL_USER=dataflow
      - MYSQL_PASSWORD=dataflow
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - 3306:3306

  rabbitmq:
    image: rabbitmq:3.8-management
    container_name: scdf-rabbit
    ports:
      - 5672:5672
      - 15672:15672
  • ๊ตฌ์„ฑ

    • Data Flow Server, Skipper, MySQL, RabbitMQ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•จ๊ป˜ ์‹คํ–‰

    • dataflow DB์™€ dataflow ์œ ์ €๋ฅผ ์‚ฌ์šฉ

  • ์‹คํ–‰ ๋ช…๋ น์–ด

    docker-compose up -d
  • ์ •์ƒ ๊ตฌ๋™ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:9393/dashboard ์ ‘์†ํ•˜๋ฉด SCDF ์›น UI ํ™•์ธ ๊ฐ€๋Šฅ

Shell ์‚ฌ์šฉ

  • Shell์€ CLI๋กœ ์ŠคํŠธ๋ฆผยทํƒœ์Šคํฌ ์ •์˜์™€ ๋ฐฐํฌ๋ฅผ ๋•๋Š”๋‹ค.

  • ๋‹ค์šด๋กœ๋“œ ํ›„ ์‹คํ–‰ ์˜ˆ์‹œ:

    wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-dataflow-shell/<๋ฒ„์ „>/spring-cloud-dataflow-shell-<๋ฒ„์ „>.jar
    java -jar spring-cloud-dataflow-shell-<๋ฒ„์ „>.jar
  • SCDF ์„œ๋ฒ„์— ์ ‘์†:

    dataflow:>dataflow config server --uri http://localhost:9393
  • ์ดํ›„ stream list, task list ๋“ฑ ๋ช…๋ น์–ด๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ


์ŠคํŠธ๋ฆผ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ์˜ˆ์‹œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก

  • ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ Spring Cloud Stream ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์†Œ์Šค, ํ”„๋กœ์„ธ์„œ, ์‹ฑํฌ)์„ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.

  • ์˜ˆ: HTTP ์†Œ์Šค์™€ Log ์‹ฑํฌ ๋“ฑ๋ก

    dataflow:>app register --name http-source --type source \
      --uri docker://springcloudstream/http-source-rabbit:3.2.2
    dataflow:>app register --name log-sink --type sink \
      --uri docker://springcloudstream/log-sink-rabbit:3.2.2
  • source, sink, processor ๋“ฑ ํƒ€์ž…์— ๋งž์ถฐ ๋“ฑ๋ก

์ŠคํŠธ๋ฆผ ์ •์˜ & ๋ฐฐํฌ

  • ์ŠคํŠธ๋ฆผ ์ •์˜ (์†Œ์Šค โ†’ ์‹ฑํฌ ๊ฐ„ ๋‹จ์ˆœ ํŒŒ์ดํ”„๋ผ์ธ)

    dataflow:>stream create --name simpleStream \
      --definition "http-source | log-sink"
  • ๋ฐฐํฌ

    dataflow:>stream deploy simpleStream
  • ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ http://localhost:9393/dashboard์—์„œ ํŒŒ์ดํ”„๋ผ์ธ ์ƒํƒœ ํ™•์ธ ๊ฐ€๋Šฅ

์ŠคํŠธ๋ฆผ ํ…Œ์ŠคํŠธ

  • http-source๋Š” HTTP POST๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 

    curl -X POST -H "Content-Type: text/plain" \
      -d "Hello SCDF" \
      http://<http-source-์ปจํ…Œ์ด๋„ˆ-IP>:8080
  • log-sink ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋ฉด "Hello SCDF" ๋ฉ”์‹œ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ


๋ฐฐ์น˜(ํƒœ์Šคํฌ) ๊ตฌ์„ฑ & ์šด์˜

ํƒœ์Šคํฌ ๋“ฑ๋ก

  • Spring Batch ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Docker ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด ํƒœ์Šคํฌ๋กœ ๋“ฑ๋ก

    dataflow:>app register --name simple-batch --type task \
      --uri docker://<์ด๋ฏธ์ง€์ฃผ์†Œ>/simple-batch-task:latest
  • --type task๊ฐ€ ํ•ต์‹ฌ

ํƒœ์Šคํฌ ์ •์˜ & ์‹คํ–‰

  • ์ •์˜:

    dataflow:>task create simpleBatchTask --definition "simple-batch"
  • ์‹คํ–‰:

    dataflow:>task launch simpleBatchTask
  • ์‹คํ–‰ ๊ฒฐ๊ณผ(์„ฑ๊ณต/์‹คํŒจ, ๋กœ๊ทธ)๋Š” UI ๋˜๋Š” Shell๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

์Šค์ผ€์ค„๋ง(์„ ํƒ)

  • SCDF๋Š” Kubernetes๋‚˜ Cloud Foundry ๋“ฑ๊ณผ ์—ฐ๋™ํ•ด ํƒœ์Šคํฌ ์Šค์ผ€์ค„๋ง ๊ฐ€๋Šฅ

  • ๋กœ์ปฌ Docker ํ™˜๊ฒฝ์—์„  ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๊ณ ๋ คํ•ด๋ณด์ž

์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Data Flow UI๋กœ ์ŠคํŠธ๋ฆผยท๋ฐฐ์น˜ ์ž‘์—… ์ƒํƒœ ์ผ๊ด„ ๊ด€๋ฆฌ

  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ(Pod)์˜ ๋กœ๊ทธ ๋ฐ ๋ฉ”ํŠธ๋ฆญ์„ ์กฐํšŒํ•ด ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Prometheus/Grafana ์—ฐ๋™ ์‹œ ์„ฑ๋Šฅยท์ƒํƒœ๋ฅผ ์‹œ๊ฐํ™”ํ•ด ์šด์˜ ํšจ์œจ ์ƒ์Šน

Last updated