Jieunny์ ๋ธ๋ก๊ทธ
S4) Unit 10. [Deploy]Github Action & Proxy ๋ณธ๋ฌธ
๐ฃ Github Action
๐ญ. Github Actions ๋?
โ๏ธ Github๊ฐ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ ์ ์๋ CI/CD ํ๋ซํผ
โฐ ๋ ํฌ์งํ ๋ฆฌ์์ Pull Request ๋ push ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก GitHub ์์ ์ํฌํ๋ก๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
ใด ์ํฌํ๋ก : ํ๋ ์ด์์ ์์ ์ด ์คํ๋๋ ์๋ํ ํ๋ก์ธ์ค๋ก, ๊ฐ ์์ ์ ์์ฒด ๊ฐ์ ๋จธ์ ๋๋ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ
ใด .yml (๋๋ .yaml ) ํ์ผ์ ์ํด ๊ตฌ์ฑ๋๋ฉฐ, ํ ์คํธ, ๋ฐฐํฌ ๋ฑ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฌ๋ฌ๊ฐ์ ์ํฌํ๋ก๋ ๋ง๋ค ์ ์๊ณ ์์ฑ๋ ์ํฌํ๋ก๋ .github/workflows ๋๋ ํ ๋ฆฌ ๋ฐ์ ์์นํ๋ค.
โฐ ๋น๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ Github Actions๊ฐ ์๋ํ ๋์ ์ฉ๋๊ณผ ์๊ฐ์ด ์ ํ๋์ด์์ผ๋ฉฐ ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๐ฎ. YAML(Yet Another Markup Language) ์ด๋?
โ๏ธ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ์ธ์ด
โฐ ํ์ผ๋ก ์์ฑ์ ํ์ฅ์๋ .yaml ํน์ .yml ๋ฅผ ๊ฐ์ง๋ค.
๐ฏ. JSON vs 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
// JSON ํ์ผ
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
}
]
}
YAML | JSON | |
๊ณตํต์ | - key-value ํํ๋ก ์์ฑ๋ ํ์ผ - ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค |
|
์ฐจ์ด์ | - "" ์์ด๋ ๋ฌธ์์ด ์์ฑ์ด ๊ฐ๋ฅํ๋ค. - {} ํํ๋ก ๊ฐ์ธ์ค ํ์๊ฐ ์๋ค. - ์ฃผ์์ ์์ฑํ ์ ์๋ค. - JSON์ ์์ ํธํ ๊ฒฉ์ผ๋ก ๊ธฐ์กด json๋ฌธ์๋ฅผ ๊ทธ๋๋ก yaml๋ก ์ฌ์ฉํ๊ฑฐ๋ ์ํ๋ ๋ถ๋ถ๋ง ์์ ํ ์ ์๋ค. - yaml์ json์ผ๋ก ๋ณํํด ์ฌ์ฉํ ์๋ ์๋ค. |
- {} ํํ๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค. - ์ฃผ์์ ์์ฑํ ์ ์๋ค. |
๐ฐ. YAML ๋ฌธ๋ฒ
1๏ธโฃ ์ฃผ์ & ๋ฌธ์์ ์์๊ณผ ๋
#์ด๋ฐ ์์ผ๋ก ์ฃผ์์ ์์ฑํ ์ ์์ต๋๋ค.
--- #๋ฌธ์ ์์
#์ด ์ฌ์ด์ ๋ด์ฉ์ด ๋ค์ด๊ฐ๋๋ค.
... #๋ฌธ์ ๋
2๏ธโฃ ๊ธฐ๋ณธ ํํ
โฐ key: value ์ด๋ฉฐ, : ๋ค์์๋ ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ผํ๋ค.
key: value
3๏ธโฃ ์๋ฃํ
โฐ int, string, boolean, ๋ฆฌ์คํธ, ๋งคํ์ ์ง์ํ๋ค.
#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]์ ๊ฐ์ต๋๋ค.
4๏ธโฃ ๊ฐ์ฒด
โฐ key ์์ฑ ํ ๋ ์นธ์ ๋ค์ฌ์จ์ key-value ํํ๋ก ์์ฑ์ ํด์ฃผ๊ฑฐ๋, key๋ฅผ ์์ฑ ํ ์ค๊ดํธ({})๋ก ํ ๋ฒ ๋ฌถ๊ณ key-value ํํ๋ก ์์ฑ
key:
key: value
key: value
#๋๋ ์ด๋ ๊ฒ๋ ์์ฑํฉ๋๋ค. ๊ฐ๋
์ฑ์ ์ํด ์ฌ์ฉํฉ๋๋ค.
key: {
key: value,
key: value
}
5๏ธโฃ 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.
6๏ธโฃ ๋ฌธ์์ด ๋ฐ์ดํ
โฐ key-value ์์์ value์ :๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ๋ ๋ฐ๋์ ๋ฐ์ดํ๊ฐ ํ์ํ๋ค.
# error๊ฐ ๋ฉ๋๋ค.
windows_drive: c:
# ์ด๋ ๊ฒ ์จ์ผ ํฉ๋๋ค.
windows_drive: "c:"
windows_drive: 'c:'
๐ฑ. YAML ์ฌ์ฉ๋ฒ ๋ฐ ์ค์ ์ฌ์ฉ ์ฌ๋ก
โ๏ธ configure ํ์ผ ๋ฑ ์ค์ ํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ข์ ์ธ์ด
โฐ spring boot, github action ๋ฑ ๋ค์ํ CI/CD ํด์ด๋ ํ๋ ์์ํฌ์์ ์ฌ์ฉ๋๋ค.
โฐ YAML์ ์ค์ ๋ก ์ฌ์ฉํ๊ณ ์๋ ํ๋ ์์ํฌ : ์ฟ ๋ฒ๋คํฐ์ค
๐ฃ Proxy
๐ญ. Proxy๋?
โ๏ธ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํน์ Webpack Dev Server์์ ์ ๊ณตํ๋ CORS ์ ์ฑ ์ ์ฐํํ ์ ์๋ ๊ธฐ๋ฅ
โฐ React ์ฑ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด API๋ฅผ ์์ฒญํ ๋, proxy๋ฅผ ํตํด ๋ฐฑ์๋ ์๋ฒ๋ก ์์ฒญ์ ์ฐํํ์ฌ ๋ณด๋ธ๋ค => ๋ฐฑ์๋ ์๋ฒ๋ ์๋ต์ React ์ฑ์ผ๋ก ๋ณด๋ด๊ณ , React ์ฑ์ ๋ฐ์ ์๋ต์ ๋ฐฑ์๋ ์๋ฒ ๋์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๋ฌํ๋ค(์ถ์ฒ๊ฐ ๊ฐ์์ง๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ ์ด ์ฌ์ค์ ๋์น ์ฑ์ง ๋ชปํ๊ณ ํ์ฉํ๊ฒ ๋๋ค)
๐ญ. Proxy ์ฌ์ฉ๋ฒ
1๏ธโฃ webpack dev server proxy ์์ ์ ๊ณตํ๋ proxy ๊ธฐ๋ฅ ์ฌ์ฉ
โฐ ๋ธ๋ผ์ฐ์ API๋ฅผ ์์ฒญํ ๋ ๋ฐฑ์๋ ์๋ฒ์ ์ง์ ์ ์ผ๋ก ์์ฒญ์ ํ์ง ์๊ณ , ํ์ฌ ๊ฐ๋ฐ์๋ฒ์ ์ฃผ์๋ก ์ฐํ ์์ฒญ์ ํ๋ค.
โฐ ์นํฉ ๊ฐ๋ฐ ์๋ฒ์์ ํด๋น ์์ฒญ์ ๋ฐ์ ๊ทธ๋๋ก ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋ฌํ๊ณ , ๋ฐฑ์๋ ์๋ฒ์์ ์๋ตํ ๋ด์ฉ์ ๋ค์ ๋ธ๋ผ์ฐ์ ์ชฝ์ผ๋ก ๋ฐํํ๋ค.
โฐ CRA๋ก ๋ง๋ ๋ฆฌ์กํธ ํ๋ก์ ํธ์์๋ package.json์ proxy๊ฐ์ ์ค์ ํ์ฌ ์ ์ฉํ ์ ์๋ค.
...
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"proxy" : "์ฐํํ API ์ฃผ์"
}
export async function getAllfetch() {
const response = await fetch('์ฐํํ api์ฃผ์/params');
.then(() => {
...
})
}
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}
โฐ ๊ธฐ์กด์ fetch, axios๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋ถ๋ถ์์ ๋๋ฉ์ธ ๋ถ๋ถ์ ์ ๊ฑฐํ๋ค.
๐ญ. React Proxy ์ฌ์ฉ๋ฒ
1๏ธโฃ http-proxy-middleware ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install http-proxy-middleware --save
2๏ธโฃ srcํ์ผ ์์ setupProxy.js ํ์ผ์ ์์ฑํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋ถ๋ฌ์จ ํ ์์ฑํ๋ค.
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api', //proxy๊ฐ ํ์ํ path prameter๋ฅผ ์
๋ ฅํฉ๋๋ค.
createProxyMiddleware({
target: 'http://localhost:5000', //ํ๊ฒ์ด ๋๋ api url๋ฅผ ์
๋ ฅํฉ๋๋ค.
changeOrigin: true, //๋์ ์๋ฒ ๊ตฌ์ฑ์ ๋ฐ๋ผ ํธ์คํธ ํค๋๊ฐ ๋ณ๊ฒฝ๋๋๋ก ์ค์ ํ๋ ๋ถ๋ถ์
๋๋ค.
})
);
};
3๏ธโฃ ๊ธฐ์กด์ fetch, ํน์ axios๋ฅผ ํตํด ์์ฒญํ๋ ๋ถ๋ถ์์ ๋๋ฉ์ธ ๋ถ๋ถ์ ์ ๊ฑฐํ๋ค.
export async function getAllfetch() {
const response = await fetch('์ฐํํ api์ฃผ์/params');
.then(() => {
...
})
}
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S4) Unit 11. [์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ] Algorithm ์ ํ (0) | 2023.04.05 |
---|---|
S4) Unit 11. [์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ] ์๊ณ ๋ฆฌ์ฆ & ์๊ฐ ๋ณต์ก๋ & ๊ณต๊ฐ ๋ณต์ก๋ (0) | 2023.04.05 |
S4) Unit 10. [Deploy]๊ฐ๋ฐ ํ๋ก์ธ์ค (0) | 2023.04.03 |
S4) Unit 9. [Deploy]Amazon Web Service (0) | 2023.03.31 |
S4) Unit 8. [์ต์ ํ]์บ์ & Tree Shaking & Lighthouse (0) | 2023.03.30 |