Jira 커넥터

Jira Cloud 인스턴스를 Brevo에 연결하여 Tajo를 통해 고객 대면 이슈 추적, 지원 티켓 가시성, 프로젝트 마일스톤 알림을 구현하세요.

개요

속성
플랫폼Jira Cloud
카테고리Custom
설정 난이도보통
공식 통합아니오
동기화되는 데이터이슈, 프로젝트, 사용자, 이벤트
API 유형REST API v3
인증OAuth 2.0 (3LO) / API Token (Basic Auth)
Base URLhttps://your-domain.atlassian.net/rest/api/3/

주요 기능

  • 이슈 이벤트 동기화 - 이슈 생성, 업데이트, 해결 이벤트를 Brevo 연락처 타임라인으로 전달합니다
  • 고객 티켓 추적 - 지원 가시성을 위해 Jira 이슈를 Brevo 연락처에 연결합니다
  • 프로젝트 마일스톤 알림 - 버전 릴리스 및 스프린트 완료 시 Brevo 캠페인을 트리거합니다
  • 팀 용량 데이터 - 운영 대시보드를 위해 업무량 지표를 동기화합니다
  • 상태 변경 이벤트 - 이슈 워크플로우 전환을 Brevo 이벤트로 추적합니다
  • 코멘트 동기화 - 고객 대면 코멘트를 Brevo 활동 로그로 전달합니다

사전 준비 사항

시작하기 전에 다음 사항이 준비되어 있어야 합니다.

  1. Jira Cloud 인스턴스 (Jira Software, Jira Service Management, Jira Work Management)
  2. OAuth 앱을 생성하거나 API 토큰을 발급할 수 있는 관리자 액세스
  3. API 토큰과 연결된 Atlassian 계정 이메일
  4. API 액세스가 활성화된 Brevo 계정
  5. 활성 구독이 있는 Tajo 계정

인증

Jira Cloud는 여러 인증 방식을 지원합니다.

옵션 1: OAuth 2.0 (3LO) - 권장

  1. developer.atlassian.com으로 이동합니다
  2. Create > OAuth 2.0 integration을 클릭합니다
  3. 콜백 URL을 구성합니다: https://app.tajo.io/callbacks/jira
  4. 다음 스코프를 추가합니다.
read:jira-work
read:jira-user
write:jira-work
read:me

OAuth 2.0의 API URL 구조:

https://api.atlassian.com/ex/jira/{cloudId}/rest/api/3/{resource}

옵션 2: API Token (Basic Auth)

  1. id.atlassian.com/manage/api-tokens으로 이동합니다
  2. Create API token을 클릭합니다
  3. 이름을 “Tajo Integration”으로 지정합니다
Terminal window
# Basic Auth: email as username, API token as password
curl -X GET "https://your-domain.atlassian.net/rest/api/3/myself" \
-u "[email protected]:$JIRA_API_TOKEN" \
-H "Accept: application/json"

API 토큰 제한

API 토큰은 개별 사용자 계정에 연결됩니다. 사용자가 비활성화되면 통합이 중단됩니다. 프로덕션 배포에는 OAuth 2.0을 사용하세요.

Tajo에 연결

Terminal window
# Using OAuth 2.0
tajo connectors install jira \
--client-id $JIRA_CLIENT_ID \
--client-secret $JIRA_CLIENT_SECRET \
--cloud-id $JIRA_CLOUD_ID
# Using API Token
tajo connectors install jira \
--site-url your-domain.atlassian.net \
--api-token $JIRA_API_TOKEN

설정

기본 설정

connectors:
jira:
enabled: true
site_url: "your-domain.atlassian.net"
auth_type: "oauth2" # or "basic"
sync:
issues: true
projects: true
users: true
comments: true
worklogs: false
projects:
- key: "SUPPORT"
sync_to_list: 22
- key: "PRODUCT"
sync_to_list: 23
issue_types:
- Bug
- Story
- Task
- Support Request

필드 매핑

Jira 이슈 및 사용자 필드를 Brevo 속성에 매핑합니다.

field_mapping:
# User fields
accountId: JIRA_ACCOUNT_ID
emailAddress: email
displayName: FIRSTNAME
# Issue fields mapped to contact events
issue_key: LAST_TICKET_KEY
issue_status: LAST_TICKET_STATUS
issue_priority: LAST_TICKET_PRIORITY
issue_created: LAST_TICKET_DATE
resolution: LAST_TICKET_RESOLUTION

API 엔드포인트

Tajo는 다음 Jira Cloud REST API v3 엔드포인트와 통합됩니다.

엔드포인트Method용도
/rest/api/3/searchPOSTJQL을 사용한 이슈 검색
/rest/api/3/issue/{issueIdOrKey}GET이슈 세부 정보 조회
/rest/api/3/issuePOST이슈 생성
/rest/api/3/projectGET모든 프로젝트 목록
/rest/api/3/project/{projectIdOrKey}GET프로젝트 세부 정보 조회
/rest/api/3/user/searchGET사용자 검색
/rest/api/3/myselfGET현재 사용자 조회
/rest/api/3/issue/{issueIdOrKey}/commentGET이슈 코멘트 조회
/rest/api/3/webhookPOST웹훅 등록
/rest/api/3/statusGET모든 상태 조회
/rest/api/3/priorityGET모든 우선순위 조회

