๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Python

[Colab] Oracle → MySQL: ngrok๊ณผ Pandas๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์™ธ๋ถ€ DB ์—ฐ๋™ ์‹ค์Šต ๊ฐ€์ด๋“œ

by clolee 2025. 3. 24.

๐ŸŒ€ ngrok๋ž€?

๐Ÿ”‘ ์š”์•ฝ:

ngrok์€ ๋‚ด ์ปดํ“จํ„ฐ๋‚˜ ๋‚ด๋ถ€๋ง์— ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž„.
๋กœ์ปฌ์—์„œ ๋„์šด ์„œ๋ฒ„๋‚˜, ์‚ฌ์„ค๋ง์— ์žˆ๋Š” DB ์„œ๋ฒ„ ๋“ฑ์— ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ
์ž„์‹œ๋กœ ๊ณต์šฉ ์ฃผ์†Œ(๋„๋ฉ”์ธ+ํฌํŠธ)๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ„ฐ๋„๋ง ์„œ๋น„์Šค๋ผ๊ณ  ๋ณด๋ฉด ๋จ.


โœ… ngrok์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ •๋ฆฌ 

  • ๋กœ์ปฌ์ด๋‚˜ ๋‚ด๋ถ€๋ง์—์„œ ์‹คํ–‰ ์ค‘์ธ ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž„์‹œ ๊ณต๊ฐœ ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ngrok์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์ด๋‹ค.
    •  ngrok์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ public URL ↔ local server ์—ฐ๊ฒฐ.
    •  ์‹ค์ œ๋กœ ngrok http 8000 ๋˜๋Š” ngrok tcp 1521 ๋“ฑ์„ ์‹คํ–‰ํ•˜๋ฉด ๊ณต๊ฐœ ์ฃผ์†Œ๊ฐ€ ์ƒ์„ฑ๋จ.
  • ์™ธ๋ถ€์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์™”์ง€๋งŒ ๋ฐฉํ™”๋ฒฝ์ด๋‚˜ NAT๋กœ ์ธํ•ด ์‘๋‹ต์„ ์ „๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ngrok์€ ๊ทธ ๋ง‰ํžŒ ๊ฒฝ๋กœ๋ฅผ ์šฐํšŒํ•ด์„œ ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ์ปฌ ์„œ๋ฒ„๋Š” ๊ณต์ธ IP๊ฐ€ ์—†๊ฑฐ๋‚˜ ํฌํŠธ๊ฐ€ ๋ง‰ํ˜€ ์žˆ์–ด์„œ ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ.
    •  ngrok์€ ์ž์‹ ์˜ ์„œ๋ฒ„(๊ณต์ธ IP)๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ฐ›๊ณ , ๋‚ด ์„œ๋ฒ„๋กœ ํ„ฐ๋„๋งํ•ด ์ „๋‹ฌํ•จ.
  • ๋‚ด๋ถ€ ์„œ๋ฒ„์™€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ์‚ฌ์ด์— ์•ˆ์ „ํ•œ ํ„ฐ๋„์„ ํ˜•์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ด ngrok์˜ ํ•ต์‹ฌ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋‹ค.
    •  ngrok์€ TLS(์•”ํ˜ธํ™”๋œ ์ฑ„๋„)๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ํ„ฐ๋„๋ง์„ ์ œ๊ณตํ•จ.
    • ๋‚ด๋ถ€์™€ ์™ธ๋ถ€ ๊ฐ„ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”๋œ ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ๋กœ ์œ ์ง€ํ•ด์คŒ.
  • ngrok์€ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋Œ€์‹  ๋ฐ›์•„ ๋‚ด๋ถ€ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ , ๋‚ด๋ถ€์˜ ์‘๋‹ต๋„ ๋‹ค์‹œ ์™ธ๋ถ€๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ์ค‘๊ณ„์ž ๋˜๋Š” ๋Œ€๋ฆฌ ์„œ๋ฒ„์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค.
    • ์ด๊ฒŒ ๋ฐ”๋กœ reverse proxy(์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ)์˜ ๊ฐœ๋…์ž„.
    • ngrok ์„œ๋ฒ„๊ฐ€ ์ค‘๊ณ„ ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์™ธ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ngrok ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ ‘์†ํ•จ.
  • ์›น ์š”์ฒญ๋ฟ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†๊ณผ ๊ฐ™์€ TCP ์š”์ฒญ๋„ ngrok์„ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ngrok์€ http, tcp, tls ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•จ.
    • TCP ํฌํŠธ(์˜ˆ: 1521, 3306)๋„ ngrok tcp ํฌ์›Œ๋”ฉ์œผ๋กœ ์™ธ๋ถ€์— ๋…ธ์ถœ ๊ฐ€๋Šฅ.

