V2 CI Pipeline.md - 100-hours-a-week/KTB4-17th-wiki GitHub Wiki
v2 ์ง์์ ํตํฉ(CI) ํ์ดํ๋ผ์ธ ์ค๊ณ
1. v1 CI์ ํ๊ณ
2.1 ์๋ ํ ์คํธ ์์กด
์๋ ํ ์คํธ์ ํ๊ณ: v1 CI์๋ ๋ณ๋์ ์๋ํ ํ ์คํธ๊ฐ ์์ด ๊ธฐ๋ฅ ๊ฒ์ฆ์ ์๋ ํ ์คํธ์ ์์กดํ๊ณ ์๋ค. ์๋ ํ ์คํธ๋ ๋์ผํ ์๋๋ฆฌ์ค๋ฅผ ๋ฐ๋ณตํ๊ธฐ ์ด๋ ต๊ณ ์ฌ๋์ด ๊ฒฐ๊ณผ๋ฅผ ์ง์ ํ์ธํ๋ ๊ณผ์ ์์ ๋ถ์ฃผ์๋ก ์ค๋ฅ๋ฅผ ๋์น ๊ฐ๋ฅ์ฑ์ด ์๋ค. ์๋น์ค ๊ท๋ชจ์ ๊ธฐ๋ฅ์ด ์ปค์ง์๋ก ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๊ฒ์ฆํ๊ธฐ ์ด๋ ต๋ค
1.2 ์๋ํ๋ ์คํ ๊ธฐ๋ฐ ํ ์คํธ ๋ถ์ฌ
๋ฐํ์ ํ ์คํธ ๋ถ์ฌ : v1์์๋ ์ ์ฒด ๊ฐ๋ฐ์ 70%๋ฅผ 2์ฃผ๋ง์ ์์ฑ ํด์ผํ๋ ๋งํผ ๊ฐ๋ฐ ๋ณผ๋ฅจ์ด ์ปค์ ๋ณ๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ์ ์ ์ธ ํ ์คํธ๋ง ์งํํ๋ค. ํ ์คํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๋ ์์ ์ด ๋ฆ๋ค๋ ํ๊ณ๊ฐ ์๋ค.
3. v2 CI์ ๋ชฉ์
v2 CI๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณํฉ ์ ์ ์๋์ผ๋ก ๊ฒ์ฆํด ์ฅ์ ๋ฅผ ์ฌ์ ์ ์๋ฐฉํ๊ณ ์์ ์ ์ธ ์ฝ๋ ๋ณํฉ์ ์ง์ํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค.
- ์ ์ ๊ฒ์ฌ, ๋จ์ ํ ์คํธ, ํต์ฌ API ํ ์คํธ์ ๋น๋๋ฅผ ์๋ํํ๋ค.
- ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๊นจ์ง๋ ํ๊ท ๊ฒฐํจ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋ค.
- ๋ชจ๋ ํ์ ๊ฒ์ฌ๋ฅผ ํต๊ณผํ ์ฝ๋๋ง dev ๋ธ๋์น์ ๋ณํฉํ๋ค.
- ๊ฐ์ธ์ ์๋ ํ์ธ์ ์์กดํ๋ ๊ฒ์ฆ ์ ์ฐจ๋ฅผ ๋ฐ๋ณต ๊ฐ๋ฅํ ํ์ดํ๋ผ์ธ์ผ๋ก ์ ํํ๋ค.
4. ๋ธ๋์น ์ ๋ต๊ณผ CI ์คํ ์์
4.1 ๋ธ๋์น ์ญํ
mainโdevโfeat/* ๋ธ๋์น ์ ๋ต์ ์ฌ์ฉํ๋ค.
| ๋ธ๋์น | ์ญํ |
|---|---|
main |
๋ฐฐํฌ ๊ฐ๋ฅํ ์์ ๋ฒ์ ๊ด๋ฆฌ |
dev |
๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ํตํฉํ๊ณ ๊ฒ์ฆํ๋ ๋ธ๋์น |
feat/* |
๊ธฐ๋ฅ ๋จ์ ๊ฐ๋ฐ ๋ธ๋์น |
4.2 CI ํธ๋ฆฌ๊ฑฐ
CI๋ dev ๋ธ๋์น๋ฅผ ๋์์ผ๋ก ํ๋ Pull Request๊ฐ ์์ฑ๋๊ฑฐ๋ ์๋ก์ด ์ปค๋ฐ์ผ๋ก ๊ฐฑ์ ๋ ๋ ์คํํ๋ค. GitHub Actions์ pull_request ์ด๋ฒคํธ์ ๋์ ๋ธ๋์น ํํฐ๋ฅผ ์ฌ์ฉํ๋ค.
feat/* ๋ธ๋์น์ push
โ
dev ๋์ Pull Request ์์ฑ
โ
CI ์คํ โโโโโโโโโโโโโโ
์ฝ๋ ๋ฆฌ๋ทฐ โโโโโค ๋ณํ
โ
์ต์ ์ปค๋ฐ์ CI ํต๊ณผ + ๋ฆฌ๋ทฐ์ด 1๋ช
์ด์ ์น์ธ
โ
dev ๋ธ๋์น์ ๋ณํฉ
โ
dev์์ main์ผ๋ก
CI ํต๊ณผ์ ๋ฆฌ๋ทฐ์ด ์น์ธ์ ๋๋ค ํต๊ณผํด์ผ ๋ณํฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- Pull Request๋ฅผ ํตํ ๋ณํฉ๋ง ํ์ฉ
- ํ์ CI ์ํ ๊ฒ์ฌ ํต๊ณผ
- ๋ฆฌ๋ทฐ์ด 1๋ช ์ด์์ ์น์ธ (pr ์ฌ๋ฆฐ ์ฌ๋์ ์ ์ธํ๊ณ )
- ์ ์ปค๋ฐ์ด ์ถ๊ฐ๋๋ฉด ์ต์ ์ปค๋ฐ์ ๊ธฐ์ค์ผ๋ก CI ์ฌ์คํ
- ํ์ํ๋ฉด ์ ์ปค๋ฐ push ์ ๊ธฐ์กด ๋ฆฌ๋ทฐ ์น์ธ ํด์
5. CI ๋๊ตฌ ์ ์ : GitHub Actions
v1์์๋ ํ์ด GitHub Actions ์ธ์ CI/CD ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๊ฒฝํ์ด ์์๋ค. ์ถ๊ฐ ๋๊ตฌ ๋์ ์ ํ์ํ ํ์ต ์๊ฐ๊ณผ ์ด์ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด GitHub Actions๋ฅผ ์ ํํ์ผ๋ฉฐ v2์์๋ ๊ธฐ์กด ๋๊ตฌ๋ฅผ ์ ์งํ๋ค.
v2์ CI๋ Pull Request ๊ธฐ๋ฐ ์ ์ ๊ฒ์ฌ ๋ฟ๋ง ์๋๋ผ ํ ์คํธ์ ๋น๋๊ฐ ์ค์ฌ์ด๋ฏ๋ก GitHub Actions๋ง์ผ๋ก ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์๋ค. ๋ํ GitHub ์ ์ฅ์, Pull Request์ ๋ธ๋์น ๋ณดํธ ๊ท์น์ ๋ณ๋ ์ฐ๋ ์์ ์์ด ํจ๊ป ๊ด๋ฆฌํ ์ ์๋ค.
6. ํ ์คํธ
v1์ ์ ์ ๊ฒ์ฌ๋ ๊ธฐ์กด ์ค์ ์ ์ ์งํ๊ณ ์คํ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์ถ๊ฐํด ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ๋ฐ์ํ๋ ๊ฒฐํจ์ ๋ณํฉ ์ ์ ํ์ธํ๋ค.
6.1 Frontend
์ ์ ๊ฒ์ฌ โ ๋จ์ ํ
์คํธ โ ๋น๋
- ์ ์ ๊ฒ์ฌ: ๊ธฐ์กด lint, ํ์ ๊ฒ์ฌ์ ์ฝ๋ ์คํ์ผ ๊ฒ์ฌ๋ฅผ ์ ์งํ๋ค.
- ๋จ์ ํ ์คํธ: JavaScript ํจ์์ ํด๋ฆญ,์ ๋ ฅ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๋ค.
frontend์์ API ํ ์คํธ ์ ์ธ ์ด์
Frontend์ Backend๊ฐ ๋ณ๋ ์ ์ฅ์๋ก ๋ถ๋ฆฌ๋ ์ํ์์ ๋ฐฑ์๋ ์๋ฒ ์์ด ๊ฐ์ง API ์๋ต๋ง ์ฌ์ฉํ๋ฉด ํ๋ก ํธ์๋์ ์๋ต ์ฒ๋ฆฌ ๋ก์ง์ ํ์ธํ ์ ์์ง๋ง, ์ค์ API ์ฐ๋๊น์ง ๋ณด์ฅํ ์๋ ์๋ค. ๋ฐ๋ผ์ v2 Frontend CI์์๋ API ํ ์คํธ๋ฅผ ์ ์ธํ๊ณ ์ ์ ๊ฒ์ฌ์ ๋จ์ ํ ์คํธ์ ์ง์คํ๋ค.
6.2 Backend ๋ฐ AI
์ ์ ๊ฒ์ฌ โ ๋จ์ ํ
์คํธ โ ํ
์คํธ DB ์คํ โ ํต์ฌ API ํ
์คํธ โ ๋น๋
Workflow: Backend CI
โโ Job: backend-ci
โโ Step 1. ์ ์ ๊ฒ์ฌ
โ โ
โโ Step 2. ๋จ์ ํ
์คํธ
โ โ
โโ Step 3. ํ
์คํธ DB ๊ธฐ๋
โ โ
โโ Step 4. ํต์ฌ API ํ
์คํธ
โ โ
โโ Step 5. ๋น๋
GitHub Actions์ ๋์ผํ Job ์์ ์๋ Step์ ์์์ ์๋๋ก ์์ฐจ ์คํ๋๋ค. ํ ์คํธ DB๊ฐ ์ค๋น๋ ์ดํ์๋ง ํต์ฌ API ํ ์คํธ๋ฅผ ์คํํ๋ฉฐ ์ ๋จ๊ณ๊ฐ ์คํจํ๋ฉด ์ดํ ๋จ๊ณ๋ ์คํํ์ง ์๊ณ CI๋ฅผ ์คํจ ์ฒ๋ฆฌํ๋ค. ํ ์คํธ DB๋ Testcontainers๊ฐ ์ ๊ณตํ๋ MySQL ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฅผ ํตํด ์ด์ DB์ ๋ถ๋ฆฌ๋ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ ํธ๋์ญ์ ์ ๊ฒ์ฆํ๋ค.
6.3 ๋จ์ ํ ์คํธ
frontend :Vitest,jsdom
- Vitest: JavaScript ๋จ์ ํ ์คํธ ์คํ
- jsdom: Node.js ๊ธฐ๋ฐ CI ํ๊ฒฝ์์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๋ง๋ค์ด์ ์์ ์กฐํ, ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ํ๋ฉด ๋ด์ฉ ๋ณ๊ฒฝ ๊ฒ์ฆํจ
Java: JUnit 5
Backend ๋จ์ ํ ์คํธ์๋ JUnit 5๋ฅผ ์ฌ์ฉํ๋ค. JUnit 5๋ ๊ธฐ์กด Gradle ๋น๋์ GitHub Actions์์ ๋ฐ๋ก ์คํํ ์ ์๊ณ Spring Boot ํ ์คํธ ์ํ๊ณ์๋ ์ฐ๋๋๋ค.
Python: pytest
LLM์ ๋ต๋ณ ํ์ง์ด ํ ์คํธ์ ๋ชฉ์ ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ค์ ์ธ๋ถ LLM api๋ฅผ ์ง์ ๋ถ๋ฅด์ง ์๊ณ ๊ฐ์ง ์ฌ์ฉ์๋ฅผ ๋ง๋ค์ด ํญ์ ๋๊ฐ์ ์๋ต์ด ์ค๋๋ก ํด์ผํ๋ค. ์ด๋ fixture๋ผ๋ ํจ์๋ก ๊ฐ๋จํ๊ฒ ๊ฐ์ง ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ง๋ค ์ ์์ด์ ์ฌ์ฉํ ์์ ์ด๋ค.
6.4 ํต์ฌ API ํ ์คํธ
Backend
[ํ ์คํธ ๋๊ตฌ]
- JUnit 5: ํ ์คํธ ์คํ๊ณผ ๊ฒฐ๊ณผ ๊ฒ์ฆ
- Spring Boot Test: ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ํฌํจํ ํตํฉ ํ ์คํธ
- MockMvc: ์ค์ ๋คํธ์ํฌ ํฌํธ๋ฅผ ์ด์ง ์๊ณ Spring MVC ๊ณ์ธต์ ๊ฐ์ง HTTP ์์ฒญ์ ์ ์กํด์ค๋ค
- Testcontainers MySQL: ํ ์คํธ์ฉ MySQL ์ปจํ ์ด๋ ์ ๊ณตํ๋ค.
[restapi]
- ๋ก๊ทธ์ธ
- ์ ์ฒด ํ๋กํ ์กฐํ
- ์์ธ ํ๋กํ ์กฐํ
- ์ข์์ ๋ฑ๋ก
- ๋งค์นญ ์์ฒญ
[์ฑํ ๋ฉ์์ง]
- ๋ฉ์์ง ์ ์ฅ
- ๋ฉ์์ง ์กฐํ
- ์ฑํ ๋ฐฉ ์ฐธ์ฌ์๋ง ๋ฉ์์ง๋ฅผ ์ ์ก๊ฐ๋ฅํ์ง.
AI
[ํ ์คํธ ๋๊ตฌ]
-
pytest: ํ ์คํธ ์คํ, ํ ์คํธ ์ผ์ด์ค ๊ด๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฒ์ฆ (fixture)
-
FastAPI TestClient: ์ค์ ๋คํธ์ํฌ ํฌํธ๋ฅผ ์ด์ง ์๊ณ Spring MVC ๊ณ์ธต์ ๊ฐ์ง HTTP ์์ฒญ์ ์ ์กํด์ค๋ค
-
mock: ์ธ๋ถ LLM API ํธ์ถ์ ์์ธก ๊ฐ๋ฅํ ๊ฐ์ง ์๋ต์ผ๋ก ๋์ฒด
-
AIโ์ฌ์ฉ์ ์ฐ์ต ๋ํ
-
AI ๊ฐ ๋ํ
-
์ฌ์ฃผ ๋ถ์
-
๊ด์ ๋ถ์
Frontend, Backend, AI๊ฐ ๊ฐ๊ฐ ๋ณ๋ ์ ์ฅ์๋ก ๊ด๋ฆฌ๋๊ณ ์์ด ์ ์ฒด ์ฌ์ฉ์ ํ๋ฆ์ ๊ฒ์ฆํ๋ ค๋ฉด ์ธ ์๋น์ค๋ฅผ ๋์ผ ๋ฒ์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ์ฐ๊ฒฐํ๋ ๋ณ๋์ ํตํฉ ํ ์คํธ ํ๊ฒฝ์ด ํ์ํ๋ค. v2์์๋ ์ผ์ ๊ณผ ๊ตฌ์ถ ๋น์ฉ์ ๊ณ ๋ คํด E2E ํ ์คํธ,ํตํฉํ ์คํธ๋ฅผ ์ ์ธํ๊ณ ์ ์ฅ์๋ณ ๋จ์ ํ ์คํธ์ ํต์ฌ API ํ ์คํธ๋ฅผ ์งํํ๋ค.