ERP-node/EXTERNAL_REST_API_IMPLEMENT...

9.9 KiB

외부 커넥션 관리 REST API 지원 구현 완료 보고서

📋 구현 개요

/admin/external-connections 페이지에 REST API 연결 관리 기능을 성공적으로 추가했습니다. 이제 외부 데이터베이스 연결과 REST API 연결을 탭을 통해 통합 관리할 수 있습니다.


구현 완료 사항

1. 데이터베이스 구조

파일: /Users/dohyeonsu/Documents/ERP-node/db/create_external_rest_api_connections.sql

  • external_rest_api_connections 테이블 생성
  • 인증 타입 (none, api-key, bearer, basic, oauth2) 지원
  • 헤더 정보 JSONB 저장
  • 테스트 결과 저장 (last_test_date, last_test_result, last_test_message)
  • 샘플 데이터 포함 (기상청 API, JSONPlaceholder)

2. 백엔드 구현

타입 정의

파일: backend-node/src/types/externalRestApiTypes.ts

  • ExternalRestApiConnection 인터페이스
  • ExternalRestApiConnectionFilter 인터페이스
  • RestApiTestRequest 인터페이스
  • RestApiTestResult 인터페이스
  • AuthType 타입 정의

서비스 계층

파일: backend-node/src/services/externalRestApiConnectionService.ts

  • CRUD 메서드 (getConnections, getConnectionById, createConnection, updateConnection, deleteConnection)
  • 연결 테스트 메서드 (testConnection, testConnectionById)
  • 민감 정보 암호화/복호화 (AES-256-GCM)
  • 유효성 검증
  • 인증 타입별 헤더 구성

API 라우트

파일: backend-node/src/routes/externalRestApiConnectionRoutes.ts

  • GET /api/external-rest-api-connections - 목록 조회
  • GET /api/external-rest-api-connections/:id - 상세 조회
  • POST /api/external-rest-api-connections - 연결 생성
  • PUT /api/external-rest-api-connections/:id - 연결 수정
  • DELETE /api/external-rest-api-connections/:id - 연결 삭제
  • POST /api/external-rest-api-connections/test - 연결 테스트 (데이터 기반)
  • POST /api/external-rest-api-connections/:id/test - 연결 테스트 (ID 기반)

라우트 등록

파일: backend-node/src/app.ts

  • externalRestApiConnectionRoutes import
  • /api/external-rest-api-connections 경로 등록

3. 프론트엔드 구현

API 클라이언트

파일: frontend/lib/api/externalRestApiConnection.ts

  • ExternalRestApiConnectionAPI 클래스
  • CRUD 메서드
  • 연결 테스트 메서드
  • 지원되는 인증 타입 조회

헤더 관리 컴포넌트

파일: frontend/components/admin/HeadersManager.tsx

  • 동적 키-값 추가/삭제
  • 테이블 형식 UI
  • 실시간 업데이트

인증 설정 컴포넌트

파일: frontend/components/admin/AuthenticationConfig.tsx

  • 인증 타입 선택
  • API Key 설정 (header/query 선택)
  • Bearer Token 설정
  • Basic Auth 설정
  • OAuth 2.0 설정
  • 타입별 동적 UI 표시

REST API 연결 모달

파일: frontend/components/admin/RestApiConnectionModal.tsx

  • 기본 정보 입력 (연결명, 설명, URL)
  • 헤더 관리 통합
  • 인증 설정 통합
  • 고급 설정 (타임아웃, 재시도)
  • 연결 테스트 기능
  • 테스트 결과 표시
  • 유효성 검증

REST API 연결 목록 컴포넌트

파일: frontend/components/admin/RestApiConnectionList.tsx

  • 연결 목록 테이블
  • 검색 기능 (연결명, URL)
  • 필터링 (인증 타입, 활성 상태)
  • 연결 테스트 버튼 및 결과 표시
  • 편집/삭제 기능
  • 마지막 테스트 정보 표시

메인 페이지 탭 구조

파일: frontend/app/(main)/admin/external-connections/page.tsx

  • 탭 UI 추가 (Database / REST API)
  • 데이터베이스 연결 탭 (기존 기능)
  • REST API 연결 탭 (신규 기능)
  • 탭 전환 상태 관리

🎯 주요 기능

1. 탭 전환

  • 데이터베이스 연결 관리 ↔ REST API 연결 관리 간 탭으로 전환
  • 각 탭은 독립적으로 동작

2. REST API 연결 관리

  • 연결명: 고유한 이름으로 연결 식별
  • 기본 URL: API의 베이스 URL
  • 헤더 설정: 키-값 쌍으로 HTTP 헤더 관리
  • 인증 설정: 5가지 인증 타입 지원
    • 인증 없음 (none)
    • API Key (header 또는 query parameter)
    • Bearer Token
    • Basic Auth
    • OAuth 2.0

3. 연결 테스트

  • 저장 전 연결 테스트 가능
  • 테스트 엔드포인트 지정 가능 (선택)
  • 응답 시간, 상태 코드 표시
  • 테스트 결과 데이터베이스 저장

4. 보안

  • 민감 정보 암호화 (API 키, 토큰, 비밀번호)
  • AES-256-GCM 알고리즘 사용
  • 환경 변수로 암호화 키 관리

📁 생성된 파일 목록

데이터베이스

  • db/create_external_rest_api_connections.sql

백엔드

  • backend-node/src/types/externalRestApiTypes.ts
  • backend-node/src/services/externalRestApiConnectionService.ts
  • backend-node/src/routes/externalRestApiConnectionRoutes.ts

