페이지 트리

 

[Jira] JQL 활용하여 Jira에서 고급 검색하기

  

Jira JQL


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. 예약문자


space (" ")

+

.

,

;

?

|

*

/

%

^

$

#

@

[

]


2. 예약어

"abort", "access", "add", "after", "alias", "all", "alter", "and", "any", "as", "asc", "audit", "avg", "before", "begin", "between", "boolean", "break", "by", "byte", "catch", "cf", "char", "character", "check", "checkpoint", "collate", "collation", "column", "commit", "connect", "continue", "count", "create", "current", "date", "decimal", "declare", "decrement", "default", "defaults", "define", "delete", "delimiter", "desc", "difference", "distinct", "divide", "do", "double", "drop", "else", "empty", "encoding", "end", "equals", "escape", "exclusive", "exec", "execute", "exists", "explain", "false", "fetch", "file", "field", "first", "float", "for", "from", "function", "go", "goto", "grant", "greater", "group", "having", "identified", "if", "immediate", "in", "increment", "index", "initial", "inner", "inout", "input", "insert", "int", "integer", "intersect", "intersection", "into", "is", "isempty", "isnull", "join", "last", "left", "less", "like", "limit", "lock", "long", "max", "min", "minus", "mode", "modify", "modulo", "more", "multiply", "next", "noaudit", "not", "notin", "nowait", "null", "number", "object", "of", "on", "option", "or", "order", "outer", "output", "power", "previous", "prior", "privileges", "public", "raise", "raw", "remainder", "rename", "resource", "return", "returns", "revoke", "right", "row", "rowid", "rownum", "rows", "select", "session", "set", "share", "size", "sqrt", "start", "strict", "string", "subtract", "sum", "synonym", "table", "then", "to", "trans", "transaction", "trigger", "true", "uid", "union", "unique", "update", "user", "validate", "values", "view", "when", "whenever", "where", "while", "with"


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()