2022.08.08(Mon)
[TIL] Day72
[SEB FE] Day73
: 1λ² ν΄λ¦ / λͺ λ Ήμ΄ μ λ ₯μ ν΅ν΄ μ 체 λ°°ν¬ κ³Όμ μ μλμΌλ‘ μ§ννλ κ²
Human Error
λ°©μ§Human Error
? μ¬λμ΄ μλμ μΌλ‘ λ°°ν¬ κ³Όμ μ μ§ννλ μ€μ μκΈ°λ μ€μPipeline
? μμ€ μ½λ κ΄λ¦¬λΆν° μ€μ μλΉμ€λ‘μ λ°°ν¬ κ³Όμ μ μ°κ²°νλ ꡬ쑰Actions
)λ€ μν)Source
λ¨κ³: μ격 μ μ₯μ μμ€ μ½λμ λ³κ²½ μ¬ν λ°μ β μ΄λ₯Ό κ°μ§νκ³ λ€μ λ¨κ³λ‘ μ λ¬νλ μμ
μνBuild
λ¨κ³: μ λ¬λ°μ μ½λλ₯Ό μ»΄νμΌ, λΉλ, ν
μ€νΈνμ¬ κ°κ³΅ & μμ±λ κ²°κ³Όλ¬Όμ λ€μ λ¨κ³λ‘ μ λ¬νλ μμ
μνDeploy
λ¨κ³: μ λ¬λ°μ κ²°κ³Όλ¬Όμ μ€μ μλΉμ€μ λ°μνλ μμ
μνπ CI/CD Pipeline
CI
(μ§μμ ν΅ν©): Plan
β Code
β Build
β Test
βCD
(μ§μμ λ°°ν¬): Release
β Deploy
β Operate
β Plan
: ν ꡬμ±μμ΄ κ°μμ μμ μ μμ£Ό ν΅ν©νλ SW λ°©μ
βοΈ λͺ¨λ μ½λ λ³νλ₯Ό νλμ Repositoryμμ κ΄λ¦¬νλ κ²λΆν° μμ~!
βοΈ μ¦μ Pull Repust
& Merge
λ‘ μ½λλ₯Ό μμ£Ό ν΅ν© (κΈ°λ³Έμ μΈ ν
μ€νΈλ μλ κ°λ₯)
π κ° κ°λ°ν μ½λλ₯Ό μ΄λ₯Έ μμ μ μμ£Ό ν©μΉκ³ , μμ£Ό ν
μ€νΈ ν΄λ³Ό μ μμ!! β ν¨μ¨μ μΈ κ°λ° π
Code
: κ°λ°μκ° μ½λλ₯Ό μ½λ μ μ₯μμ PushBuild
: μ½λ μ μ₯μλ‘λΆν° μ½λλ₯Ό κ°μ Έμμ (Unit Test ν) BuildTest
): μ½λ Build κ²°κ³Όλ¬Όμ΄ λ€λ₯Έ μ»΄ν¬λνΈμ μ ν΅ν©λλμ§ νμΈβ Build
? κ°λ°μλ§ μ½μ μ μλ μμ€ μ½λλ₯Ό μ€ν κ°λ₯ν μ½λ/νλ‘κ·Έλ¨μΌλ‘ λ³ννλ κ³Όμ
β λ²λ€λ§
? λΈλΌμ°μ κ° μμ€ μ½λλ₯Ό λ μ μ½μ μ μκ² λμμ€μΌλ‘, λΉλ κ³Όμ μ€ νλ!
Repository
μμ±git remote add [myRepo] [μλ‘μ΄ Repository URL]
git push myRepo [branch name]
: CI κ³Όμ μ΄ μνν λλλ©΄ λ°λ‘ κ³ κ°μκ² λ°°ν¬νλ κ² (ex- Github Page
)
Release
: BuildκΉμ§ λͺ¨λ μ€λΉ μλ£! β μ΄λ€ κΈ°λ₯μ΄ κ°λ°λμλμ§ λΉμ¦λμ€ κ΄κ³μλ€κ³Ό μ΄μΌκΈ° λλλ λ¨κ³Deploy
: μ€μ λ°°ν¬ λ¨κ³Operation
: λ°°ν¬λ SWλ₯Ό μ€μ μ΄μ©νλ κ³Όμ (κ³ κ° νΌλλ°±μ λ°μ κΈ°νμ λ°μ): Front-end λ°°ν¬λ₯Ό μλννκ³ , κ·Έ μΈ μ¬λ¬ μΆκ° κΈ°λ₯μ μ 곡νλ λ°°ν¬ νλ μμν¬
Vercel
νμκ°μ
(Githubκ³Ό μ°λ)
New Project λ²νΌ λλ₯΄κ³ Add Github Account
ν΄λ¦ (μ΅μ΄ μμ±μ λ§κ³ λ€μ λ μμ±μ)
Configure
λ²νΌ ν΄λ¦ν΄μ Repository access
λΆλΆ μ°Ύμ ν, λ°°ν¬νκ³ μ νλ λ ν¬μ§ν 리 μ ν
Import
ν΄λ¦
Deploy
ν΄λ¦μ’ κΈ°λ€λ¦¬λ©΄ λ°°ν¬ λ§ν¬ μ§μβ¨
π https://react-express-crud-project.vercel.app/
β index.test.js
μ§λ³΄κΈ°
// index.test.js
// test ν΅κ³Όμμ λ°°ν¬λλλ‘ testcase μμ±
import { render } from "@testing-library/react";
import "@testing-library/jest-dom/extend-expect";
import App from "./App";
describe("Bare minimum requirement", () => {
describe("App.js μ»΄ν¬λνΈ μ λ ν
μ€νΈ", () => {
test('H1 μ리먼νΈμ "My Agora States" ν
μ€νΈ λ
Έλκ° μμ΄μΌ ν©λλ€.', () => {
const { container } = render(<App />);
const h1 = container.querySelector("h1");
expect(h1.textContent).toBe("My Agora States"); // h1 νκ·Έ μμ λ΄μ©μ΄ μ΄κ±°λ©΄ testκ° ν΅κ³Όλλλ‘~!
});
});
});
β¨ Vercelμμ Deploy νμ Build logλ₯Ό νμΈν΄λ³΄λ©΄ μμ test codeκ° ν΅κ³Όνλκ±Έ νμΈ κ°λ₯!