๐ 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 ๋ฌธ๋ฒ ์ฌ์ฉ
โ๏ธ jobs → build ์์ ์ ์ ์
โ๏ธ docker → ์คํ ํ๊ฒฝ์ Node.js 18๋ก ์ค์
โ๏ธ steps → ์ฝ๋ ์ฒดํฌ์์ ํ npm install, npm test ์คํ
โ๏ธ workflows → build ์์ ์ ์คํํ๋๋ก ์ ์
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!
๐ท ์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ด ์๋น! ๐ท ๐
'Dev-ops' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ CI/CD ์ํฌํ๋ก์ฐ ์ต์ ํ (0) | 2025.03.23 |
---|---|
๐ Yarn Berry ์๋ฒฝ ์ ๋ฆฌ: ๊ฐ๋ ๋ถํฐ ์บ์ ๊ด๋ฆฌ๊น์ง! (0) | 2025.03.22 |
๐ Next.js ์ํฌํ๋ก์ฐ ์์ ์ ๋ณต (0) | 2025.03.20 |
๐ Testing Library ๊ณ์ด ์ํฌํ๋ก์ฐ ์์ ์ ๋ณต (0) | 2025.03.19 |
๐ CI/CD์์ React Testing Library ์ํฌํ๋ก์ฐ ์ดํด๋ณด๊ธฐ (0) | 2025.03.17 |