Deploy: exdev sync 2026-08-13 13:38:36

This commit is contained in:
bkyungee
2026-08-13 13:38:36 +09:00
parent fab7a5ba49
commit f15b666da9
47 changed files with 17539 additions and 17539 deletions
Regular → Executable
+111 -111
View File
@@ -1,111 +1,111 @@
# exdev TROAD Oracle (Docker)
개발서버(`chatbot.exdev.co.kr`)에서 교통정보(TROAD) 조회용 Oracle 을 Docker 로 기동합니다.
## 접속 정보 (chatbotApi 와 동일)
| 항목 | 값 |
|------|-----|
| JDBC URL | `jdbc:oracle:thin:@localhost:1521/orcl2` |
| Username | `OPR_MAIN` |
| Password | `test` |
| Image | `gvenzl/oracle-free:23-slim` (Oracle Database Free 23ai) |
| Container | `exaichatbot-agent-oracle-troad` |
| Volume | `exaichatbot-agent-oracle-troad-data` |
`application.yml` 의 기본값은 운영 TROAD(`172.16.163.76`)를 유지합니다.
개발서버에서는 `start-all-server.sh` 가 아래 ENV 로만 localhost Oracle 을 주입합니다
(`SPRING_DATASOURCE_TROAD_URL` / `_USERNAME` / `_PASSWORD`).
`git_fetch_all.sh` 는 커밋 전 yml 을 운영값으로 되돌리므로 exdev 설정이 GitHub에 반영되지 않습니다.
개발서버가 Apple Silicon(arm64) 이므로 amd64 전용인 `gvenzl/oracle-xe:21` 대신
arm64 를 지원하는 `gvenzl/oracle-free:23-slim` 을 사용합니다.
SYS/SYSTEM 비밀번호 기본값: `OracleExdev!2026`
(`ORACLE_SYS_PASSWORD` 환경변수로 변경 가능)
## 기동 / 중지
`start-all-server.sh` / `stop-all-server.sh` 에 포함됩니다.
기동 후 교통정보 뷰가 비어 있으면 `apply-sql.sh` 가 자동 실행됩니다.
```bash
# 수동
cd /Users/aidev/dev/exAichatbot_agent/server-dev
docker compose -f docker-compose.oracle.yml up -d
docker compose -f docker-compose.oracle.yml down
# 데이터 볼륨까지 삭제
docker compose -f docker-compose.oracle.yml down -v
# 또는
./stop-all-server.sh --purge-oracle
```
옵션:
| 옵션 | 설명 |
|------|------|
| `start-all-server.sh --skip-oracle` | Oracle 기동 생략 |
| `stop-all-server.sh --purge-oracle` | 컨테이너 + 데이터 볼륨 삭제 |
## 디렉터리 구성
| 경로 | 설명 |
|------|------|
| `init/` | 컨테이너 최초 초기화 시 1회 실행 (OPR_MAIN 권한 부여) |
| `sql/` | 업무 객체 DDL + 데이터 (파일명 순서로 적용) |
| `data/` | 원본 CSV 덤프 |
| `tools/csv_to_insert.py` | CSV → INSERT 스크립트 변환 |
| `apply-sql.sh` | 컨테이너에 `sql/*.sql` 적용 + 결과 검증 |
## 업무 객체 적용
```bash
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
# sql/ 전체 적용
./apply-sql.sh
# 특정 파일만
./apply-sql.sh sql/10_v_incident_ftms.sql sql/20_v_incident_ftms_data.sql
```
### 적용된 객체
| 객체 | 설명 |
|------|------|
| `OPR_MAIN.T_INCIDENT_FTMS` | 뷰의 원본 데이터 테이블 (17 컬럼 + `LOADED_AT`) |
| `OPR_MAIN.V_INCIDENT_FTMS` | 운영과 동일한 컬럼·순서의 조회용 뷰 |
| `PUBLIC SYNONYM V_INCIDENT_FTMS` | 스키마 미지정 조회 지원 |
| `TLISDEV.T_TRMB_CD_INFO01M1` | 공통코드 (노선명 COM064 등) |
| `TROAD_APP.V_ROUTE_NEW_NM` | 노선명 조회 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
| `TROAD_APP.V_ROUTE_TRFC_VER001` | 노선별 교통상황 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
| `TROAD_APP.V_ACDT_BRNWS_VER001` | 교통속보 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
| `OPR_MAIN.V_ROUTE_*` / `V_ACDT_*` | 스키마 미지정 조회용 미러 뷰 |
운영 뷰는 다수 기반 테이블을 참조하는 읽기 전용 뷰입니다. 개발서버에는 기반 테이블이
없으므로, 뷰 결과 CSV를 물리 테이블에 적재하고 동일 이름 뷰로 노출해
**기존 조회 로직/SQL을 변경하지 않고** 동작하게 합니다.
### 다른 CSV 덤프 추가
```bash
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
python3 tools/csv_to_insert.py data/<파일>.csv \
--table OPR_MAIN.<테이블> \
--numeric <숫자컬럼,콤마구분> \
--out sql/<번호>_<이름>_data.sql
./apply-sql.sh sql/<번호>_<이름>_data.sql
```
## 검증
```bash
docker exec -e NLS_LANG=.AL32UTF8 -it exaichatbot-agent-oracle-troad \
sqlplus OPR_MAIN/test@localhost:1521/ORCL2
SQL> SELECT COUNT(*) FROM V_INCIDENT_FTMS;
SQL> SELECT INCIDENT_TYPE, COUNT(*) FROM V_INCIDENT_FTMS GROUP BY INCIDENT_TYPE;
```
한글 데이터 조회 시 `NLS_LANG=.AL32UTF8` 을 지정해야 깨지지 않습니다.
# exdev TROAD Oracle (Docker)
개발서버(`chatbot.exdev.co.kr`)에서 교통정보(TROAD) 조회용 Oracle 을 Docker 로 기동합니다.
## 접속 정보 (chatbotApi 와 동일)
| 항목 | 값 |
|------|-----|
| JDBC URL | `jdbc:oracle:thin:@localhost:1521/orcl2` |
| Username | `OPR_MAIN` |
| Password | `test` |
| Image | `gvenzl/oracle-free:23-slim` (Oracle Database Free 23ai) |
| Container | `exaichatbot-agent-oracle-troad` |
| Volume | `exaichatbot-agent-oracle-troad-data` |
`application.yml` 의 기본값은 운영 TROAD(`172.16.163.76`)를 유지합니다.
개발서버에서는 `start-all-server.sh` 가 아래 ENV 로만 localhost Oracle 을 주입합니다
(`SPRING_DATASOURCE_TROAD_URL` / `_USERNAME` / `_PASSWORD`).
`git_fetch_all.sh` 는 커밋 전 yml 을 운영값으로 되돌리므로 exdev 설정이 GitHub에 반영되지 않습니다.
개발서버가 Apple Silicon(arm64) 이므로 amd64 전용인 `gvenzl/oracle-xe:21` 대신
arm64 를 지원하는 `gvenzl/oracle-free:23-slim` 을 사용합니다.
SYS/SYSTEM 비밀번호 기본값: `OracleExdev!2026`
(`ORACLE_SYS_PASSWORD` 환경변수로 변경 가능)
## 기동 / 중지
`start-all-server.sh` / `stop-all-server.sh` 에 포함됩니다.
기동 후 교통정보 뷰가 비어 있으면 `apply-sql.sh` 가 자동 실행됩니다.
```bash
# 수동
cd /Users/aidev/dev/exAichatbot_agent/server-dev
docker compose -f docker-compose.oracle.yml up -d
docker compose -f docker-compose.oracle.yml down
# 데이터 볼륨까지 삭제
docker compose -f docker-compose.oracle.yml down -v
# 또는
./stop-all-server.sh --purge-oracle
```
옵션:
| 옵션 | 설명 |
|------|------|
| `start-all-server.sh --skip-oracle` | Oracle 기동 생략 |
| `stop-all-server.sh --purge-oracle` | 컨테이너 + 데이터 볼륨 삭제 |
## 디렉터리 구성
| 경로 | 설명 |
|------|------|
| `init/` | 컨테이너 최초 초기화 시 1회 실행 (OPR_MAIN 권한 부여) |
| `sql/` | 업무 객체 DDL + 데이터 (파일명 순서로 적용) |
| `data/` | 원본 CSV 덤프 |
| `tools/csv_to_insert.py` | CSV → INSERT 스크립트 변환 |
| `apply-sql.sh` | 컨테이너에 `sql/*.sql` 적용 + 결과 검증 |
## 업무 객체 적용
```bash
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
# sql/ 전체 적용
./apply-sql.sh
# 특정 파일만
./apply-sql.sh sql/10_v_incident_ftms.sql sql/20_v_incident_ftms_data.sql
```
### 적용된 객체
| 객체 | 설명 |
|------|------|
| `OPR_MAIN.T_INCIDENT_FTMS` | 뷰의 원본 데이터 테이블 (17 컬럼 + `LOADED_AT`) |
| `OPR_MAIN.V_INCIDENT_FTMS` | 운영과 동일한 컬럼·순서의 조회용 뷰 |
| `PUBLIC SYNONYM V_INCIDENT_FTMS` | 스키마 미지정 조회 지원 |
| `TLISDEV.T_TRMB_CD_INFO01M1` | 공통코드 (노선명 COM064 등) |
| `TROAD_APP.V_ROUTE_NEW_NM` | 노선명 조회 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
| `TROAD_APP.V_ROUTE_TRFC_VER001` | 노선별 교통상황 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
| `TROAD_APP.V_ACDT_BRNWS_VER001` | 교통속보 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
| `OPR_MAIN.V_ROUTE_*` / `V_ACDT_*` | 스키마 미지정 조회용 미러 뷰 |
운영 뷰는 다수 기반 테이블을 참조하는 읽기 전용 뷰입니다. 개발서버에는 기반 테이블이
없으므로, 뷰 결과 CSV를 물리 테이블에 적재하고 동일 이름 뷰로 노출해
**기존 조회 로직/SQL을 변경하지 않고** 동작하게 합니다.
### 다른 CSV 덤프 추가
```bash
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
python3 tools/csv_to_insert.py data/<파일>.csv \
--table OPR_MAIN.<테이블> \
--numeric <숫자컬럼,콤마구분> \
--out sql/<번호>_<이름>_data.sql
./apply-sql.sh sql/<번호>_<이름>_data.sql
```
## 검증
```bash
docker exec -e NLS_LANG=.AL32UTF8 -it exaichatbot-agent-oracle-troad \
sqlplus OPR_MAIN/test@localhost:1521/ORCL2
SQL> SELECT COUNT(*) FROM V_INCIDENT_FTMS;
SQL> SELECT INCIDENT_TYPE, COUNT(*) FROM V_INCIDENT_FTMS GROUP BY INCIDENT_TYPE;
```
한글 데이터 조회 시 `NLS_LANG=.AL32UTF8` 을 지정해야 깨지지 않습니다.