This reverts commit 50c5039ec0.
4.2 KiB
Executable File
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 가 자동 실행됩니다.
# 수동
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 적용 + 결과 검증 |
업무 객체 적용
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 덤프 추가
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
검증
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 을 지정해야 깨지지 않습니다.