โœ… ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

  • ๋กœ์ปฌ ์›น ์„œ๋ฒ„๋‚˜ API๋ฅผ ์™ธ๋ถ€ ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ
  • ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•˜์ง€ ์•Š์€ ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์™ธ๋ถ€ DB (MySQL, Oracle ๋“ฑ)์— ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ ‘์†ํ•˜๊ณ ์ž ํ•  ๋•Œ
  • ์›นํ›…(webhook), ์Šฌ๋ž™, ๊ฒฐ์ œ API ๊ฐ™์€ ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ๋‚ด ์„œ๋ฒ„๋กœ ์ฝœ๋ฐฑํ•  ๋•Œ
  • ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ž„์‹œ๋กœ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

โš™๏ธ ngrok ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค (CLI ๋ฒ„์ „)

๐Ÿ› ๏ธ Step 1. ngrok ์„ค์น˜ ๋ฐ ๋กœ๊ทธ์ธ

# ngrok ๊ณต์‹ ํŽ˜์ด์ง€์—์„œ ํšŒ์›๊ฐ€์ž… ํ›„ ํ† ํฐ ๋ณต์‚ฌ
ngrok config add-authtoken YOUR_NGROK_TOKEN

๐Ÿ› ๏ธ Step 2. ํฌํŠธ ์—ด๊ธฐ.  ํฌํŠธ ์™ธ๋ถ€ ๊ฐœ๋ฐฉ

ngrok tcp 1521      # ์˜ˆ: Oracle DB 1521 ํฌํŠธ ์—ด๊ธฐ
ngrok http 8000     # ์˜ˆ: ๋กœ์ปฌ ์›น์„œ๋ฒ„ 8000 ํฌํŠธ ์—ด๊ธฐ

์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ž„์‹œ ๋„๋ฉ”์ธ ์ฃผ์†Œ์™€ ํฌํŠธ๊ฐ€ ์ƒ์„ฑ๋จ

๐Ÿ“Œ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

Forwarding tcp://0.tcp.jp.ngrok.io:14190 → localhost:1521

 

์ด ์ฃผ์†Œ 0.tcp.jp.ngrok.io:14190๊ฐ€ ๋ฐ”๋กœ ์™ธ๋ถ€์—์„œ Oracle DB์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ์ž„.
Colab์—์„œ๋Š” ์ด ์ฃผ์†Œ๋ฅผ host, port์— ๋„ฃ์œผ๋ฉด ๋จ. Oracle ์—ฐ๊ฒฐ์—์„œ host: 0.tcp.jp.ngrok.io, port: 14190๋ฅผ ์‚ฌ์šฉ.


๐Ÿ’ก Colab์—์„œ ngrok ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์—ฌ๋Š” ๋ฐฉ๋ฒ• (pyngrok)

Colab์—์„œ CLI ๋ณด๋‹ค ํŽธ๋ฆฌํ•œ ๋ฐฉ์‹

โ–ถ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

!pip install pyngrok

โ–ถ ngrok์œผ๋กœ TCP ํฌํŠธ ์—ด๊ธฐ

from pyngrok import ngrok

# ngrok ์ธ์ฆ ํ† ํฐ ๋“ฑ๋ก (ํ•œ ๋ฒˆ๋งŒ)
ngrok.set_auth_token("YOUR_NGROK_TOKEN")

# Oracle์ด ๋กœ์ปฌ์—์„œ 1521 ํฌํŠธ๋กœ ์—ด๋ ค ์žˆ๋‹ค๊ณ  ๊ฐ€์ •
tcp_tunnel = ngrok.connect(1521, "tcp")
print(tcp_tunnel.public_url)

์ถœ๋ ฅ ์˜ˆ์‹œ:

tcp://0.tcp.ngrok.io:14190

์ด๊ฑธ ๊ทธ๋Œ€๋กœ Oracle ์—ฐ๊ฒฐ ์„ค์ •์— ์‚ฌ์šฉํ•˜๋ฉด ๋จ.


๐Ÿงฉ create_engine()๋Š” ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š”๊ฐ€?

SQLAlchemy์˜ create_engine()๋Š”
Python ์ฝ”๋“œ์—์„œ ์™ธ๋ถ€ DB ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž„.