프론트엔드

  • frontend/lib/api/externalRestApiConnection.ts
  • frontend/components/admin/HeadersManager.tsx
  • frontend/components/admin/AuthenticationConfig.tsx
  • frontend/components/admin/RestApiConnectionModal.tsx
  • frontend/components/admin/RestApiConnectionList.tsx

수정된 파일

  • backend-node/src/app.ts (라우트 등록)
  • frontend/app/(main)/admin/external-connections/page.tsx (탭 구조)

🚀 사용 방법

1. 데이터베이스 테이블 생성

SQL 스크립트를 실행하세요:

psql -U postgres -d your_database -f db/create_external_rest_api_connections.sql

2. 백엔드 재시작

암호화 키 환경 변수 설정 (선택):

export DB_PASSWORD_SECRET="your-secret-key-32-characters-long"

백엔드 재시작:

cd backend-node
npm run dev

3. 프론트엔드 접속

브라우저에서 다음 URL로 접속:

http://localhost:3000/admin/external-connections

4. REST API 연결 추가

  1. "REST API 연결" 탭 클릭
  2. "새 연결 추가" 버튼 클릭
  3. 연결 정보 입력:
    • 연결명 (필수)
    • 기본 URL (필수)
    • 헤더 설정
    • 인증 설정
  4. 연결 테스트 (선택)
  5. 저장

🧪 테스트 시나리오

테스트 1: 인증 없는 공개 API

연결명: JSONPlaceholder
기본 URL: https://jsonplaceholder.typicode.com
인증 타입: 인증 없음
테스트 엔드포인트: /posts/1

테스트 2: API Key (Query Parameter)

연결명: 기상청 API
기본 URL: https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0
인증 타입: API Key
키 위치: Query Parameter
키 이름: serviceKey
키 값: [your-api-key]
테스트 엔드포인트: /getUltraSrtNcst

테스트 3: Bearer Token

연결명: GitHub API
기본 URL: https://api.github.com
인증 타입: Bearer Token
토큰: ghp_your_token_here
헤더:
  - Accept: application/vnd.github.v3+json
  - User-Agent: YourApp
테스트 엔드포인트: /user

🔧 고급 설정

타임아웃 설정

  • 기본값: 30000ms (30초)
  • 범위: 1000ms ~ 120000ms

재시도 설정

  • 재시도 횟수: 0~5회
  • 재시도 간격: 100ms ~ 10000ms

헤더 관리

  • 동적 추가/삭제
  • 일반적인 헤더:
    • Content-Type: application/json
    • Accept: application/json
    • User-Agent: YourApp/1.0

🔒 보안 고려사항

암호화

  • API 키, 토큰, 비밀번호는 자동 암호화
  • AES-256-GCM 알고리즘 사용
  • 환경 변수 DB_PASSWORD_SECRET로 키 관리

권한

  • 관리자 권한만 접근 가능
  • 회사별 데이터 분리 (company_code)

테스트 제한

  • 동시 테스트 실행 제한
  • 타임아웃 강제 적용

📊 데이터베이스 스키마

external_rest_api_connections
├── id (SERIAL PRIMARY KEY)
├── connection_name (VARCHAR(100) UNIQUE) -- 연결명
├── description (TEXT) -- 설명
├── base_url (VARCHAR(500)) -- 기본 URL
├── default_headers (JSONB) -- 헤더 (키-값)
├── auth_type (VARCHAR(20)) -- 인증 타입
├── auth_config (JSONB) -- 인증 설정
├── timeout (INTEGER) -- 타임아웃
├── retry_count (INTEGER) -- 재시도 횟수
├── retry_delay (INTEGER) -- 재시도 간격
├── company_code (VARCHAR(20)) -- 회사 코드
├── is_active (CHAR(1)) -- 활성 상태
├── created_date (TIMESTAMP) -- 생성일
├── created_by (VARCHAR(50)) -- 생성자
├── updated_date (TIMESTAMP) -- 수정일
├── updated_by (VARCHAR(50)) -- 수정자
├── last_test_date (TIMESTAMP) -- 마지막 테스트 일시
├── last_test_result (CHAR(1)) -- 마지막 테스트 결과
└── last_test_message (TEXT) -- 마지막 테스트 메시지

🎉 완료 요약

구현 완료

  • 데이터베이스 테이블 생성
  • 백엔드 API (CRUD + 테스트)
  • 프론트엔드 UI (탭 + 모달 + 목록)
  • 헤더 관리 기능
  • 5가지 인증 타입 지원
  • 연결 테스트 기능
  • 민감 정보 암호화

테스트 완료

  • API 엔드포인트 테스트
  • UI 컴포넌트 통합
  • 탭 전환 기능
  • CRUD 작업
  • 연결 테스트

문서 완료

  • 계획서 (PHASE_EXTERNAL_CONNECTION_REST_API_ENHANCEMENT.md)
  • 완료 보고서 (본 문서)
  • SQL 스크립트 (주석 포함)

🚀 다음 단계 (선택 사항)

향후 확장 가능성

  1. 엔드포인트 프리셋 관리

    • 자주 사용하는 엔드포인트 저장
    • 빠른 호출 지원
  2. 요청 템플릿

    • HTTP 메서드별 요청 바디 템플릿
    • 변수 치환 기능
  3. 응답 매핑

    • API 응답을 내부 데이터 구조로 변환
    • 매핑 룰 설정
  4. 로그 및 모니터링

    • API 호출 이력 기록
    • 응답 시간 모니터링
    • 오류율 추적

구현 완료일: 2025-10-21
버전: 1.0
개발자: AI Assistant
상태: 완료