(SEB_FE) Section4 Unit7 Github Action & YAML

PYMยท2023๋…„ 6์›” 5์ผ
0

(SEB_FE) SECTION4

๋ชฉ๋ก ๋ณด๊ธฐ
23/24

๐Ÿ’šGithub Actions์ด๋ž€?

Github Actions์ด๋ž€ Github๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ์ด๋‹ค.

๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ Pull Request ๋‚˜ push ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ GitHub ์ž‘์—… ์›Œํฌํ”Œ๋กœ์šฐ(Workflow)๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๋กœ, ๊ฐ ์ž‘์—…์€ ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋œ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ๋Š” .yml (ํ˜น์€ .yaml ) ํŒŒ์ผ(์–ŒํŒŒ์ผ์ด๋ผ๊ณ  ์ฝ๋Š”๋‹ค)์— ์˜ํ•ด ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” .github/workflows ๋””๋ ‰ํ† ๋ฆฌ ์ดํ•˜์— ์œ„์น˜ํ•œ๋‹ค.

๋น„๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๊ฒฝ์šฐ Github Actions๊ฐ€ ์ž‘๋™ํ•  ๋•Œ์˜ ์šฉ๋Ÿ‰๊ณผ ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ’šYAML

๐Ÿฆ–YAML์ด๋ž€?

Yet Another Markup Language์˜ ์•ฝ์ž๋กœ, ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ์–ธ์–ด๋ฅผ ์˜๋ฏธ

YAML์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘์—์„œ๋„ ์ธ๊ธฐ๊ฐ€ ๋†’๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
YAML์€ ๊ทธ ์œ ์—ฐ์„ฑ๊ณผ ์ ‘๊ทผ์„ฑ์œผ๋กœ ์ธํ•ด ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿฆ–YAML ํŒŒ์ผ ์˜ˆ์‹œ

name: Bare Minimum Requirements
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Bare Minimum Requirements
        uses: actions/setup-node@v1
        with:
          node-version: '16'
      - run: npm install
      - run: npm test
  • YAML ํŒŒ์ผ์€ "" (ํฐ๋”ฐ์˜ดํ‘œ, double quotation marks) ์—†์ด ๋ฌธ์ž์—ด ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด, ์„ค์ •์„ ์œ„ํ•œ ์ŠคํŽ™์ด๋‚˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๋“ฑ์ด JSON ํŒŒ์ผ์— ๋น„ํ•ด ํ•œ๋ˆˆ์— ๋“ค์–ด์˜จ๋‹ค

  • ๋˜ํ•œ JSON ํŒŒ์ผ์ฒ˜๋Ÿผ {} ํ˜•ํƒœ๋กœ ๊ฐ์‹ธ์ค„ ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Šค์ฝ”ํ”„์˜ ์••๋ฐ•(์ž˜๋ชป ์“ฐ๋ฉด ์ผ์ผ์ด ์–ด๋””๊ฐ€ ์ฒ˜์Œ์ด๊ณ  ๋์ธ์ง€ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋“ฑ)์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜๋„ ์žˆ๋‹ค.

  • YAML ํŒŒ์ผ์€ JSON ํŒŒ์ผ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ฃผ์„์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ๊ต‰์žฅํ•œ ์ด์ ์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค. (์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ˆ˜์›”)

  • YAML์€ JSON์˜ ์ƒ์œ„ ํ˜ธํ™˜ ๊ฒฉ์ด๋ฏ€๋กœ, ๊ธฐ์กด json๋ฌธ์„œ๋ฅผ ๊ทธ๋Œ€๋กœ yamlํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ์†๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ yaml์„ json์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ๋„ ์žฅ์ ์ด๋‹ค.

๐Ÿ’šYAML ๋ฌธ๋ฒ•

๐Ÿฆ–์ฃผ์„, ๋ฌธ์„œ์˜ ์‹œ์ž‘๊ณผ ๋

# : ์ฃผ์„

--- : ๋ฌธ์„œ์˜ ์‹œ์ž‘ (์„ ํƒ์‚ฌํ•ญ)

... : ๋ฌธ์„œ์˜ ๋ (์„ ํƒ์‚ฌํ•ญ)