์ฆ‰, DB ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ ‘์† ์ •๋ณด(์œ ์ €, ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ˜ธ์ŠคํŠธ, ํฌํŠธ, DB๋ช…)์„ ์ด์šฉํ•ด์„œ
Pandas์™€ SQL์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•จ.

ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ ๊ฐ์ฒด(engine)๋ฅผ ๋งŒ๋“ค๋ฉด,
pd.read_sql()์ด๋‚˜ to_sql() ๊ฐ™์€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.


๐Ÿ“ฆ Oracle → MySQL ๋ฐ์ดํ„ฐ ์ด์ „ ์ฝ”๋“œ

1๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

!pip install -U mysql-connector-python
!pip install -U pandas
!pip install -U sqlalchemy
!pip install -U oracledb
  • ๊ฐ๊ฐ MySQL ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, DB ์—ฐ๋™, Oracle ์—ฐ๋™์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜.

2๏ธโƒฃ Oracle ์—ฐ๊ฒฐ ๋ฐ ์กฐํšŒ

from sqlalchemy import create_engine
import pandas as pd

user = "oracle_user"
password = "oracle_pw"
host = "0.tcp.jp.ngrok.io"
port = '14190'
database = "oracle_db"

engine = create_engine(f'oracle+cx_oracle://{user}:{password}@{host}:{port}/{database}')
tableName = "EXAMPLE_TABLE"
query = f"SELECT * FROM {tableName}"
productData = pd.read_sql(query, con=engine)

โœ… ์„ค๋ช…:

  • ngrok์œผ๋กœ ์—ด์–ด๋‘” Oracle ์„œ๋ฒ„์— ์—ฐ๊ฒฐ
  • SQLAlchemy๋ฅผ ์ด์šฉํ•ด์„œ Pandas์™€ ์—ฐ๋™
  • ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ productData๋ผ๋Š” DataFrame์œผ๋กœ ๊ฐ€์ ธ์˜ด

3๏ธโƒฃ MySQL ์—ฐ๊ฒฐ ๋ฐ ์ €์žฅ

myuser = "mysql_user"
mypassword = "mysql_pw"
myhost = "my.mysql.host"
myport = '3306'
mydatabase = "mysql_db"

myengine = create_engine(f'mysql+mysqlconnector://{myuser}:{mypassword}@{myhost}:{myport}/{mydatabase}')
tableName = "MY_TARGET_TABLE"
productData.to_sql(name=tableName, con=myengine, if_exists="append", index=False)

โœ… ์„ค๋ช…:

  • MySQL ์„œ๋ฒ„์— ์—ฐ๊ฒฐ
  • ์•ž์—์„œ Oracle์—์„œ ๋ถˆ๋Ÿฌ์˜จ productData๋ฅผ MySQL์˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ
  • if_exists="append" → ๊ธฐ์กด ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๋ฉด ์ด์–ด์„œ ์ถ”๊ฐ€ํ•จ (๋ฎ์–ด์“ฐ๊ธฐ ์•„๋‹˜)
  • index=False → Pandas์˜ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์€ ์ €์žฅํ•˜์ง€ ์•Š์Œ

โœ… ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

  • ngrok์œผ๋กœ Oracle ํฌํŠธ๋ฅผ ์™ธ๋ถ€์— ์—ด์–ด๋‘  (tcp ํฌํŠธ ํฌ์›Œ๋”ฉ)
  • Oracle DB ํฌํŠธ์— ๋Œ€ํ•œ public ์ฃผ์†Œ ์ƒ์„ฑ
  • Colab์—์„œ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด Oracle์— ์ ‘์†
  • ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ Pandas์˜ DataFrame ํ˜•ํƒœ๋กœ ๋ถˆ๋Ÿฌ์˜ด
  • DataFrame์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ MySQL์— ์ €์žฅ (to_sql ์‚ฌ์šฉ)
    • DataFrame์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ , ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด ์œ ์—ฐ์„ฑ์ด ๋†’์Œ
  • Oracle (ngrok ๊ฐœ๋ฐฉ) → Colab (Pandas DataFrame) → MySQL (to_sql ์ €์žฅ)
    • Oracle ๊ฐœ๋ฐฉ ์„ค์ • + ์™ธ๋ถ€ ํ™˜๊ฒฝ์—์„œ DB ์ ‘์† + ๋ฐ์ดํ„ฐ ์ด์ „๊นŒ์ง€๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์šฉ์ ์ธ ๋ฐฉ์‹