코드 예제

커넥터 초기화

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('jira', {
clientId: process.env.JIRA_CLIENT_ID,
clientSecret: process.env.JIRA_CLIENT_SECRET,
cloudId: process.env.JIRA_CLOUD_ID
});

지원 이슈 동기화

// Sync Jira support issues to Brevo contacts
await tajo.connectors.sync('jira', {
type: 'incremental',
resources: ['issues'],
jql: 'project = SUPPORT AND updated >= -24h',
batchSize: 50
});
const status = await tajo.connectors.status('jira');
console.log(status);
// {
// connected: true,
// lastSync: '2024-03-15T12:00:00Z',
// issuesTracked: 4560,
// projectsMonitored: 3,
// usersLinked: 890
// }

Jira 웹훅 처리

app.post('/webhooks/jira', async (req, res) => {
const event = req.body;
await tajo.connectors.handleWebhook('jira', {
event: event.webhookEvent,
payload: {
issueKey: event.issue?.key,
issueType: event.issue?.fields?.issuetype?.name,
status: event.issue?.fields?.status?.name,
reporter: event.issue?.fields?.reporter?.emailAddress,
assignee: event.issue?.fields?.assignee?.emailAddress
}
});
res.status(200).send('OK');
});

고객별 이슈 검색

// Find all issues reported by a specific customer
const issues = await tajo.connectors.query('jira', {
jql: 'reporter = "[email protected]" ORDER BY created DESC',
maxResults: 20,
fields: ['summary', 'status', 'priority', 'created']
});

요청 제한

Jira Cloud는 플랫폼 안정성을 위해 요청 제한을 적용합니다.

컨텍스트요청 제한
REST API사용자당 10초당 약 100회
동시 요청장시간 실행 요청 동시 10개
대량 작업엔드포인트에 따라 다름

페이지네이션

Jira는 startAtmaxResults 파라미터를 사용한 오프셋 기반 페이지네이션을 사용합니다. 기본 페이지 크기는 50이며 최대 100입니다. Tajo는 페이지네이션을 자동으로 처리합니다.

요청 제한을 초과하면 Jira는 재시도 시점을 나타내는 Retry-After 헤더와 함께 429 Too Many Requests 응답을 반환합니다.

문제 해결

일반적인 문제

문제원인해결 방법
401 Unauthorized유효하지 않은 토큰 또는 만료된 OAuthOAuth 토큰을 새로 고치거나 API 토큰을 재생성하세요
403 Forbidden권한 부족사용자가 요청된 프로젝트에 액세스 권한이 있는지 확인하세요
JQL 오류유효하지 않은 쿼리 구문먼저 Jira 이슈 검색에서 JQL을 검증하세요
웹훅 수신 안 됨방화벽 차단웹훅 URL이 공개적으로 접근 가능한지 확인하세요
필드 누락응답에 필드가 없음fields 파라미터에 필드를 추가하거나 expand를 사용하세요

디버그 모드

connectors:
jira:
debug: true
log_level: verbose
log_api_calls: true

연결 테스트

Terminal window
tajo connectors test jira
# ✓ API authentication successful
# ✓ Project access verified
# ✓ Issue search operational
# ✓ User lookup available
# ✓ Webhook registration active

모범 사례

  1. 프로덕션에는 OAuth 2.0 사용 - 개별 사용자 계정에 대한 의존성을 피합니다
  2. JQL로 필터링 - API 호출을 줄이기 위해 관련 이슈만 동기화하세요
  3. 실시간을 위해 웹훅 사용 - 폴링을 피하고 이슈 변경에 웹훅을 등록하세요
  4. ADF 형식 준수 - Jira v3는 리치 텍스트 필드에 Atlassian Document Format을 사용합니다
  5. 프로젝트-리스트 매핑 - Jira 프로젝트별로 별도의 Brevo 리스트를 생성하세요
  6. 페이지네이션 처리 - 완전한 데이터를 위해 항상 모든 페이지를 순회하세요

보안

  • OAuth 2.0 (3LO) - 리프레시 토큰이 포함된 안전한 토큰 기반 인증
  • API Token + Basic Auth - HTTPS를 통한 Base64 인코딩된 자격 증명
  • HTTPS 전용 - 모든 API 통신은 TLS 1.2+를 통해 암호화됩니다
  • 스코프 액세스 - OAuth 스코프는 API 액세스를 필요한 리소스로 제한합니다
  • Atlassian Cloud 보안 - SOC 2 Type II 인증 인프라
  • 암호화된 저장소 - Tajo의 자격 증명은 저장 시 암호화됩니다

관련 리소스

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI 어시스턴트

안녕하세요! 문서에 대해 무엇이든 물어보세요.