๋“ค์—ฌ์“ฐ๊ธฐ : ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 2์นธ ๋˜๋Š” 4์นธ์„ ์ง€์›. ๋ณดํ†ต 2์นธ์”ฉ ๋“ค์—ฌ์“ฐ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ. ํƒญ ํ‚ค๊ฐ€ ์•„๋‹Œ ์ŠคํŽ˜์ด์Šค ํ‚ค๋กœ!

๐Ÿฆ–๊ธฐ๋ณธ ํ‘œํ˜„

key: value์ด๋ฉฐ, : ๋‹ค์Œ์—๋Š” ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์™€์•ผ ํ•œ๋‹ค.

๐Ÿฆ–์ž๋ฃŒํ˜•

int, string, boolean, ๋ฆฌ์ŠคํŠธ, ๋งคํ•‘์„ ์ง€์›ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ int์™€ string ํƒ€์ž…์€ ์Šค์นผ๋ผ(Scalar)๋ผ ๋ถ€๋ฅด๊ณ , ๋ฐฐ์—ด ํ˜น์€ ๋ฆฌ์ŠคํŠธ๋Š” ์‹œํ€€์Šค(Sequence)๋ผ ๋ถ€๋ฅธ๋‹ค.

  • ๋งคํ•‘์—๋Š” ๊ธฐ๋ณธ ํ‘œํ˜„์ธ key-value ์Œ ๋ฐ hash, dictionary๊ฐ€ ํฌํ•จ๋œ๋‹ค.

#int(์ˆซ์ž)
int_type: 1

#string(๋ฌธ์ž์—ด)
string_type: "1"

#blooean(์ฐธ/๊ฑฐ์ง“)
boolean_true_type: true
boolean_false_type: false

#์ด์™ธ์— yes, no๋กœ ์ž‘์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
yaml_easy: yes
yaml_difficult: no

#๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด ํ˜•ํƒœ)
person:
  name: Chungsub Kim
  job: Developer
  skills: 
    - docker
    - kubernetes
  # JSON ํ˜•์‹์˜ "skill" : [docker, kubernetes]์™€ ๊ฐ™๋‹ค.

๐Ÿฆ–๊ฐ์ฒด

๊ฐ์ฒด ํ‘œํ˜„์€ key ์ž‘์„ฑ ํ›„ ๋‘ ์นธ์„ ๋“ค์—ฌ์จ์„œ key-value ํ˜•ํƒœ๋กœ ์ž‘์„ฑ์„ ํ•ด์ฃผ๊ฑฐ๋‚˜, key๋ฅผ ์ž‘์„ฑ ํ›„ ์ค‘๊ด„ํ˜ธ({})๋กœ ํ•œ ๋ฒˆ ๋ฌถ๊ณ  key-value ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

key: 
  key: value
  key: value

#๋˜๋Š” ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค. 
key: {
  key: value,
  key: value
}

๐Ÿฆ–Text

์ค„๋ฐ”๊ฟˆ ํ‘œํ˜„(|)๊ณผ ์ค„๋ฐ”๊ฟˆ ๋ฌด์‹œ ํ‘œํ˜„(>)์ด ์žˆ๋‹ค.

# |๋Š” ์ค„๋ฐ”๊ฟˆ ํ‘œํ˜„.
# JSON์—์„œ๋Š” "comment_line_break": "Hello codestates.\nIm kimcoding.\n"
comment_line_break: |
  Hello codestates.
  Im kimcoding.

# >๋Š” ์ค„๋ฐ”๊ฟˆ ๋ฌด์‹œ ํ‘œํ˜„.
# JSON์—์„œ๋Š” "comment_single_line": "Hello world my first coding."
comment_single_line: >
  Hello world
  my first coding.

๐Ÿฆ–๋ฌธ์ž์—ด ๋”ฐ์˜ดํ‘œ

key-value ์Œ์—์„œ value์— :๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ ๋”ฐ์˜ดํ‘œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

# error
windows_drive: c:

# ์ด๋ ‡๊ฒŒ ์จ์•ผ ํ•œ๋‹ค.
windows_drive: "c:"
windows_drive: 'c:'
profile
๋ชฉํ‘œ๋Š” "ํ•จ๊ป˜ ์ผํ•˜๊ณ  ์‹ถ์€, ํ•จ๊ป˜ ์ผํ•ด์„œ ์ข‹์€" Front-end ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€