RESTAPI_SERVER/README.md

9.1 KiB

REST API 서버

Oracle Database를 사용하는 Node.js Express REST API 서버입니다.

🚀 기능

🎯 핵심 기능

  • 완전한 웹 UI: API 키 발급, 데이터 관리, 모니터링 대시보드
  • 사용자 인증: JWT 토큰 기반 로그인/회원가입 시스템
  • API 키 관리: 키 생성, 권한 설정, 사용량 모니터링
  • CRUD 작업: 데이터 생성, 조회, 수정, 삭제
  • Oracle DB 연결: Oracle Database와 연결 풀 사용
  • RESTful API: 표준 REST API 엔드포인트 제공
  • 에러 핸들링: 체계적인 에러 처리 및 응답
  • CORS 지원: 크로스 오리진 요청 허용

🔐 보안 기능

  • JWT 토큰 인증: 안전한 사용자 세션 관리
  • API 키 인증: 외부 시스템 연동을 위한 API 키 시스템
  • 권한 관리: 사용자별, API 키별 세분화된 권한 제어
  • 비밀번호 해시: PBKDF2 기반 안전한 비밀번호 저장

📊 관리 기능

  • 실시간 대시보드: API 사용 통계 및 모니터링
  • 사용자 관리: 관리자 전용 사용자 관리 패널
  • API 문서: 내장된 인터랙티브 API 문서
  • 시스템 모니터링: 서버 및 데이터베이스 상태 확인

📋 요구사항

  • Node.js 14.x 이상
  • Oracle Database 접근 권한
  • Oracle Instant Client (oracledb 패키지용)

🛠 설치 및 실행

방법 1: Docker 사용 (권장) 🐳

🚀 Windows 사용자 - 간단한 실행

# 서버 시작 (빌드 포함)
start-server.bat

# 서버 중지
stop-server.bat

📋 Windows 배치 파일 목록

  • start-server.bat - 서버 빌드 및 시작 (Oracle DB 연결 실패 시 Mock DB 자동 사용)
  • stop-server.bat - 서버 중지

🗄️ 데이터베이스 옵션

  1. Mock DB (기본): Oracle DB 연결 없이 메모리 기반 데이터 사용
  2. Oracle DB: 실제 Oracle Database 연결 (Instant Client 필요)

🐧 Linux/macOS 사용자

# 실행 권한 부여 (최초 1회)
chmod +x *.sh

# 서버 시작 (빌드 포함)
./start-server.sh

# 서버 중지
./stop-server.sh

📋 Linux 스크립트 파일 목록

  • start-server.sh - 서버 빌드 및 시작 (Oracle DB 연결 실패 시 Mock DB 자동 사용)
  • stop-server.sh - 서버 중지

자세한 Docker 사용법은 DOCKER.md를 참조하세요.

방법 2: 직접 설치

1. 의존성 설치

npm install

2. Oracle Instant Client 설치

Oracle Instant Client를 시스템에 설치해야 합니다.

3. 서버 실행

# 개발 모드 (nodemon 사용)
npm run dev

# 프로덕션 모드
npm start

서버는 포트 5577에서 실행됩니다: http://localhost:5577

🌐 웹 UI 접속

브라우저에서 http://localhost:5577 접속하여 관리 대시보드를 사용할 수 있습니다.

기본 관리자 계정:

  • 사용자명: admin
  • 비밀번호: admin123!

🗄 데이터베이스 설정

연결 정보

  • 호스트: 39.117.244.52
  • 포트: 11521
  • 데이터베이스: XE
  • 사용자명: wace
  • 비밀번호: wace0909!!

테이블 구조

