[Jira] JQL 활용하여 Jira에서 고급 검색하기
JQL 개념
JQL은 Jira Query Language의 약자로 Jira에서 좀더 디테일하게 이슈를 찾기 위해 사용할 수 있는 방법입니다. 기본 검색으로 찾지 못하는 복잡한 검색을 JQL을 사용해서 검색할 수 있습니다.
JQL 사용하기
1. 상단 메뉴에서 Issues > Search for issues 를 클릭합니다.
2. 검색 아이콘 우측에 Advanced 를 클릭합니다.
3. 입력창에 JQL 구문을 넣고 Enter를 치면 검색결과가 출력됩니다.
JQL 기본 문법
1. JQL 구조
JQL은 필드, 연산자, 값, 키워드로 구성되어 있습니다. 이 조합을 여러번 사용하여 강력한 검색 조건을 만들 수 있습니다.
2. JQL 구성 요소
① 필드
- JIRA 필드 또는 JIRA에서 정의된 사용자 정의 필드 입니다. 이슈에 대한 여러가지 정보를 담고 있습니다.
- 각 필드별로 사용할 수 있는 연산자와 함수가 있으며 자세한 사항은 링크 참조 바랍니다.
② 연산자
- 왼쪽에 있는 필드를 오른쪽에 있는 필드의 하나 이상의 값과 비교하여 검색되도록 합니다.
연산자 | 설명 |
= | 지정된 값과 정확하게 일치하는 이슈를 검색 |
!= | 지정된 값과 일치하지 않는 이슈를 검색 |
> | 지정된 값보다 큰 이슈를 검색 |
< | 지정된 값보다 작은 이슈를 검색 |
>= | 지정된 값보다 크거나 같은 이슈를 검색 |
<= | 지정된 값보다 작거나 같은 이슈를 검색 |
~ | 입력한 텍스트(단어)가 포함되는 이슈를 검색 |
!~ | 입력한 텍스트(단어)가 포함되지 않는 이슈를 검색 |
IN | 다수의 지정된 값에 포함되는 이슈를 검색 |
NOT IN | 다수의 지정된 값에 포함되지 않는 이슈를 검색 |
IS | 지정된 필드에 값이 없는 이슈를 검색 (EMPTY, NULL 키워드와 함께 사용) |
IS NOT | 지정된 필드에 값이 있는 이슈를 검색 (EMPTY, NULL 키워드와 함께 사용) |
WAS | 지정된 필드의 값이 현재나 과거에 있었던 이슈를 검색 |
WAS IN | 다수의 지정된 필드의 값이 현재나 과거에 있었던 이슈를 검색 |
WAS NOT IN | 다수의 지정된 필드의 값이 현재나 과거에 없었던 이슈를 검색 |
WAS NOT | 지정된 필드의 값이 현재나 과거에 없었던 이슈를 검색 |
CHANGED | 지정된 필드의 값이 변경된 이슈를 검색 |
③ 값
쿼리의 실제 데이터 입니다.
④ 키워드
- 특별한 의미를 가진 단어입니다. 다음 기능을 수행합니다.
- 둘 이상의 하나의 쿼리문을 결합하여 복합한 쿼리문 생성
- 하나 이상의 쿼리문의 로직을 변경
- 연산자의 로직을 변경
- 쿼리의 명시적 정의
- 특정 함수 실행
키워드 | 설명 |
AND | 여러개 쿼리문의 조건이 모두 일치하는 이슈를 검색 |
OR | 여러개 쿼리문의 조건 중 하나라도 일치하는 이슈를 검색 |
NOT | 쿼리문의 조건에 해당하지 않는 이슈를 검색 |
EMPTY | 지정된 필드의 값이 없는 이슈를 검색 |
NULL | 지정된 필드의 값이 없는 이슈를 검색 |
ORDER BY | 검색결과를 지정된 필드로 정렬 |
검색 우선순위 지정
복잡한 JQL 문은 괄호를 사용하여 연산자의 우선순위를 적용 할 수 있습니다. 괄호를 사용하지 않는다면 쿼리문은 왼쪽에서 오른쪽으로 순차적으로 실행됩니다.
예약어 및 예약문자
JQL은 예약어 및 예약문자가 있으며 쿼리에서 이를 사용하려면 아래와 같이 처리해야 합니다.
- 따옴표(큰따옴표, 작은따옴표 모두 가능)를 사용하여 예약어 및 예약문자를 둘러 쌉니다.
- 예제 : Summry ~ "[example]"
1. 예약문자
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JQL 기본 예제
위에서 설명한 내용으로 기본적으로 사용할 수 있는 JQL 기본 예제입니다.
1. '폴라리스 오피스' 프로젝트에서 상태가 'In Progress' 인 이슈 검색
- project = 폴라리스 오피스 AND status = "In Progress"
2. 첨부파일이 있는 이슈 검색
- attachments IS NOT EMPTY
3. 이슈 댓글에 "처리 되었습니다."가 포함된 이슈 검색
- comment ~ "\"처리 되었습니다.\""
4. 이슈 생성 날짜가 2021-4-13 이전에 생성된 이슈 검색
- created < "2021-4-13"
5. 컴포넌트가 '컴포넌트1'이거나 '컴포넌트2'인 이슈 검색
- component in (컴포넌트1, 컴포넌트2)
6. assignee가 변경된 이슈 검색
- assignee CHANGED
7. assingee가 '김철수' 였던 이슈 검색
- assignee WAS 김철수
8. duedate가 설정되지 않은 이슈를 검색하여 생성일, 우선순위 순으로 정렬
- duedate = empty order by created, priority asc
JQL 실무 예제
실무에서 많이 사용하는 예제입니다.
1. 이번주 이슈 중 상태가 'In Progress' 였던 이슈 검색
- status was (“In Progress”) DURING (startofweek(), endofweek());
2. Resolution이 'Fixed' 로 변경된 이슈 검색
- resolution changed to “Fixed”
3. '폴라리스 오피스' 프로젝트에서 김철수가 상태를 'In Progress'에서 'Resolved'로 변경한 이슈 검색
- project = 폴라리스 오피스 AND status CHANGED FROM “In Progress” TO “Resolved” BY 김철수
4. '폴라리스 오피스' 프로젝트에서 생성된지 2주가 지난 이슈 중 우선순위가 'blocker'나 'critical'인 이슈를 검색해서 생성일 역순으로 정렬
- project = 폴라리스 오피스 AND priority in (blocker, critical) AND created > -2w ORDER BY created DESC
5. 예상된 작업시간보다 오버된 이슈 (Time Tracking과 Worklog 사용 시)
- workRatio > 100
6. 내가 지난 1주 동안 본 이슈
- lastViewd > "-1w"
7. 특정필터에 있는 이슈 중 나에게 할당된 이슈
- filter = "Test Filter" AND assignee = currentUser()