이 문서는 교육용 서버에서 본인 MariaDB 데이터베이스를 HTTPS API로 조회·조작하는 방법을 설명합니다. 교육생·강사·관리자 계정 모두 호스팅 페이지에서 본인 개인 DB 토큰을 발급할 수 있습니다.
엔드포인트 https://ctrlcv.kr/db_api.php
메서드 POST · Content-Type: application/json
인증 Authorization: Bearer <토큰>
1. 토큰 발급
- 교육용 서버 포털에 로그인합니다.
- 호스팅 메뉴 → 자원 정보 및 계정 초기화 섹션으로 이동합니다.
- 데이터베이스 API 토큰에서 새 토큰 발급을 누릅니다.
- 화면에 표시된 토큰을 안전한 곳에 복사합니다. 이후에는 다시 볼 수 없습니다.
- 유출이 의심되면 해당 토큰을 폐기한 뒤 새로 발급하세요. 활성 토큰은 최대 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) 접근
- 요청당 SQL 한 문장만 가능합니다.
- SELECT에 LIMIT가 없으면 서버가 최대 200행으로 제한할 수 있습니다.
- SQL 길이 최대 약 8KB, 분당 요청 약 60회/토큰, 실행 시간 제한이 있습니다.
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: false 와 error 메시지가 반환됩니다.
6. 웹(PHP) 접속과의 차이
| 방식 | 용도 | 접속 |
|---|---|---|
| PHP + PDO / mysqli | 사이트·과제 코드 안에서 DB 사용 | localhost, 가입 시 DB 비밀번호 |
| 데이터베이스 API | 원격에서 SQL 테스트·스키마 준비·도구 연동 | HTTPS + Bearer 토큰 |
| 외부 DB 클라이언트 | HeidiSQL 등 PC에서 직접 접속 | 불가 (MariaDB는 서버 내부만 수신) |