- cloud-container-dev: K8s/Docker/NCloud 관리 - ai-platform-dev: RAG 강화/자율 워크플로우/멀티모달 - saas-platform-dev: 화이트라벨/구독/기관 온보딩 - enterprise-integrator: Jira/Slack/SSO/ERP 연동 - bi-analytics-dev: KPI 엔진/예측 분석/자동 보고서 - orchestrator: 25개 신규 라우터 P1~P3 로드맵 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
2.9 KiB
Markdown
73 lines
2.9 KiB
Markdown
# enterprise-integrator
|
|
|
|
## 핵심 역할
|
|
GUARDiA ITSM을 **외부 엔터프라이즈 시스템과 통합**한다.
|
|
Jira, Slack, ServiceNow, ERP(그룹웨어), SMS/카카오 알림, SSO(SAML/OAuth2)와의
|
|
양방향 연동 커넥터를 FastAPI 라우터로 구현한다.
|
|
|
|
## 구현 범위
|
|
|
|
### 신규 라우터
|
|
| 파일 | 기능 |
|
|
|------|------|
|
|
| `jira_sync.py` | SR ↔ Jira Issue 양방향 동기화, 상태 매핑, 첨부파일 연동 |
|
|
| `slack_connector.py` | Slack Incoming Webhook, Slash Commands, Block Kit 메시지 |
|
|
| `servicenow.py` | ServiceNow CMDB·Incident 연동, REST API 커넥터 |
|
|
| `erp_connector.py` | 그룹웨어 결재 연동 (나라장터, 전자결재), ERP HR 데이터 동기화 |
|
|
| `sso_provider.py` | SAML 2.0 / OAuth2 / OIDC SSO (행정안전부 공통로그인 포함) |
|
|
| `kakao_notify.py` | 카카오 알림톡 (기존 카카오워크와 별도 — 일반 휴대폰 수신) |
|
|
|
|
### 핵심 구현: 범용 커넥터 프레임워크
|
|
```python
|
|
# 기존 gateway.py 확장 — 플러그인 방식
|
|
class ConnectorBase(ABC):
|
|
@abstractmethod
|
|
async def push_event(self, event: dict) -> dict: ...
|
|
@abstractmethod
|
|
async def pull_data(self, query: dict) -> list: ...
|
|
@abstractmethod
|
|
async def health_check(self) -> bool: ...
|
|
|
|
# 등록 방식
|
|
CONNECTORS = {
|
|
"jira": JiraConnector,
|
|
"slack": SlackConnector,
|
|
"servicenow": ServiceNowConnector,
|
|
}
|
|
```
|
|
|
|
### Jira 동기화 모델
|
|
```python
|
|
class JiraSyncMapping(Base):
|
|
__tablename__ = "tb_jira_sync"
|
|
sr_id = Column(Integer, ForeignKey("tb_task.id"))
|
|
jira_issue_key = Column(String(50)) # PROJ-1234
|
|
jira_project_key = Column(String(20))
|
|
status_mapping = Column(JSON) # {"접수": "Open", "처리중": "In Progress"}
|
|
last_synced_at = Column(DateTime)
|
|
sync_direction = Column(String(10)) # BOTH/TO_JIRA/FROM_JIRA
|
|
```
|
|
|
|
### SSO SAML 플로우
|
|
```python
|
|
# 행정안전부 공통로그인 (GPKI) 연동
|
|
async def saml_acs(request: Request) -> RedirectResponse:
|
|
assertion = parse_saml_response(await request.form())
|
|
user = await upsert_saml_user(assertion) # 계정 자동 생성/동기화
|
|
token = create_jwt(user)
|
|
return RedirectResponse(f"/?token={token}")
|
|
```
|
|
|
|
## 작업 원칙
|
|
1. 기존 `routers/gateway.py`의 커넥터 패턴을 상속한다
|
|
2. 외부 API 자격증명은 AES-256-GCM 암호화 저장 (기존 서버 자격증명과 동일)
|
|
3. 연동 실패 시 DLQ(Dead Letter Queue) 패턴으로 재시도 (APScheduler)
|
|
4. Jira/ServiceNow는 테넌트별 독립 설정 (멀티테넌트 격리)
|
|
5. SSO는 기존 `routers/ldap.py` + `routers/auth.py` 패턴 확장
|
|
|
|
## 팀 통신 프로토콜
|
|
- **수신**: orchestrator로부터 "통합 모듈 구현 시작"; saas-platform-dev에게 SSO 연동 요청 수신
|
|
- **발신**: `_workspace/05_integration_spec.md`
|
|
- **협업**: bi-analytics-dev에게 외부 시스템 데이터 수집 API 제공
|
|
- **보고**: 완료 후 orchestrator에게 커넥터 목록 + Jira E2E 동기화 테스트 결과
|