지난 글에서 created, updated 같이 날자를 대상으로 검색하는 기능에 대해서 설명했는데 업무 이력이 많아지다보면 어떤 일을 대략 언제쯤 한 것 같은데 구체적인 날자가 기억이 안 날수 있습니다.

JIRA 의 이슈 상태 필드는 마지막 상태이므로 특정 기간의 상태를 확인하려면 별도의 방법이 필요합니다.


그래서 필드나 상태의 이전 변경 사항을 다룰수 있는 특별한 연산자가 필요한데 그게 바로 was 와 changed 연산자이며 이는 이슈의 기록(history) 필드에 대해서 검색하므로 history 검색이라고도 합니다.


Change 연산자

특정 필드 값의 변경 사항을 상세하게 검색할 수 있는 연산자로 다음과 같은 키워드를 사용할 수 있습니다. 

  • AFTER "date"
  • BEFORE "date"
  • BY "username"
  • DURING ("date1","date2")
  • ON "date"
  • FROM "oldvalue"
  • TO "newvalue"


예로 다음 JQL 은 담당자가 변경된 이슈들을 표시합니다.

assignee CHANGED
SQL


다음은 담당자가 변경된 이슈를 우선 순위와 최근 변경일을 기준으로 정렬합니다.

assignee CHANGED  order by priority, updated
SQL


여기에서 updated 와 updatedDate 가 같이 뜨는데 두 필드의 차이가 뭔지 궁금하실수 있습니다.


Atlassian 의 Jira field 관련 매뉴얼을 보면 몇 몇 필드는 alias 가 지정되어 있는데 예로 updatedDate는 updated 의 alias 이며 createdDate 도 created 의 alias 입니다.

https://support.atlassian.com/jira-service-desk-cloud/docs/advanced-search-reference-jql-fields/


그리고 duedate 도 due 의 alias 로 나중에 JQL 에 사용할 수 있는 필드의 자세한 내용이 궁금하다면 매뉴얼을 참고하시면 됩니다.

Change from

상태가 완료에서 진행중으로 변경된 이력이 있는 모든 이슈들을 표시합니다.

status CHANGED FROM "done" to  "In Progress"
SQL


칸반의 정책이 동시 진행 작업 제약을 초과한 보드가 있을 경우 이슈를 선별해서 이전 상태로 보낼 수 있다고 가정해 보겠습니다.

Change from to

다음은 제약에 초과되서 관리자가 진행중 컬럼에서 "개발하기로 선택됨" 컬럼으로 변경한 이슈들을 찾는 jql 입니다.

status CHANGED FROM "In Progress" to "selected for development"  order by created
SQL


그리고 이슈의 기록 필드를 보면 변경 이력에 "진행중" 에서 '개발하기로 선택됨' 으로 변경된 것을 확인할 수 있습니다.


Change By

다음은 우선 순위 필드가 lesstif 에 의해 바뀌었고 변경 기간은 지난 달인 이슈를 검색합니다.

priority CHANGED BY 557058:5927b3d9-d258-473f-af86-16d3214d8496 BEFORE endOfMonth(-1) AFTER startOfMonth(-1) order by priority
SQL


Change by During

BEFORE 와 AFTER 를 같이 사용할 경우 헷갈리므로 DURING 키워드를 사용해서 시작일과 종료일을 명시하는 게 가독성이 훨씬 좋습니다.

priority CHANGED BY 557058:5927b3d9-d258-473f-af86-16d3214d8496 DURING(startOfMonth(-1), endOfMonth(-1))  order by priority
SQL


듀링 연산자의 날자는 아래와 같이 yyyy-mm-dd 형태로 사용할 수도 있습니다.

priority CHANGED BY 557058:5927b3d9-d258-473f-af86-16d3214d8496 DURING ("2020-09-01","2020-09-30")
CODE

어떤 날자가 가능한지는 during 에 지정하는 날자 형식을 틀리게 입력하면 팝업 창으로 알려줍니다.

priority CHANGED BY 557058:5927b3d9-d258-473f-af86-16d3214d8496 DURING ("2020-09-01","2020-09-32")
CODE


Was 연산자

Was 는 과거에 특정 상태였거나 현재 특정 상태인 이슈들을 검색하며 changed 연산자처럼 다음과 같은 키워드들을 제공합니다.

  • BY "username"
  • BEFORE "date"
  • AFTER "date"
  • ON "date"
  • DURING ("date1","date2") - date1, date2 기간내에 상태 변경을 검색

was 

다음은 백엔드 개발자가 담당인 이슈중에 상태가 "진행중" 인 적이 있는 이슈를 검색해서 최근 변경일을 기준으로 정렬합니다.

status was "In Progress" and assignee = 557058:74566060-7fe0-47be-9ca9-9dd773514ded order by updated
SQL


다음은 lesstif 에 의해 "진행중" 상태로 변경이 되고 담당자가 백엔드 개발자인 이슈를 검색합니다.

status was "In Progress" by lesstif order by duedate
SQL
status WAS "Resolved" BY abcde-12345-fedcba DURING ("2010/01/01","2011/01/01")
CODE


was not

was 의 반대로 다음은 상태가 "In progress" 였던적이 없는 이슈를 등록일 기준으로 나열합니다.

status was not "In Progress" order by created
SQL


다음은 8월 3일 이전에는 "진행중" 상태가 아니었던 이슈들을 검색합니다.


status WAS NOT "In Progress" BEFORE "2020/08/3"
SQL


was in 

Was in 은 여러 조건들이 있을 때 사용하는 연산자로 다음은 "개발하기로 선택됨" 과 "진행중" 상태였던 적이 있는 모든 이슈들을 출력합니다.

status WAS IN ("Selected for development", "In progress")
CODE


was not in

Was not in 은 여러 조건들이 아닌 경우를 추출할때 사용하는 연산자로 다음은 "개발하기로 선택됨" 과 "진행중" 상태였던 적이 없는 모든 이슈들을 출력합니다.

status WAS not IN ("Selected for development", "In progress")
CODE


JQL 을 활용하는 유용한 예제는 JQL(JIRA Query Language) 활용법 #3 실전 사례 을 참고하세요.