TJEdu 교육용 서버 · ctrlcv.kr

데이터베이스 API 사용 설명서

포털로 돌아가기

이 문서는 교육용 서버에서 본인 MariaDB 데이터베이스를 HTTPS API로 조회·조작하는 방법을 설명합니다. 교육생·강사·관리자 계정 모두 호스팅 페이지에서 본인 개인 DB 토큰을 발급할 수 있습니다.

엔드포인트 https://ctrlcv.kr/db_api.php

메서드 POST · Content-Type: application/json

인증 Authorization: Bearer <토큰>

1. 토큰 발급

  1. 교육용 서버 포털에 로그인합니다.
  2. 호스팅 메뉴 → 자원 정보 및 계정 초기화 섹션으로 이동합니다.
  3. 데이터베이스 API 토큰에서 새 토큰 발급을 누릅니다.
  4. 화면에 표시된 토큰을 안전한 곳에 복사합니다. 이후에는 다시 볼 수 없습니다.
  5. 유출이 의심되면 해당 토큰을 폐기한 뒤 새로 발급하세요. 활성 토큰은 최대 5개입니다.

토큰은 발급 계정(본인)의 데이터베이스에만 연결됩니다. 다른 학생/강사 DB나 관리 DB에는 접근할 수 없습니다. 강사도 교육생과 동일하게 본인 DB만 사용할 수 있습니다.

2. 인증 방법

모든 요청에 HTTP 헤더로 토큰을 넣습니다.

Authorization: Bearer tjedu_xxxxxxxx...

계정 상태가 승인(정상) 등이 아니면 API가 거부됩니다.

3. 요청 형식 (action)

본문은 JSON 객체입니다. action 필드로 동작을 지정합니다.

ping — 연결 확인

{
  "action": "ping"
}

사용자명, DB 이름, 요청 한도 정보를 반환합니다.

tables — 테이블 목록

{
  "action": "tables"
}

schema — 테이블 구조

{
  "action": "schema",
  "table": "users"
}

query — SQL 실행

{
  "action": "query",
  "sql": "SELECT * FROM users LIMIT 10"
}

4. 허용·금지 SQL (보안 규칙)

허용 (예)

  • SELECT, SHOW, DESCRIBE, EXPLAIN
  • INSERT, UPDATE, DELETE, REPLACE
  • CREATE / ALTER / DROP TABLE, INDEX, VIEW
  • TRUNCATE, RENAME TABLE
  • 제한된 SET (NAMES, sql_mode 등)

금지 (예)

  • 한 요청에 여러 SQL 문 (; 연속 실행)
  • GRANT, CREATE USER, DROP DATABASE
  • LOAD_FILE, INTO OUTFILE, SLEEP 등
  • USE 다른 DB, 다른 스키마 참조
  • 관리용 DB (예: tjedu_portal) 접근

5. 호출 예시

curl (터미널)

curl -s https://ctrlcv.kr/db_api.php \
  -H "Authorization: Bearer 여기에_토큰" \
  -H "Content-Type: application/json" \
  -d "{\"action\":\"query\",\"sql\":\"SHOW TABLES\"}"

테이블 생성 후 조회

# 1) 테이블 생성
curl -s https://ctrlcv.kr/db_api.php \
  -H "Authorization: Bearer 여기에_토큰" \
  -H "Content-Type: application/json" \
  -d "{\"action\":\"query\",\"sql\":\"CREATE TABLE IF NOT EXISTS memo (id INT AUTO_INCREMENT PRIMARY KEY, body VARCHAR(200))\"}"

# 2) 데이터 넣기
curl -s https://ctrlcv.kr/db_api.php \
  -H "Authorization: Bearer 여기에_토큰" \
  -H "Content-Type: application/json" \
  -d "{\"action\":\"query\",\"sql\":\"INSERT INTO memo (body) VALUES ('hello')\"}"

# 3) 조회
curl -s https://ctrlcv.kr/db_api.php \
  -H "Authorization: Bearer 여기에_토큰" \
  -H "Content-Type: application/json" \
  -d "{\"action\":\"query\",\"sql\":\"SELECT * FROM memo\"}"

응답 형태 (성공 시 예)

{
  "success": true,
  "kind": "SELECT",
  "database": "내아이디",
  "row_count": 1,
  "rows": [ { "id": 1, "body": "hello" } ],
  "duration_ms": 2,
  "sql_executed": "SELECT * FROM memo LIMIT 200"
}

실패 시 success: falseerror 메시지가 반환됩니다.

6. 웹(PHP) 접속과의 차이

방식 용도 접속
PHP + PDO / mysqli 사이트·과제 코드 안에서 DB 사용 localhost, 가입 시 DB 비밀번호
데이터베이스 API 원격에서 SQL 테스트·스키마 준비·도구 연동 HTTPS + Bearer 토큰
외부 DB 클라이언트 HeidiSQL 등 PC에서 직접 접속 불가 (MariaDB는 서버 내부만 수신)