๐ Groq์ Pipelines๋ฅผ ์ฌ์ฉํด Bitbucket์ฉ AI ๊ธฐ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ์ด ๊ตฌ์ถ
Source: Dev.to
๊ฐ์
ํ๋ ๊ฐ๋ฐ ํ์ ์ฝ๋ ํ์ง์ ์ํด ํ ๋ฆฌํ์คํธ์ ํฌ๊ฒ ์์กดํ์ง๋ง, ์๋ ๋ฆฌ๋ทฐ๋ ๋๋ฆฌ๊ณ ์ผ๊ด์ฑ์ด ์์ผ๋ฉฐ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. Bitbucket์ RovoโฏDev์ GitHub์ AskโฏCopilot์ AIโ์ง์ PR ๋ฆฌ๋ทฐ๋ฅผ ์ ๊ณตํ์ง๋ง, ๊ฐ๊ฒฉ ๋ชจ๋ธ(์: $20โฏ/โฏ๊ฐ๋ฐ์โฏ/โฏ์)์ด ์ ์๊ตฌ์ ๋ง์ง ์์์ต๋๋ค.
์ด๋ฏธ Groq API ํค๊ฐ ์์๊ณ ์์ ์๋ํ๋ ํ์ดํ๋ผ์ธ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ์ํ๊ธฐ์, ๋ค์์ ์ด์ฉํด Bitbucket์ฉ AIโ๊ตฌ๋ PR ๋ฆฌ๋ทฐ์ด๋ฅผ ๋ง๋ค์์ต๋๋ค:
- Bitbucket Pipelines
- Groq LLM (llamaโ3.3โ70bโversatile)
- Git ๊ธฐ๋ฐ diff ์ถ์ถ (REST API ์ธ์ฆ ๋ฒ๊ฑฐ๋ก์ ์์)
์ด ์์คํ ์ ๋ชจ๋ PR์ ์๋์ผ๋ก ๊ฒํ ํ๊ณ , ๊ตฌ์กฐํ๋ ์ฒดํฌ๋ฆฌ์คํธ ๊ธฐ๋ฐ AI ๋ฆฌ๋ทฐ๋ฅผ ์ถ๋ ฅํ๋ฉฐ ๊ฐ๋ฐ์๋น ๋ผ์ด์ ์ค ๋น์ฉ์ด ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค.
๊ธฐ์กด ์๋ฃจ์ ๊ณผ์ ๋น๊ต
| ๊ธฐ๋ฅ | RovoโฏDev (Bitbucket) | AskโฏCopilot (GitHub) | Groqโ๊ธฐ๋ฐ ์์คํ |
|---|---|---|---|
| AI PR ๋ฆฌ๋ทฐ | โ | โ | โ |
| CI์์ ์์ ์๋ํ | โ (๋๋ถ๋ถ UI ๊ธฐ๋ฐ) | โ (์๋ ํ๋กฌํํธ) | โ |
| ๊ฐ๋ฐ์๋น ๋น์ฉ | โ $20โฏ/โฏ์โฏ/โฏ๊ฐ๋ฐ์ | โ Copilot ํฌํจ | โ $0โฏ/โฏ๊ฐ๋ฐ์ |
| Pipelines์์ ๋์ | โ | โ | โ |
| ๋ง์ถคํ ๋ฆฌ๋ทฐ ๊ท์น | โ ์ ํ์ | โ ์ ํ์ | โ ์์ ์ ์ด |
| ๋ฒค๋ ๋ฝ์ธ | โ | โ | โ ์์ (Groqโฏ+โฏGit) |
๋๊ธฐ์ ๋ชฉํ
์ํ์ง ์์๋ ๊ฒ:
- ๋ ๋ค๋ฅธ ์ข์๋น SaaS ๊ตฌ๋
- ์๋ โAskโฏAIโ ์ํฌํ๋ก์ฐ
- ๊ฐ๊ฒฉ ๋ณ๋ ์ ๊นจ์ง๋ ์์คํ
์ํ๋ ๊ฒ:
- CI ์์ค์ ๊ฐ์ ์ ์ฉ
- ๋ง์ถคํ ๋ฆฌ๋ทฐ ๊ท์น
- ๊ฐ๋ฅํ ๊ฐ์ฅ ๋ฎ์ ๋น์ฉ
๊ทธ๋์ Groqโฏ+โฏPipelines๋ฅผ ์ ํํ์ต๋๋ค.
์ด๊ธฐ ์ ๊ทผ ๋ฐฉ์ (Bitbucket REST API)
์ฒซ ๋ฒ์งธ ์๋๋ ์ผ๋ฐ์ ์ธ ํจํด์ ๋ฐ๋์ต๋๋ค:
- Bitbucket REST API๋ฅผ ํตํด PR diff ๊ฐ์ ธ์ค๊ธฐ
- ๋ค์ ํ ํฐ ์ค ํ๋๋ฅผ ์ฌ์ฉํด PR ์ฝ๋ฉํธ ๊ฒ์:
- Atlassian API ํ ํฐ
- ์ํฌ์คํ์ด์ค ํ ํฐ
- ๋ฆฌํฌ์งํ ๋ฆฌ ์ก์ธ์ค ํ ํฐ
์ฌ๋ฐ๋ฅธ ์ค์ฝํ๋ฅผ ์ง์ ํ์์๋ ๋ถ๊ตฌํ๊ณ , 401โฏUnauthorized ์ค๋ฅ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ์ต๋๋ค. ์์ธ:
- ํ ํฐ ๋์์ ์ผ๊ด์ฑ ๋ถ์กฑ
- Bitbucket ๋ณด์ ๋ชจ๋ธ์ ์ง์์ ์ธ ๋ณํ
- 2025๋ ํ ํฐ ๋์์ ๋ํ ๋ฌธ์ ๋ถ์กฑ
๊ด๋ฒ์ํ ๋๋ฒ๊น ๋์ diff ์์ง์ ์ํด Bitbucket REST API๋ฅผ ์์ ํ ๋ฐฐ์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ํ๋ช ํ ์ ํ์ด๋ผ๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค.
ํ๋ก๋์ ์ํคํ ์ฒ
ํ ๋ฆฌํ์คํธ ์์ฑ
- diff๋ฅผ ์ํ REST API ํธ์ถ ์์
- ์ธ์ฆ ์คํจ ์์
- ๊ถํ ๋ฌธ์ ์์
- ์์ ํ ๊ฒฐ์ ์ ์ด๋ฉฐ ํ๋ ์ดํฌ ํ๋ฆฌ
Diff ์ถ์ถ
Bitbucket ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํ๋ ๋์ , ํ์ดํ๋ผ์ธ์์ Git ๋ช ๋ น๋ง ์คํํฉ๋๋ค:
# Get the diff for the current PR
git fetch origin main
git diff origin/main...HEAD
- ์ ํํ PR diff ์ ๊ณต
- API ์ธ์ฆ ํ์ ์์
- ๋ชจ๋ CI ํ๊ฒฝ์์ ๋์
์ด ํ ๊ฐ์ง ๊ฒฐ์ ์ผ๋ก **โโฏ90โฏ%**์ ์์คํ ๋ณต์ก์ฑ์ด ์ฌ๋ผ์ก์ต๋๋ค.
AI ๋ฆฌ๋ทฐ ์ฒดํฌ๋ฆฌ์คํธ (TypeScriptโฏ+โฏAngular)
| ์ฒดํฌ๋ฆฌ์คํธ ํญ๋ชฉ | ์ํ |
|---|---|
any ํ์
์ฌ์ฉ ๊ธ์ง | โ |
| ์ธํฐํ์ด์คยท์ ๋ค๋ฆญ์ ํ์ฉํ ๊ฐํ ํ์ ์ง์ | โ |
์ต์ Angular ๋ฌธ๋ฒ (@if, @for, ๋
๋ฆฝํ ์ปดํฌ๋ํธ) | โ |
| ์ธ์ฆ ๊ฐ๋ ๊ตฌํ | โ |
| ํ๋์ฝ๋ฉ๋ ๋น๋ฐ ์ ๋ณด ์์ | โ |
| ์ค๋ฅ ์ฒ๋ฆฌ ๊ตฌํ | โ |
| ํ ์คํธ ์กด์ฌ | โ |
| ์ฑ๋ฅ ์ฒดํฌ ๊ตฌํ | โ |
| ์ ๊ทผ์ฑ (WCAG) ์ค์ | โ |
์ต์ข
ํ์ (MERGE READY / NEEDS WORK) | โ |
์ด ์ฒดํฌ๋ฆฌ์คํธ๋ ์ผ๊ด๋ ๋ฆฌ๋ทฐ, ํ์ค ๊ฐ์ ์ ์ฉ, ๋ฆฌ๋ทฐ์ด ํธํฅ ์ ๋ก๋ฅผ ๋ณด์ฅํฉ๋๋ค.
Groq LLM ํตํฉ
์ Groq์ธ๊ฐ?
- ํฐ diff์์๋ ๋ฐ์ด๋ ์ถ๋ก ๋ฅ๋ ฅ
- ๋ง์ ๋์๋ณด๋ค ๋น์ฉ ํจ์จ์
- OpenAI ํธํ API
- ์นํ๊ฒฝ์ (์์ฒญ๋น ๋ฎ์ ์ฐ์ฐ ์๊ฐ)
AI๋ ๋ค์๊ณผ ๊ฐ์ด ์นดํ ๊ณ ๋ฆฌ๋ณ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค:
- ๐จ ์น๋ช ์ ์ด์
- ๐ ๋ณด์ ๋ถ์
- โก ์ฑ๋ฅ ๋ฆฌ๋ทฐ
- ๐๏ธ ์ํคํ ์ฒ ํผ๋๋ฐฑ
- ๐ ์ ์ง๋ณด์์ฑ
- โ
์ต์ข
ํ์ (
MERGE READY/NEEDSโฏWORK)
AI ๋ฆฌ๋ทฐ ํ์ ์์น
- ์ ์ฒด AI ๋ฆฌ๋ทฐ๋ Pipelines ๋ก๊ทธ์ ์ถ๋ ฅ
- ์ ํ์ ์ผ๋ก ๋ค์ด๋ก๋ ๊ฐ๋ฅํ
ai-review.md์ํฐํฉํธ๋ก ์ ์ฅ ๊ฐ๋ฅ - PR ์ฐ๊ธฐ ๊ถํ์ด ํ์ ์์ผ๋ฏ๋ก ๋ณด์ ์ํ ์์
์ด ์ ๊ทผ ๋ฐฉ์์ PR์ ์๋์ผ๋ก ์ฝ๋ฉํธ๋ฅผ ๋ค๋ ๋ฐฉ์๋ณด๋ค ๊ธฐ์ ํ๊ฒฝ์ ํจ์ฌ ์ ํฉํ์ต๋๋ค.
ํ๋ก๋์ ์ํฅ
- ๋ชจ๋ PR์ด ๋ช ๋ถ ์์ ์๋์ผ๋ก ๋ฆฌ๋ทฐ๋จ
- ๋ฆฌ๋ทฐ ํ์ค์ด ์ผ๊ด๋๊ฒ ์ ์ฉ
- ์ธ๊ฐ ๋ฆฌ๋ทฐ์ด๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์ค ๊ฐ๋ฅ
- ์ธ์ฆ ๋ฌธ์ ๋ก ์ธํ ํ์ดํ๋ผ์ธ ์คํจ ์์
- ์ฌ์๋๋ก ์ธํ ๋น๋ ์๊ฐ ๋ญ๋น ์์
- ๊ฐ๋ฐ์๋น ๋ผ์ด์ ์ค ๋น์ฉ ์ ๋ก
์ฃผ์ ์์ง๋์ด๋ง ๊ตํ
- AI ๋ฆฌ๋ทฐ์ด๋ ๋ณด์กฐ ์ญํ ์ ํด์ผ ํ๋ฉฐ, ๊ฐ๋ฐ์๋ฅผ ์ฐจ๋จํด์๋ ์ ๋๋ค
- PR ์ฝ๋ฉํธ๋ ์ ํ ์ฌํญ์ด๋ฉฐ, ๋ฆฌ๋ทฐ๋ ์ ๋ขฐํ ์ ์์ด์ผ ํ๋ค
- Pipelinesโฏ+โฏGitโฏ+โฏLLM ์กฐํฉ์ ๋งค์ฐ ๊ฐ๋ ฅํ๋ค
- Groq๋ CI/CD AI ์ํฌ๋ก๋์ ์ต์ ํ๋ผ ์๋ค
- ์ข์ AI ๋ฆฌ๋ทฐ๋ฅผ ์ป๊ธฐ ์ํด $20โฏ/โฏ๊ฐ๋ฐ์โฏ/โฏ์ ๋ผ์ด์ ์ค๋ฅผ ๊ตฌ๋งคํ ํ์๊ฐ ์๋ค
์์ผ๋ก์ ๊ณํ
- ํ์ ์ด
NEEDSโฏWORK์ผ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋จธ์ง ์ฐจ๋จ - ์ธ์ด๋ณ ๋ฆฌ๋ทฐ์ด ์ถ๊ฐ (์: .NET, SQL)
- ๋ณด์ ์ ์ฉ ๋ฆฌ๋ทฐ ๋ชจ๋
- ์ํคํ ์ฒ ๋๋ฆฌํํธ ํ์ง
๋ง๋ฌด๋ฆฌ ์๊ฐ
Git์ ์ด์ฉํด diff๋ฅผ ์ถ์ถํ๊ณ , Groq๋ก AI ๋ถ์์ ์ํํ๋ฉฐ, Pipelines๋ก ์๋ํํ์ธ์. ๊ฐ๋ฅํ ํ REST API ์ธ์ฆ์ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค.