# 그누보드 데이터 구조 설계 문서

---

## 1. 전체 서버 구조

```
외부 플랫폼 API (업비트 등)
    ↓ 한번 구걸
플랫폼 테이블 (서버 내 휘발/덮어쓰기)
    ↓ 서버 내부에서 요리
원장 DB (데이터 수집 DB) ← 핵심. 절대 건드리지 않음
    ↓ VIEW
그누보드 DB (모니터/표시용)
```

- 외부 API 호출은 딱 한번, 이후 모든 처리는 서버 내부
- 원장은 건드리지 않는 것이 원칙

---

## 2. DB 구성

| DB | 용도 |
|----|------|
| DB 1 | 기존 데이터 수집 원장 DB |
| DB 2 | 기존 그누보드 DB |
| DB 3 | 신규 그누보드 A (개인 자산용) |
| DB 4 | 신규 그누보드 B (공개 모니터 출력용) |

- 그누보드 추가 시 DB도 별도로 추가
- 그누보드 코어 파일은 심볼릭 링크로 하나만 관리
- config.php와 data 디렉토리만 각자 독립

---

## 3. 그누보드 게시판 구조 설계

### 3-1. 기본 원칙
- 그누보드 게시판 테이블: `g5_write_게시판아이디`
- 게시판은 중요 데이터를 직접 보유하지 않음
- 원장 DB 데이터를 VIEW로 가져다 씀
- 게시판이 날아가도 원장은 안전

### 3-2. VIEW 구조
```sql
CREATE VIEW v_게시판아이디 AS
SELECT
    g.wr_id,
    g.wr_num,
    o.컬럼1,
    o.컬럼2,
    o.컬럼3
FROM g5_write_게시판아이디 g
LEFT JOIN 원장DB.테이블 o ON g.wr_id = o.id
```

- 게시판 테이블에는 wr_id, wr_num만 존재
- 나머지 데이터는 전부 VIEW로 원장에서 가져옴
- 새 데이터 필요 시 VIEW에 컬럼 추가하면 끝
- 그누보드에서 `$view['컬럼명']`으로 바로 사용 가능

### 3-3. wr_id / wr_num 규칙
- wr_id = 원장 id 값
- wr_num = 원장 id * -1
- 행 추가 시 이 두 개만 박으면 나머지는 VIEW가 자동으로 채움

---

## 4. 행 자동 추가 — MariaDB 이벤트

### 4-1. 결정 근거

| 방식 | 장점 | 단점 |
|------|------|------|
| 트리거 | - | 원장 볼모, 오류 시 수집 중단 → 탈락 |
| 크론잡 | 단순 | 분봉 수준이면 사실상 데몬 |
| 데몬 | 실패감지, 재시도 가능 | CPU 부담, 직접 제작 필요 |
| MariaDB 이벤트 | 기존 기능 활용, 속 안 썩음 | 메모리 상시 사용 |

**결정: MariaDB 이벤트**
- 게시판 약 30개, 분봉 필요한 게시판 약 10개 수준
- 행 추가가 전부라 부하 거의 없음
- 게시판마다 실행 시간 분산 배치

### 4-2. 이벤트 구조
```sql
-- 이벤트 하나에서 게시판별 주기 다르게 처리
-- 게시판 추가 시 해당 라인 하나만 추가하면 끝

INSERT INTO g5_write_일봉코인 (wr_id, wr_num)
SELECT id, id * -1 FROM 원장DB.테이블
WHERE id NOT IN (SELECT wr_id FROM g5_write_일봉코인);
```

### 4-3. 게시판별 이벤트 주기
- 분봉 게시판 (~10개): 10분 간격
- 시간봉 게시판: 1시간 간격
- 일봉 게시판: 하루 1회 (게시판마다 시간 분산)

### 4-4. 초기 데이터 세팅
- 10년치 히스토리: 최초 1회 INSERT로 밀어넣기
- 이후 마리아 이벤트가 주기적으로 신규 행 추가

---

## 5. 데이터 활용 구조

### 5-1. 그누보드에서 데이터 사용
```php
// 게시물 상세
$view['컬럼명']

// 목록 (latest 스킨 등)
$row['컬럼명']
```

### 5-2. 다중 데이터 비교
- 주식 / 미장 / 코인 비교 → VIEW에 컬럼 3개 얹고 스킨에서 연산
- 별도 테이블이나 프로그램 불필요

### 5-3. 통계 및 누적값
- 게시판 목록 자체가 시계열 누적 데이터
- 그누보드 코드에서 합계, 평균, 최대, 최소 바로 추출 가능

### 5-4. 차트
- 게시판 전체 = 전체 기간 차트 데이터
- wr_datetime 기준으로 날짜 범위 WHERE 조건으로 구간 추출
- 특정 wr_id 범위로 기간 지정 가능

---

## 6. 실시간 분봉 데이터

- 게시판은 사람이 보는 것 → 10분봉 수준으로 충분
- 실시간 분봉이 필요한 경우 → 별도 DB 호출 방식으로 처리
- 게시판에 분봉 실시간 박을 이유 없음

---

## 7. 내일 작업 순서

1. 신규 그누보드 설치 (새 DB로)
2. config.php, data 디렉토리 별도 보관
3. 나머지 파일 삭제 후 심볼릭 링크 연결
4. 개인 자산용 / 공개 모니터용 게시판 생성
5. 원장 DB VIEW 생성
6. MariaDB 이벤트 설정
7. 10년치 히스토리 초기 INSERT

---

*작성일: 2026-03-24*