CREATE TABLE API_DATA (
    ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    NAME VARCHAR2(100) NOT NULL,
    DESCRIPTION VARCHAR2(500),
    DATA_VALUE CLOB,
    CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UPDATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

📡 API 엔드포인트

🔐 인증 API

  • Base URL: http://localhost:5577/auth

사용자 등록

POST /auth/register
Content-Type: application/json

{
  "username": "사용자명",
  "email": "이메일@example.com",
  "password": "비밀번호"
}

로그인

POST /auth/login
Content-Type: application/json

{
  "username": "사용자명",
  "password": "비밀번호"
}

API 키 생성

POST /auth/api-keys
Authorization: Bearer {JWT_TOKEN}
Content-Type: application/json

{
  "keyName": "키 이름",
  "permissions": ["read", "write", "delete"]
}

📊 데이터 API

  • Base URL: http://localhost:5577/api
  • 인증: API 키 또는 JWT 토큰 필요

1. 헬스 체크

GET /api/health

2. 모든 데이터 조회

GET /api/data
X-API-Key: {YOUR_API_KEY}
# 또는
Authorization: Bearer {JWT_TOKEN}

3. 특정 데이터 조회

GET /api/data/:id
X-API-Key: {YOUR_API_KEY}

4. 데이터 생성

POST /api/data
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json

{
  "name": "데이터 이름",
  "description": "데이터 설명",
  "dataValue": "데이터 값"
}

5. 데이터 수정

PUT /api/data/:id
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json

{
  "name": "수정된 이름",
  "description": "수정된 설명",
  "dataValue": "수정된 값"
}

6. 데이터 삭제

DELETE /api/data/:id
X-API-Key: {YOUR_API_KEY}

📝 응답 형식

성공 응답

{
  "success": true,
  "message": "작업 성공 메시지",
  "data": { ... }
}

에러 응답

{
  "success": false,
  "message": "에러 메시지",
  "error": "상세 에러 정보"
}

🧪 테스트 예제

cURL을 사용한 테스트

데이터 생성

curl -X POST http://localhost:5577/api/data \
  -H "Content-Type: application/json" \
  -d '{
    "name": "테스트 데이터",
    "description": "API 테스트용 데이터",
    "dataValue": "{\"test\": true}"
  }'

모든 데이터 조회

curl http://localhost:5577/api/data

특정 데이터 조회

curl http://localhost:5577/api/data/1

데이터 수정

curl -X PUT http://localhost:5577/api/data/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "수정된 데이터",
    "description": "수정된 설명",
    "dataValue": "{\"updated\": true}"
  }'

데이터 삭제

curl -X DELETE http://localhost:5577/api/data/1

🔧 설정 파일

config/database.js

Oracle Database 연결 설정이 포함되어 있습니다.

📁 프로젝트 구조

restapi-server/
├── start-server.bat         # Windows 서버 시작 스크립트
├── stop-server.bat          # Windows 서버 중지 스크립트
├── start-server.sh          # Linux 서버 시작 스크립트
├── stop-server.sh           # Linux 서버 중지 스크립트
├── config/
│   └── database.js          # DB 연결 설정
├── database/
│   ├── connection.js        # DB 연결 풀 관리
│   ├── queries.js           # SQL 쿼리 함수들
│   └── init.sql            # 테이블 생성 스크립트
├── routes/
│   ├── api.js              # 데이터 API 라우트
│   └── auth.js             # 인증 API 라우트
├── middleware/
│   └── auth.js             # 인증 미들웨어
├── public/                 # 웹 UI 정적 파일
│   ├── index.html          # 메인 대시보드 페이지
│   ├── css/
│   │   └── style.css       # 스타일시트
│   └── js/
│       └── app.js          # 프론트엔드 JavaScript
├── scripts/                 # 기타 Docker 스크립트 (선택사항)
│   ├── docker-build.bat     # Windows용 빌드 스크립트
│   ├── docker-build.sh      # Linux/macOS용 빌드 스크립트
│   ├── docker-run.bat       # Windows용 실행 스크립트
│   ├── docker-run.sh        # Linux/macOS용 실행 스크립트
│   ├── docker-run-dev.bat   # Windows용 개발 모드 스크립트
│   └── docker-run-dev.sh    # Linux/macOS용 개발 모드 스크립트
├── test/
│   └── api-test.js          # API 테스트 스크립트
├── postman/
│   └── REST-API-Collection.json # Postman 테스트 컬렉션
├── Dockerfile               # Docker 이미지 빌드 설정
├── docker-compose.yml       # Docker Compose 설정 (프로덕션)
├── docker-compose.dev.yml   # Docker Compose 설정 (개발)
├── .dockerignore           # Docker 빌드 제외 파일
├── package.json            # 프로젝트 설정
├── server.js               # 메인 서버 파일
├── README.md               # 프로젝트 문서
└── DOCKER.md               # Docker 실행 가이드

🚨 주의사항

  1. Oracle Instant Client가 올바르게 설치되어 있어야 합니다.
  2. 데이터베이스 연결 정보가 정확한지 확인하세요.
  3. 방화벽에서 포트 5577이 열려있는지 확인하세요.
  4. 프로덕션 환경에서는 보안을 위해 데이터베이스 연결 정보를 환경변수로 관리하세요.

🐛 문제 해결

Oracle Client 관련 오류

  • Oracle Instant Client가 설치되어 있는지 확인
  • 시스템 PATH에 Oracle Client 경로가 포함되어 있는지 확인

데이터베이스 연결 오류

  • 네트워크 연결 상태 확인
  • 데이터베이스 서버가 실행 중인지 확인
  • 연결 정보(호스트, 포트, 사용자명, 비밀번호)가 정확한지 확인