Dev-ops

๐Ÿš€ CircleCI ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ์™„๋ฒฝ ์ •๋ฆฌ!

xeunnie 2025. 3. 21. 01:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿš€ CircleCI ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ์™„๋ฒฝ ์ •๋ฆฌ!

 

“์ž๋™ํ™” ๋ฐฐํฌ์™€ ๋นŒ๋“œ์˜ ๋งˆ๋ฒ•์‚ฌ, CircleCI!”

CI/CD์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ CircleCI์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํžˆ ์ดํ•ดํ•ด๋ณด์ž!

๐Ÿ“Œ ๋ชฉ์ฐจ

 

1๏ธโƒฃ CircleCI๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

2๏ธโƒฃ CircleCI์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

3๏ธโƒฃ CircleCI์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

4๏ธโƒฃ Orbs, Steps, Matrix๋ž€?

5๏ธโƒฃ CircleCI ๋Œ€์‹œ๋ณด๋“œ ํ™œ์šฉ๋ฒ•

6๏ธโƒฃ ์‹ค์ „ ์˜ˆ์ œ: React ํ”„๋กœ์ ํŠธ์— CircleCI ์ ์šฉํ•˜๊ธฐ

7๏ธโƒฃ ๊ฒฐ๋ก 

1๏ธโƒฃ CircleCI๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

 

CircleCI๋Š” CI/CD(Continuous Integration & Continuous Deployment) ์ž๋™ํ™” ๋„๊ตฌ๋กœ,

GitHub, Bitbucket ๋“ฑ์˜ ์ฝ”๋“œ ์ €์žฅ์†Œ์™€ ์—ฐ๋™ํ•ด ์ž๋™์œผ๋กœ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”.

 

โœ… CircleCI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?

โœ”๏ธ ์ž๋™ํ™”๋œ ์ฝ”๋“œ ๊ฒ€์ฆ: ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋นŒ๋“œ & ํ…Œ์ŠคํŠธ ์‹คํ–‰

โœ”๏ธ ๋น ๋ฅธ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค: ์ฝ”๋“œ๊ฐ€ ํŠน์ • ๋ธŒ๋žœ์น˜์— ๋จธ์ง€๋˜๋ฉด ์ž๋™ ๋ฐฐํฌ ๊ฐ€๋Šฅ

โœ”๏ธ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ง€์›: ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•ด ๋นŒ๋“œ ์†๋„ ํ–ฅ์ƒ

 

๐Ÿ“Œ ๋‹ค๋ฅธ CI/CD ํˆด (GitHub Actions, TravisCI)๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ?

GitHub Actions → GitHub๊ณผ ํ†ตํ•ฉ์ด ๊ฐ•์ , YAML ๋ฌธ๋ฒ• ์œ ์‚ฌ

TravisCI → ๊ฐ„๋‹จํ•œ ์„ค์ •์ด ์žฅ์ , ํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ๋А๋ฆผ

CircleCI๊ณ ๊ธ‰ ์„ค์ •๊ณผ ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, ๊ฐ•๋ ฅํ•œ ๋Œ€์‹œ๋ณด๋“œ ์ œ๊ณต

2๏ธโƒฃ CircleCI์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

 

โœ”๏ธ .circleci/config.yml (์„ค์ • ํŒŒ์ผ)

 

CircleCI๋Š” .circleci/config.yml ํŒŒ์ผ์„ ์ฝ์–ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•ด์š”.

์ด ์„ค์ • ํŒŒ์ผ์—๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์˜๋ผ์š”.

 

โœ”๏ธ Jobs (์ž‘์—…)

 