โœ… ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

๊ตฌ๋ถ„ ์„ค๋ช…
ngrok ๋กœ์ปฌ/๋‚ด๋ถ€๋ง ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ„ฐ๋„๋ง ๋„๊ตฌ
create_engine() DB ์ ‘์† ์ •๋ณด๋ฅผ ์ด์šฉํ•ด Python๊ณผ ์™ธ๋ถ€ DB๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ•จ์ˆ˜
์‚ฌ์šฉ ์‚ฌ๋ก€ Oracle, MySQL, webhook ๋“ฑ ์™ธ๋ถ€ ์—ฐ๋™ ํ…Œ์ŠคํŠธ
ํŒŒ์ด์ฌ ์‹คํ–‰๋ฒ• pyngrok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Colab ๋“ฑ์—์„œ ngrok ์ œ์–ด ๊ฐ€๋Šฅ

โœ… Oracle → MySQL ๋ฐ์ดํ„ฐ ์ด์ „ ์ „์ฒด ํ๋ฆ„ ํ•จ์ˆ˜ํ™” ์˜ˆ์ œ

from sqlalchemy import create_engine
import pandas as pd

def transfer_oracle_to_mysql(
    oracle_config: dict,
    mysql_config: dict,
    table_name: str,
    if_exists: str = "append"
):
    """
    Oracle์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด MySQL๋กœ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜

    Parameters:
    - oracle_config: ์˜ค๋ผํด ์ ‘์† ์ •๋ณด (user, password, host, port, database)
    - mysql_config: MySQL ์ ‘์† ์ •๋ณด (user, password, host, port, database)
    - table_name: ํ…Œ์ด๋ธ” ์ด๋ฆ„ (์กฐํšŒ/์ €์žฅ์— ๋™์ผ ์‚ฌ์šฉ)
    - if_exists: 'replace', 'append', 'fail' ์ค‘ ํ•˜๋‚˜
    """
    
    # ์˜ค๋ผํด ์—ฐ๊ฒฐ ์—”์ง„
    oracle_url = f'oracle+cx_oracle://{oracle_config["user"]}:{oracle_config["password"]}@{oracle_config["host"]}:{oracle_config["port"]}/{oracle_config["database"]}'
    oracle_engine = create_engine(oracle_url)

    # ๋ฐ์ดํ„ฐ ์กฐํšŒ
    query = f"SELECT * FROM {table_name}"
    df = pd.read_sql(query, con=oracle_engine)

    # MySQL ์—ฐ๊ฒฐ ์—”์ง„
    mysql_url = f'mysql+mysqlconnector://{mysql_config["user"]}:{mysql_config["password"]}@{mysql_config["host"]}:{mysql_config["port"]}/{mysql_config["database"]}'
    mysql_engine = create_engine(mysql_url)

    # ๋ฐ์ดํ„ฐ ์ €์žฅ
    df.to_sql(name=table_name, con=mysql_engine, if_exists=if_exists, index=False)
    print(f"{table_name} ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ MySQL์— ์ €์žฅ ์™„๋ฃŒ")

# โœ… ์‚ฌ์šฉ ์˜ˆ์‹œ
oracle_info = {
    "user": "oracle_user",
    "password": "oracle_pw",
    "host": "0.tcp.jp.ngrok.io",
    "port": "14190",
    "database": "oracle_db"
}

mysql_info = {
    "user": "mysql_user",
    "password": "mysql_pw",
    "host": "mysql.host.com",
    "port": "3306",
    "database": "mysql_db"
}

transfer_oracle_to_mysql(oracle_info, mysql_info, table_name="EXAMPLE_TABLE")

๐Ÿ’ก ํ•จ์ˆ˜ ํ™œ์šฉ ํฌ์ธํŠธ

  • if_exists="append" → ๊ธฐ์กด ํ…Œ์ด๋ธ”์— ์ด์–ด์„œ ์ €์žฅ
  • replace๋กœ ๋ฐ”๊พธ๋ฉด ํ…Œ์ด๋ธ” ๋ฎ์–ด์”€
  • Oracle์—์„œ MySQL๋กœ ๋ฐ์ดํ„ฐ ์ด์ „ ์ž๋™ํ™”์— ์ ํ•ฉ
  • ngrok ์ฃผ์†Œ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์–ด๋””์„œ๋“  ์ ‘์† ๊ฐ€๋Šฅ

๋Œ“๊ธ€