214 lines
6.1 KiB
Markdown
214 lines
6.1 KiB
Markdown
# REST API 연결 관리 기능 구현 완료
|
|
|
|
## 구현 개요
|
|
|
|
외부 커넥션 관리 페이지(`/admin/external-connections`)에 REST API 연결 관리 기능이 추가되었습니다.
|
|
기존의 데이터베이스 연결 관리와 함께 REST API 연결도 관리할 수 있도록 탭 기반 UI가 구현되었습니다.
|
|
|
|
## 구현 완료 사항
|
|
|
|
### 1. 데이터베이스 (✅ 완료)
|
|
|
|
**파일**: `/db/create_external_rest_api_connections.sql`
|
|
|
|
- `external_rest_api_connections` 테이블 생성
|
|
- 연결 정보, 인증 설정, 테스트 결과 저장
|
|
- JSONB 타입으로 헤더 및 인증 설정 유연하게 관리
|
|
- 인덱스 최적화 (company_code, is_active, auth_type, JSONB GIN 인덱스)
|
|
|
|
**실행 방법**:
|
|
|
|
```bash
|
|
# PostgreSQL 컨테이너에 접속하여 SQL 실행
|
|
docker exec -i esgrin-mes-db psql -U postgres -d ilshin < db/create_external_rest_api_connections.sql
|
|
```
|
|
|
|
### 2. 백엔드 구현 (✅ 완료)
|
|
|
|
#### 2.1 타입 정의
|
|
|
|
**파일**: `backend-node/src/types/externalRestApiTypes.ts`
|
|
|
|
- `ExternalRestApiConnection`: REST API 연결 정보 인터페이스
|
|
- `RestApiTestRequest`: 연결 테스트 요청 인터페이스
|
|
- `RestApiTestResult`: 테스트 결과 인터페이스
|
|
- `AuthType`: 인증 타입 (none, api-key, bearer, basic, oauth2)
|
|
- 각 인증 타입별 세부 설정 인터페이스
|
|
|
|
#### 2.2 서비스 레이어
|
|
|
|
**파일**: `backend-node/src/services/externalRestApiConnectionService.ts`
|
|
|
|
- CRUD 작업 구현 (생성, 조회, 수정, 삭제)
|
|
- 민감 정보 암호화/복호화 (AES-256-GCM)
|
|
- REST API 연결 테스트 기능
|
|
- 필터링 및 검색 기능
|
|
- 유효성 검증
|
|
|
|
#### 2.3 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 기반 테스트
|
|
|
|
#### 2.4 앱 통합
|
|
|
|
**파일**: `backend-node/src/app.ts`
|
|
|
|
- 새로운 라우트 등록 완료
|
|
|
|
### 3. 프론트엔드 구현 (✅ 완료)
|
|
|
|
#### 3.1 API 클라이언트
|
|
|
|
**파일**: `frontend/lib/api/externalRestApiConnection.ts`
|
|
|
|
- 백엔드 API와 통신하는 클라이언트 구현
|
|
- 타입 안전한 API 호출
|
|
- 에러 처리
|
|
|
|
#### 3.2 공통 컴포넌트
|
|
|
|
**파일**: `frontend/components/admin/HeadersManager.tsx`
|
|
|
|
- HTTP 헤더 key-value 관리 컴포넌트
|
|
- 동적 추가/삭제 기능
|
|
|
|
**파일**: `frontend/components/admin/AuthenticationConfig.tsx`
|
|
|
|
- 인증 타입별 설정 컴포넌트
|
|
- 5가지 인증 방식 지원 (none, api-key, bearer, basic, oauth2)
|
|
|
|
#### 3.3 모달 컴포넌트
|
|
|
|
**파일**: `frontend/components/admin/RestApiConnectionModal.tsx`
|
|
|
|
- 연결 추가/수정 모달
|
|
- 헤더 관리 및 인증 설정 통합
|
|
- 연결 테스트 기능
|
|
|
|
#### 3.4 목록 관리 컴포넌트
|
|
|
|
**파일**: `frontend/components/admin/RestApiConnectionList.tsx`
|
|
|
|
- REST API 연결 목록 표시
|
|
- 검색 및 필터링
|
|
- CRUD 작업
|
|
- 연결 테스트
|
|
|
|
#### 3.5 메인 페이지
|
|
|
|
**파일**: `frontend/app/(main)/admin/external-connections/page.tsx`
|
|
|
|
- 탭 기반 UI 구현 (데이터베이스 ↔ REST API)
|
|
- 기존 DB 연결 관리와 통합
|
|
|
|
## 주요 기능
|
|
|
|
### 1. 연결 관리
|
|
|
|
- REST API 연결 정보 생성/수정/삭제
|
|
- 연결명, 설명, Base URL 관리
|
|
- Timeout, Retry 설정
|
|
- 활성화 상태 관리
|
|
|
|
### 2. 인증 관리
|
|
|
|
- **None**: 인증 없음
|
|
- **API Key**: 헤더 또는 쿼리 파라미터
|
|
- **Bearer Token**: Authorization: Bearer {token}
|
|
- **Basic Auth**: username/password
|
|
- **OAuth2**: client_id, client_secret, token_url 등
|
|
|
|
### 3. 헤더 관리
|
|
|
|
- 기본 HTTP 헤더 설정
|
|
- Key-Value 형식으로 동적 관리
|
|
- Content-Type, Accept 등 자유롭게 설정
|
|
|
|
### 4. 연결 테스트
|
|
|
|
- 실시간 연결 테스트
|
|
- HTTP 응답 상태 코드 확인
|
|
- 응답 시간 측정
|
|
- 테스트 결과 저장
|
|
|
|
### 5. 보안
|
|
|
|
- 민감 정보 자동 암호화 (AES-256-GCM)
|
|
- API Key
|
|
- Bearer Token
|
|
- 비밀번호
|
|
- OAuth2 Client Secret
|
|
- 암호화된 데이터는 데이터베이스에 안전하게 저장
|
|
|
|
## 사용 방법
|
|
|
|
### 1. SQL 스크립트 실행
|
|
|
|
```bash
|
|
# PostgreSQL 컨테이너에 접속
|
|
docker exec -it esgrin-mes-db psql -U postgres -d ilshin
|
|
|
|
# 또는 파일 직접 실행
|
|
docker exec -i esgrin-mes-db psql -U postgres -d ilshin < db/create_external_rest_api_connections.sql
|
|
```
|
|
|
|
### 2. 백엔드 재시작
|
|
|
|
백엔드 서버가 자동으로 새로운 라우트를 인식합니다. (이미 재시작 완료)
|
|
|
|
### 3. 웹 UI 접속
|
|
|
|
1. `/admin/external-connections` 페이지 접속
|
|
2. "REST API 연결" 탭 선택
|
|
3. "새 연결 추가" 버튼 클릭
|
|
4. 필요한 정보 입력
|
|
- 연결명, 설명, Base URL
|
|
- 기본 헤더 설정
|
|
- 인증 타입 선택 및 인증 정보 입력
|
|
- Timeout, Retry 설정
|
|
5. "연결 테스트" 버튼으로 즉시 테스트 가능
|
|
6. 저장
|
|
|
|
### 4. 연결 관리
|
|
|
|
- **목록 조회**: 모든 REST API 연결 정보 확인
|
|
- **검색**: 연결명, 설명, URL로 검색
|
|
- **필터링**: 인증 타입, 활성화 상태로 필터링
|
|
- **수정**: 연필 아이콘 클릭하여 수정
|
|
- **삭제**: 휴지통 아이콘 클릭하여 삭제
|
|
- **테스트**: Play 아이콘 클릭하여 연결 테스트
|
|
|
|
## 기술 스택
|
|
|
|
- **Backend**: Node.js, Express, TypeScript, PostgreSQL
|
|
- **Frontend**: Next.js, React, TypeScript, Shadcn UI
|
|
- **보안**: AES-256-GCM 암호화
|
|
- **데이터**: JSONB (PostgreSQL)
|
|
|
|
## 테스트 완료
|
|
|
|
- ✅ 백엔드 컴파일 성공
|
|
- ✅ 서버 정상 실행 확인
|
|
- ✅ 타입 에러 수정 완료
|
|
- ✅ 모든 라우트 등록 완료
|
|
- ✅ 인증 토큰 자동 포함 구현 (apiClient 사용)
|
|
|
|
## 다음 단계
|
|
|
|
1. SQL 스크립트 실행
|
|
2. 프론트엔드 빌드 및 테스트
|
|
3. UI에서 연결 추가/수정/삭제/테스트 기능 확인
|
|
|
|
## 참고 문서
|
|
|
|
- 전체 계획: `PHASE_EXTERNAL_CONNECTION_REST_API_ENHANCEMENT.md`
|
|
- 기존 외부 DB 연결: `제어관리_외부커넥션_통합_기능_가이드.md`
|