jobs๋Š” ํŠน์ • ์ž‘์—…(๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์œ„์˜ˆ์š”.

๊ฐ job์€ Docker ์ปจํ…Œ์ด๋„ˆ๋‚˜ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋ผ์š”.

jobs:
  build:
    docker:
      - image: circleci/node:18
    steps:
      - checkout
      - run: npm install
      - run: npm test

โœ”๏ธ Steps (๋‹จ๊ณ„)

 

๊ฐ job ์•ˆ์—์„œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด ๋ชฉ๋ก์„ steps๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์š”.

steps:
  - checkout   # ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ
  - run: npm install  # ์˜์กด์„ฑ ์„ค์น˜
  - run: npm test  # ํ…Œ์ŠคํŠธ ์‹คํ–‰

โœ”๏ธ Executors (์‹คํ–‰ ํ™˜๊ฒฝ)

 

CircleCI๋Š” Docker, ๊ฐ€์ƒ ๋จธ์‹ , MacOS ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ง€์›ํ•ด์š”.

executors:
  node-executor:
    docker:
      - image: circleci/node:18

3๏ธโƒฃ CircleCI์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (config.yml ๊ตฌ์กฐ)

 

CircleCI ์„ค์ • ํŒŒ์ผ .circleci/config.yml์€ YAML ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ๋ผ์š”.

๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

version: 2.1  # CircleCI ๋ฒ„์ „

jobs:
  build:
    docker:
      - image: circleci/node:18
    steps:
      - checkout
      - run: npm install
      - run: npm test

workflows:
  version: 2
  build-and-test:
    jobs:
      - build

โœ… ์ด ์„ค์ •์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€?

โœ”๏ธ version: 2.1 → CircleCI์˜ ์ตœ์‹  YAML ๋ฌธ๋ฒ• ์‚ฌ์šฉ

โœ”๏ธ jobsbuild ์ž‘์—…์„ ์ •์˜

โœ”๏ธ docker → ์‹คํ–‰ ํ™˜๊ฒฝ์„ Node.js 18๋กœ ์„ค์ •

โœ”๏ธ steps → ์ฝ”๋“œ ์ฒดํฌ์•„์›ƒ ํ›„ npm install, npm test ์‹คํ–‰

โœ”๏ธ workflowsbuild ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋„๋ก ์ •์˜

4๏ธโƒฃ Orbs, Steps, Matrix๋ž€?

 

โœ”๏ธ Orbs (์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋ธ”๋ก)

 

Orbs๋Š” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์„ค์ •์„ ํŒจํ‚ค์ง•ํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋ธ”๋ก์ด์—์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, node orb๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Node.js ์„ค์น˜๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”.

orbs:
  node: circleci/node@5.0.2

jobs:
  build:
    executor: node/default
    steps:
      - checkout
      - node/install-packages

โœ… Orbs๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?

โœ”๏ธ ๋ฐ˜๋ณต๋˜๋Š” ์„ค์ •์„ ์ค„์ด๊ณ , YAML ํŒŒ์ผ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

โœ”๏ธ Steps (์ž‘์—… ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„)

 

Steps๋Š” run, checkout, setup_remote_docker ๊ฐ™์€ ์ž‘์—…๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์œ„ ๋ช…๋ น์–ด์˜ˆ์š”.

steps:
  - checkout
  - run: echo "Hello, CircleCI!"
  - run: npm install
  - run: npm test

โœ… Steps๋Š” job ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋จ!

โœ”๏ธ Matrix (๋‹ค์ค‘ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ)

 

Matrix๋Š” ์—ฌ๋Ÿฌ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด์—์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, Node.js 16, 18, 20 ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.

jobs:
  test:
    docker:
      - image: circleci/node:<< matrix.node_version >>
    parameters:
      node_version:
        type: string
        default: "18"
    steps:
      - checkout
      - run: npm install
      - run: npm test

workflows:
  version: 2
  test-matrix:
    jobs:
      - test:
          matrix:
            parameters:
              node_version: ["16", "18", "20"]

โœ… ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด?

โœ”๏ธ Node.js 16, 18, 20์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ!

5๏ธโƒฃ CircleCI ๋Œ€์‹œ๋ณด๋“œ ํ™œ์šฉ๋ฒ•

 

CircleCI๋Š” ๊ฐ•๋ ฅํ•œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•ด์š”.

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ ์ง„ํ–‰ ์ƒํ™ฉ, ํ…Œ์ŠคํŠธ ์‹คํŒจ ์›์ธ, ๋ฐฐํฌ ์ด๋ ฅ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

 

โœ… ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์ƒํƒœ (์„ฑ๊ณต/์‹คํŒจ ๋กœ๊ทธ)

โœ… ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์ง„ํ–‰ ๊ณผ์ •

โœ… ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ์˜ ์ƒ์„ธ ๋กœ๊ทธ

 

๐Ÿ“Œ CircleCI ๋Œ€์‹œ๋ณด๋“œ ์ ‘์† ๋ฐฉ๋ฒ•:

1๏ธโƒฃ CircleCI ์›น์‚ฌ์ดํŠธ ์ ‘์†

2๏ธโƒฃ GitHub ๊ณ„์ •๊ณผ ์—ฐ๋™

3๏ธโƒฃ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์„ ํƒ ํ›„ ์‹คํ–‰ ์ƒํƒœ ํ™•์ธ

 

โœ… ์‹คํŒจ ์›์ธ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•:

โœ”๏ธ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ณ  stderr ๋ฉ”์‹œ์ง€ ํ™•์ธ

โœ”๏ธ ์‹คํ–‰ ํ™˜๊ฒฝ (docker, macos, machine) ์„ค์ • ๋ฌธ์ œ ์ฒดํฌ

โœ”๏ธ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ๊ฒ€ํ† 

6๏ธโƒฃ ์‹ค์ „ ์˜ˆ์ œ: React ํ”„๋กœ์ ํŠธ์— CircleCI ์ ์šฉํ•˜๊ธฐ

 

React ํ”„๋กœ์ ํŠธ์—์„œ CircleCI๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด config.yml์„ ์ž‘์„ฑํ•˜๋ฉด ๋ผ์š”.

version: 2.1

orbs:
  node: circleci/node@5.0.2

jobs:
  build-and-test:
    executor: node/default
    steps:
      - checkout
      - node/install-packages
      - run: npm test

workflows:
  version: 2
  main:
    jobs:
      - build-and-test

โœ… ์ด ์„ค์ •์€?

โœ”๏ธ React ํ”„๋กœ์ ํŠธ์—์„œ npm test๋ฅผ ์ž๋™ ์‹คํ–‰

โœ”๏ธ node orb๋ฅผ ํ™œ์šฉํ•ด Node.js ํ™˜๊ฒฝ ์„ค์ • ์ž๋™ํ™”

๐ŸŽฏ ๊ฒฐ๋ก : CircleCI๋ฅผ ํ™œ์šฉํ•œ CI/CD ๋งˆ์Šคํ„ฐํ•˜๊ธฐ!

 

๐Ÿ’ก CircleCI๋Š” Next.js, React, Express ๋“ฑ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ!

โœ”๏ธ ์ž๋™ํ™”๋œ ๋นŒ๋“œ & ๋ฐฐํฌ๋กœ ๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ

โœ”๏ธ Orbs์™€ Matrix๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ ์ตœ์ ํ™”

โœ”๏ธ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋ง

 

๐Ÿ”ฅ CircleCI๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋ฉด?

๊ฐœ๋ฐœ ์†๋„ ๐Ÿš€ UP!

๋ฐฐํฌ ์•ˆ์ •์„ฑ ๐ŸŽฏ UP!

ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ๐Ÿ›  UP!

 

๐ŸŒท ์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น! ๐ŸŒท ๐Ÿš€

728x90
๋ฐ˜์‘ํ˜•