๐ ๋ฌธ์ ์ํฉ
์ฐ๋ฆฌ ์คํฐ๋์์๋ ์ฃผ์ฐจ๋ณ๋ก ์คํ๋ฆฐํธ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๊ฐ ์ฃผ์ฐจ์ ๋ง๋ ์ด์๋ฅผ ๋ฑ๋กํ์ฌ ์ผ์ ์ ๊ด๋ฆฌํ๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, 1์ฃผ์ฐจ์ ํด๋นํ๋ ์ด์๋ค์ '1์ฃผ์ฐจ' ์ํฝ์, 2์ฃผ์ฐจ์ ํด๋นํ๋ ์ด์๋ค์ '2์ฃผ์ฐจ' ์ํฝ์ ํ ๋น๋๋ค. Confluence ๋ฌธ์์ Jira์ ํน์ ์ด์๋ฅผ ์ฝ์ ํ ๊ฒฝ์ฐ ํน์ ์ํฝ์ ํํฐ๋งํ ์ ์์ด, ๋ชจ๋ ์ฃผ์ฐจ์ ์ด์๊ฐ ํ๊บผ๋ฒ์ ๋ถ๋ฌ์์ง๋ ๋ฌธ์ ๊ฐ ์์๋ค. ์ด๋ JQL์์ and parent = "์ํฝ ํค" ์กฐ๊ฑด์ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ ์ ์์๋ค.
(์์ธํ ๋ด์ฉ์ [๋๊ตฌ #1] Jira ๋ฐ Confluence ์ฌ์ฉ ๋ฐฉ๋ฒ ๊ธ์ "๐ Confluence ์ฝํ ์ธ ์์ฑ (jira ์ด์ ์ฐ๋)" ์ฐธ๊ณ )
์๋ฅผ ํตํด ํ๋ก์ ํธ, ์ด์ ์ ํ, ์ํ, ๋ด๋น์ ๋ฟ๋ง ์๋๋ผ JQL์ ์์ ํ์ฌ ์ํฝ๊น์ง ํํฐ๋งํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํน์ ์ํฝ์ ์ด์๋ค์ ์ ์์ ์ผ๋ก ๋ถ๋ฌ์์ก์ง๋ง, ๊ทธ ์ด์๋ค์ ํ์ ์ด์๋ค์ ํฌํจ๋์ง ์์๋ค. ์ด๋ JQL์์ ํน์ ์ํฝ์ parent๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ํ์ ์ด์๋ค์ ํด๋น ์ํฝ์ด ์๋, ๊ทธ ์์ ์ด์๋ฅผ parent๋ก ๊ฐ์ง๋ฏ๋ก ์๋์ผ๋ก ํฌํจ๋์ง ์๋ ๊ฒ์ด๋ค. ํ์ ์ด์๊น์ง ํฌํจํ๋ ค๋ฉด JQL์์ parent in () ์กฐ๊ฑด์ ์ฌ์ฉํด์ผ ํ๋ค. ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ํ์ ์ด์๋ฅผ ๊ฐ์ง ๋ชจ๋ ์ด์์ ํค๋ฅผ ์ง์ ์ ๋ ฅํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
[ ์์ ]
์๋ฅผ ๋ค์ด, ํ๊ธธ๋ ๋ด๋น์์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ด์๊ฐ ํ ๋น๋์ด ์๋ค๊ณ ํ์.
- A ์ด์ (parent: "3์ฃผ์ฐจ" ์ํฝ)
- B ์ด์ (parent: "3์ฃผ์ฐจ" ์ํฝ / ํ์ ์ด์: a, b, c)
- C ์ด์ (parent "3์ฃผ์ฐจ" ์ํฝ / ํ์ ์ด์: d)
์ด์๋ฅผ ๋ถ๋ฌ์ฌ ๋, A, B, C ์ด์๋ฟ๋ง ์๋๋ผ B์ C์ ํ์ ์ด์๋ค๊น์ง ๋ชจ๋ ํฌํจํ๋ ค๋ฉด, JQL์ parent๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด์ผ ํ๋ค.
... and parent in ("3์ฃผ์ฐจ ์ํฝ ํค", "B ์ด์ ํค", "C ์ด์ ํค") ...
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
์คํฐ๋ ์ฃผ์ฐจ๊ฐ ๋๋๋ ๋ , Confluence๋ก ๋ฌธ์๋ฅผ ์ทจํฉํ๋ฉด์ ๋ฌธ๋ ๋ ์ค๋ฅธ ์๊ฐ์ด '์ต๊ทผ์ ๋ฐฐ์ด Selenium์ ํ์ฉํ๋ฉด ์ด ์์ ์ ์๋ํํ ์ ์์ง ์์๊น?' ์๋ค. ์ฒ์์๋ Selenium์ ์ฌ์ฉํด ๋ด๋น์๋ณ๋ก ํ์ ์ด์๋ฅผ ๊ฐ์ง ์ด์๋ค์ ํค๋ฅผ ์๋์ผ๋ก ์ฐพ์์ฃผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ๊ตฌํ์ ์๋ํ๋ฉด์ ๋ช ๊ฐ์ง ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
Selenium์ ํตํ ์๋ํ์ ๋ฌธ์ ์
- Jira๋ SPA(Single Page Application) ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ์ฌ์ฉ์๊ฐ ํน์ ์์ ์ ์ํํด์ผ๋ง ์ผ๋ถ ์์๋ค์ด ๋ก๋๋๋ค.
- ๋๋ถ๋ถ์ ์ด์ ์ํ ๋ณ๊ฒฝ, ๊ฒ์, ํํฐ๋ง ๋ฑ์ AJAX ์์ฒญ์ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, Selenium์ด ์์๋ฅผ ๊ฐ์งํ๊ธฐ ์ ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
- ์ผ๋ถ UI ์์๊ฐ iframe ๋ด๋ถ์ ์์นํ์ฌ, Selenium์์ ๋ฐ๋ก ์ ๊ทผํ๋ ค๋ฉด switch_to.frame()์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ด๋ก ์ธํด ์ถ๊ฐ์ ์ธ ๋ณต์ก์ฑ์ด ๋ฐ์ํ๋ค.
- HTML ๊ตฌ์กฐ๊ฐ ๋ณต์กํ๊ณ , ํด๋์ค ๋ค์ด๋ฐ์ ๋๋ ํํ์ฌ ๋๋คํ ๊ณ ์ ์๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
- jira์ ๋ก๋ฉ ์๋๊ฐ ์ผ์ ํ์ง ์์ WebDriverWait์ time.sleep()์ ์ฌ์ฉํด๋ ์์ธ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
'๊ทธ๋ ๋ค๋ฉด Selenium ๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์๊น?'์ ๋ํ ๊ณ ๋ฏผ ๋์ ์ฐพ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก Jira REST API ์๋ค. Jira REST API๋ฅผ ํ์ฉํ๋ฉด, UI ์์์ ์์กดํ์ง ์๊ณ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด ๊ฐ์ ธ์ฌ ์ ์์ด, Selenium๋ณด๋ค ํจ์ฌ ์์ ์ ์ด๊ณ ํจ์จ์ ์ธ ์๋ํ๊ฐ ๊ฐ๋ฅํ๋ค.
+ ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฌ์ค Confluence์์๋ ํ์ ์์ ์ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ณธ์ธ์ ์ด๋ฅผ ์์ง ๋ชปํ๋ค. ๋จ์ํ ์ด ๊ตฌ์ฑ์์ ํ์ ์์ ์ ์ถ๊ฐํ๋ฉด ํด๊ฒฐ๋๋ ๋ฌธ์ ์์ง๋ง, JQL ์์ฑ ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ ํ ํด๋น JQL์ Confluence ๋ฌธ์์ ์ ์ฉํด๋ณด๋ฉด์ ์ด๋ฅผ ์๊ฒ ๋์๋ค. ์ด์ฐ ๋ณด๋ฉด ํผ์ ์ฝ์งํ ์ ์ด์ง๋ง, ๊ธ์ ์ ์ผ๋ก ๋ณด๋ฉด ๋๋ถ์ Selenium์ ์ฐ์ตํ๊ณ Jira REST API๋ ํ์ฉํด๋ณผ ์ ์์๋ค. (์์ธํ ๋ด์ฉ์ [๋๊ตฌ #1] Jira ๋ฐ Confluence ์ฌ์ฉ ๋ฐฉ๋ฒ ๊ธ์ "๐ Confluence ์ฝํ ์ธ ์์ฑ (jira ์ด์ ์ฐ๋)" ์ฐธ๊ณ )
๐ Jira REST API๋?
Jira REST API๋ HTTP ์์ฒญ์ ํตํด Jira์ ๋ฐ์ดํฐ(์ด์, ํ๋ก์ ํธ, ์ฌ์ฉ์ ์ ๋ณด ๋ฑ)์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋๋ก ์ ๊ณต๋๋ ์ธํฐํ์ด์ค์ด๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ์์ UI๋ฅผ ํตํด ์ง์ ์ด์๋ฅผ ํ์ธํ๋ ๋์ , API๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ํ ์ ์๋ค. Jira REST API๋ ๊ธฐ๋ณธ์ ์ผ๋ก JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, GET, POST, PUT, DELETE ๊ฐ์ HTTP ๋ฉ์๋๋ฅผ ํตํด ๋ค์ํ ์์ ์ ์ํํ ์ ์๋ค.
๐ Jira API Token ๋ฐ๊ธ ๋ฐฉ๋ฒ
Jira API Token์ ๋ฐ๊ธํ๋ ค๋ฉด, ์ค๋ฅธ์ชฝ ์๋จ์ [ ํ๋กํ ๋ฐ ์ค์ ] > [ ๊ณ์ ๊ด๋ฆฌ ] ๋ฒํผ์ ํด๋ฆญํ๋ค.
๋ค์์ผ๋ก, [ API ํ ํฐ ๋ง๋ค๊ธฐ ๋ฐ ๊ด๋ฆฌ ] ๋ฒํผ์ ํด๋ฆญํ๋ค.
๋ค์์ผ๋ก, [ API ํ ํฐ ๋ง๋ค๊ธฐ ] ๋ฒํผ์ ํด๋ฆญํ๋ค.
์๋ก ์์ฑํ API ํ ํฐ์ ์ด๋ฆ๊ณผ, ๋ง๋ฃ์ผ์ ์ค์ ํ ๋ค [ ๋ง๋ค๊ธฐ ] ๋ฒํผ์ ํด๋ฆญํ์ฌ ์๋ก์ด API ํ ํฐ์ ์์ฑํ๋ค.
API ํ ํฐ์ ์์ฑํ๋ฉด ์์ ๊ฐ์ ์ฐฝ์ด ๋จ๋๋ฐ, ์ด ์ฐฝ์ ํ ๋ฒ๋ง ํ์๋๋ฏ๋ก ๋ซ์ผ๋ฉด ๋ค์ ํ์ธํ ์ ์๋ค. ์ฆ, ๋ณต์ฌํ์ง ์์ผ๋ฉด ์ดํ์ ํด๋น ํ ํฐ์ ๋ค์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ๋์ ์์ ํ ๊ณณ์ ์ ์ฅํด๋์ด์ผ ํ๋ค.
๐ Jira REST API๋ฅผ ํตํ ์ด์ ์กฐํ
ํ์ฌ ์คํฐ๋ ํ๋ก์ ํธ๋ Jira Cloud๋ฅผ ์ฌ์ฉ ์ค์ด๋ฏ๋ก, Jira Cloud Platform REST API ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํ์๋ค.
๋ง์ฝ Jira Server(Data Center)๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, Jira Server/Data Center REST API ๋ฌธ์์์ ํ์ธํ ์ ์๋ค.
ํ๋ก์ ํธ์ REST API ๋ฒ์ ์ ํ์ธํ๋ ค๋ฉด, ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ "https://your-instance.atlassian.net/rest/api/3/serverInfo" URL์ ์ ๋ ฅํ๋ค. ์ด๋, "your-instance.atlassian.net" ๋ถ๋ถ์ ๋ณธ์ธ์ Jira ๋๋ฉ์ธ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค. ๋ง์ฝ ์๋ต์ด ์ ์์ ์ผ๋ก JSON ํํ๋ก ๋ฐํ๋๋ค๋ฉด, ํด๋น ํ๋ก์ ํธ๋ REST API v3๋ฅผ ์ง์ํ๋ ๊ฒ์ด๋ค. ๋ฐ๋๋ก, 404 Not Found ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด, REST API v3๋ฅผ ์ง์ํ์ง ์๋ ๊ฒ์ด๋ค. Jira REST API๋ ๋ฒ์ ์ ๋ฐ๋ผ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์, ๋ณธ์ธ์ ํ๋ก์ ํธ๊ฐ ์ง์ํ๋ REST API ๋ฒ์ ์ ๋จผ์ ํ์ธํ ํ, ๊ณต์ ๋ฌธ์์์ ์ ์ ํ ๋ฒ์ ์ ์ ํํ์ฌ ๋ณธ์ธ์ ํ๊ฒฝ์ ๋ง๋ ๋ด์ฉ์ ์ฐธ๊ณ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
[ ๊ตฌํ ์ฝ๋ ]
import os
import requests
JIRA_URL = "jira ํ๋ก์ ํธ ๋๋ฉ์ธ"
JIRA_API_TOKEN = "๋ฐ๊ธ๋ฐ์ Jira API ํ ํฐ"
JIRA_EMAIL = "๋ณธ์ธ์ ์ด๋ฉ์ผ"
AUTH = (JIRA_EMAIL, JIRA_API_TOKEN)
HEADERS = {"Content-Type": "application/json"}
def getAccountID(userName): # ์ฌ์ฉ์ Account ID ์กฐํ ํจ์
response = requests.get(f"{JIRA_URL}/rest/api/3/user/search", auth=AUTH, headers=HEADERS, params={"query": userName})
return response.json()[0]["accountId"] if response.status_code == 200 and response.json() else None
def hasSubtasks(issueKey): # ํน์ ์ด์์ ํ์ ์ด์๊ฐ ์๋์ง ํ์ธํ๋ ํจ์
jql = f'parent="{issueKey}"'
response = requests.get(f"{JIRA_URL}/rest/api/3/search", auth=AUTH, headers=HEADERS, params={"jql": jql, "fields": "key"})
return bool(response.json().get("issues", [])) if response.status_code == 200 else False
def getIssues(project, epicKey, userName): # ํน์ Epic์ ์ํ ์ฌ์ฉ์์ ์ด์ & ํ์ ์ด์ ์กฐํ
assigneeID = getAccountID(userName)
if not assigneeID:
return print(f"โ '{userName}' ์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.")
jql = f'project="{project}" AND assignee="{assigneeID}" AND parent="{epicKey}" ORDER BY created DESC'
response = requests.get(f"{JIRA_URL}/rest/api/3/search", auth=AUTH, headers=HEADERS, params={"jql": jql, "fields": "key"})
if response.status_code != 200:
return print("โ API ์์ฒญ ์คํจ!")
issues = [issue["key"] for issue in response.json().get("issues", [])]
print(f"โ
{userName}์ ์ด์ ํค:", issues)
subtasks = [key for key in issues if hasSubtasks(key)]
print(f"๐ ํ์ ์ด์๊ฐ ์๋ ์ด์ ํค:", subtasks if subtasks else "์์")
# ์คํ
os.system('cls')
getIssues("STUDY", "STUDY-100", "๊ฐ์ฐ์")
์์ ๊ฐ์ด, Jira REST API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์์ ์ผ๋ก ๋ถ๋ฌ์์์ ํ์ธํ ์ ์๋ค.
+ ์ถ๊ฐ ์ง์
Jira Cloud vs Jira Server(Data Center)
๊ตฌ๋ถ | Jira Cloud | Jira Server(Data Center) |
๋ฐฐํฌ ๋ฐฉ์ | Atlassian์ด ํด๋ผ์ฐ๋์์ ์ด์ (SaaS) | ์์ฒด ์๋ฒ์ ์ค์น ๋ฐ ์ด์ (On-Premise) |
์ ์ง๋ณด์ | Atlassian์ด ์๋ ๊ด๋ฆฌ (์ ๋ฐ์ดํธ, ๋ณด์ ๋ฑ) | ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ง๋ณด์ ๋ฐ ์ ๊ทธ๋ ์ด๋ ์ํ |
ํ์ฅ์ฑ | ์๋ ํ์ฅ ์ง์ | ์ฌ์ฉ์๊ฐ ์ง์ ์ธํ๋ผ ํ์ฅ ํ์ |
์ ๋ฐ์ดํธ | ์๋ ์ ๋ฐ์ดํธ | ์ง์ ์ ๊ทธ๋ ์ด๋ ํ์ |
๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ | Atlassian์ด ๊ด๋ฆฌ (๊ธฐ๋ณธ 7์ผ ์ ์ง) | ์ฌ์ฉ์๊ฐ ์ง์ ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ ์ค์ |
์ปค์คํฐ๋ง์ด์ง | ์ ํ์ (Cloud์ฉ ์ฑ๋ง ์ฌ์ฉ ๊ฐ๋ฅ) | ๊ณ ๋์ ์ปค์คํฐ๋ง์ด์ง (ํ๋ฌ๊ทธ์ธ, ์คํฌ๋ฆฝํธ ํ์ฉ) |
๋ณด์ ๋ฐ ๊ท์ ์ค์ | Atlassian์ด SOC2, ISO27001 ๋ฑ ๋ณด์ ์ธ์ฆ | ๊ธฐ์ ๋ด๋ถ ๋ณด์ ์ ์ฑ ์ ๋ฐ๋ผ ์ค์ ๊ฐ๋ฅ |
์ฌ์ฉ์ ๊ด๋ฆฌ | Atlassian Access(SAML, SSO) ์ง์ | LDAP, Active Directory ์ฐ๋ ๊ฐ๋ฅ |
๊ฐ๊ฒฉ ๋ชจ๋ธ | ์/์ฐ ๊ตฌ๋ ํ (์ฌ์ฉ์ ์ ๊ธฐ๋ฐ) | ์ฐ๊ฐ ๋ผ์ด์ผ์ค ๊ตฌ๋งค (Data Center๋ ์ต์ 500๋ช ) |
๋ฌด๋ฃ ํ๋ | ์ต๋ 10๋ช ๋ฌด๋ฃ | ์์ (์ ๋ฃ ๋ผ์ด์ ์ค ํ์) |
๋์ | ์คํํธ์ , ์ค์๊ธฐ์ , ์ ์ง๋ณด์ ๋ถ๋ด์ด ์ ์ ์กฐ์ง | ๋๊ธฐ์ , ๋ณด์์ด ์ค์ํ ์กฐ์ง, ์ปค์คํฐ๋ง์ด์ง์ด ํ์ํ ํ |
Jira REST API์ ์ธ์ฆ ๋ฐฉ์
1. Basic Authentication (๊ธฐ๋ณธ ์ธ์ฆ)
~> ์ฌ์ฉ ๋ฐฉ๋ฒ (Jira Cloud Platform REST API ๊ณต์ ๋ฌธ์)
1. ์ฌ์ฉ์ ID + API Token์ Base64 ์ธ์ฝ๋ฉ ํ Authorization ํค๋์ ์ถ๊ฐ
~> ํน์ง
• ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ฒ ๊ตฌํ ๊ฐ๋ฅ
• ๋ณด์์ ์ทจ์ฝํ ์ ์์ด HTTPS ์ฌ์ฉ ํ์
• Jira Cloud๋ ๋น๋ฐ๋ฒํธ ๋์ API Token ์ฌ์ฉ ํ์
2. OAuth 2.0 ์ธ์ฆ
~> ์ฌ์ฉ ๋ฐฉ๋ฒ
1. OAuth ์ฑ ์์ฑ ํ Client ID & Client Secret ํ๋
2. ์ฌ์ฉ์ ์ธ์ฆ ํ Access Token ๋ฐ๊ธ
3. API ์์ฒญ ์ Authorization ํค๋์ Bearer ํ ํฐ ์ถ๊ฐ
~> ํน์ง
• ๋ณด์์ด ๊ฐ๋ ฅํ๊ณ , ์ธ๋ฐํ ๊ถํ ๊ด๋ฆฌ ๊ฐ๋ฅ
• ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ์ ์ฐ๋์ ์ ๋ฆฌ
• ์ค์ ๊ณผ์ ์ด ๋ณต์กํ ์ ์์
3. Session-based Authentication (์ฟ ํค ์ธ์ฆ)
~> ์ฌ์ฉ ๋ฐฉ๋ฒ
1. ๋ก๊ทธ์ธ API๋ฅผ ํธ์ถํด JSESSIONID ํ๋
2. API ์์ฒญ ์ Cookie ํค๋์ ์ถ๊ฐ
~> ํน์ง
• Jira Server (On-Premise)์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
• ๊ธฐ์กด ๋ก๊ทธ์ธ ๋ฐฉ์๊ณผ ์ ์ฌํ์ฌ ์น์ํจ
• Jira Cloud์์๋ ์ง์ํ์ง ์์
๐ Jira REST API์ ์ถ๊ฐ ํ์ฉ ๋ฐฉ์
์ฌ์ค ๋ณธ์ธ์ Jira REST API๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ์ด์๋ฅผ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ๋ง์ ๋ค๋ค์ง๋ง, ์ด๋ฅผ ํ์ฉํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๋ฌด๊ถ๋ฌด์งํ๋ค๊ณ ๋๊ผ๋ค. ์๋ฅผ ๋ค์ด, Selenium์ด๋ ๊ธฐํ ํ ์คํธ ์๋ํ ๋๊ตฌ๋ฅผ ํ์ฉํด ํ ์คํธ๊ฐ ์คํจํ์ ๋ ์๋์ผ๋ก Jira์ ๋ฒ๊ทธ ํฐ์ผ์ ์์ฑํ๊ฑฐ๋, ํ ์คํธ๊ฐ ์ฑ๊ณตํ๋ฉด ํด๋น ์ด์์ ์ํ๋ฅผ ‘์งํ ์ค’์์ ‘์๋ฃ’๋ก ์๋ ๋ณ๊ฒฝํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ ๊ฒ์ด๋ค. ๋ํ, ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ด์์ ๋๊ธ๋ก ๋ฑ๋กํ๊ฑฐ๋, ํน์ ์ด์ ๋ฐ์ ์ Slack์ด๋ Discord๋ก ์๋ฆผ์ ์ ์กํ๋ ๊ฒ๋ ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ์์ผ๋ก๋ ์ด๋ฌํ ํ์ฅ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ๋ฉฐ, Jira REST API๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ํฌ์คํ ํ ๊ณํ์ด๋ค.
'๐ Quality Assurance Study > ๐ QA ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Unity์์์ ํ ์คํธ ์๋ํ ๋ฐ Jira ์ด์ ๋ฑ๋ก ์๋ํ (0) | 2025.03.09 |
---|---|
XPath์ ๋ํ์ฌ (0) | 2025.02.27 |
Jira ๋ฐ Confluence ์ฌ์ฉ ๋ฐฉ๋ฒ (2) | 2025.02.20 |
BTS (Bug Tracking System)์ ๋ํ์ฌ (3) | 2025.01.13 |