์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ์๋ 30์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ 1๋ถ ๋ง์ ์๋ฃ๋ฉ๋๋ค. ์คํ ์ด์ง ํ๊ฒฝ ๋ฐฐํฌ๋ ์ค๋ฅ ์์ด ํต๊ณผํฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ ๋ฐฐํฌ๋ ์ค๋ฅ ์์ด ํต๊ณผํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ 3์๊ฐ ํ, Java ์๋น์ค๊ฐ ์๋ชป๋ ํ์์ ์๋ต์ ๋ฐํํ๊ณ , COBOL ๋ฐฐ์น ์์ ์ด SQL ์ค๋ฅ๋ก ๋น์ ์ ์ข ๋ฃ๋๊ณ , ํ์ ๋ณด๊ณ ํ์ดํ๋ผ์ธ์ด ๋ ์ฝ๋ ๋ก๋๋ฅผ ์ค๋จํ๋ค๋ ๋ชจ๋ํฐ๋ง ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ปฌ๋ผ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฌด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ์ฌ์ค์ ์๋ฆฌ์ง ์์์ต๋๋ค.
์ด๋ ๊ฐ์์ ์ธ ์ํฉ์ด ์๋๋๋ค. ํ๋ ์ ๋ณด ์์คํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ฌ์ผ๋ก ๋ค์ํ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์กดํ๋ ๊ตฌ์กฐ์ ๋๋ค. ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ํตํฉ ํ๊ฒฝ์์๋ ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ธ ์ ์ฒด์์ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ณต์ ํ๋ฉฐ, ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๊ฐ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ณํํ๋์ง์ ๋ํด ๊ฑฐ์ ๋๋ ์ ํ ์ ์ดํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํญ์ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํ์ง ๋ชปํ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋ถ์ผ์น๋ ๋ฐ์ดํฐ ์์ค, ํ๋ก๊ทธ๋จ ์ค๋ฅ ๋ฐ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง๋๋ค. ํด๊ฒฐ์ฑ ์ ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค๋ฅผ ๋ฆ์ถ๋ ๊ฒ์ด ์๋๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ ์ ์๋ฒฝํ ์ํฅ ๋ถ์์ ์ํํ๋ ๊ฒ์ ๋๋ค.
์คํค๋ง ๋ณ๊ฒฝ ์ ์ ๋ชจ๋ ์ข ์ ํญ๋ชฉ์ ํ์ ํ์ธ์
SMART TS XL ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ธฐ ์ ์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ , ํ์ดํ๋ผ์ธ ๋ฐ ์ธ์ด ๊ฐ ์ข ์์ฑ์ ๋งคํํฉ๋๋ค.
์์ธํ ์์๋ณด์ธ์โฆ๋ชจ๋ ์คํค๋ง ๋ณ๊ฒฝ์ด ๋์ผํ ๊ฒ์ ์๋๋๋ค.
์คํค๋ง ์ํฅ ๋ถ์์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถ๋ฅํ๋ ๊ฒ์ ๋๋ค. ํ ์ด๋ธ์ ์ ํ์ ์ด์ ์ถ๊ฐํ๋ ๋ณ๊ฒฝ์ ๊ธฐ์กด ์ด์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๋ณ๊ฒฝ๊ณผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค. ๋ ๋ณ๊ฒฝ ๋ชจ๋ ๋์ผํ ALTER TABLE ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง๋ง, ์ ์๋ ํ์ ํธํ์ฑ์ ์ ์งํ๋ ๋ฐ๋ฉด ํ์๋ ์๋ ์ด ์ด๋ฆ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํธํ์ฑ์ ๊นจ๋จ๋ฆฝ๋๋ค.
ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์๋น์์ ๋ณ๋ ์กฐ์น ์์ด ๊ธฐ์กด ์๋น์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ ์ํด์๋ ์กฐ์ ๋ ๋ฐฐํฌ๊ฐ ํ์ํ๋ฉฐ, ๋ชจ๋ ์ข ์ ๊ตฌ์ฑ ์์๋ ์คํค๋ง ๋ณ๊ฒฝ ์ ๋๋ ๋์์ ์ ๋ฐ์ดํธ๋์ด์ผ ํ๊ฑฐ๋, ์๋น์๋ฅผ ๋จผ์ ์ ๋ฐ์ดํธํ ํ ์คํค๋ง๊ฐ ๋ฐ๋ผ์ก์ ๋๊น์ง ํธํ์ฑ ๊ณ์ธต ๋ค์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
ํธํ์ฑ์ ์ ์งํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋ฉ๋๋ค. ๊ธฐ์กด ์ฌ์ฉ์๋ ๋ณ๊ฒฝ ์์ด ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ก์ด ์ฌ์ฉ์๋ ํ์์ ๋ฐ๋ผ ์๋ก์ด ์คํค๋ง ์์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
๋ถ๋ฅ๋ ๋ถ์ ๋ฒ์, ํ์ํ ๋ฐฐํฌ ์กฐ์ ๋ฐ ๋กค๋ฐฑ ๋ณต์ก์ฑ์ ๊ฒฐ์ ํฉ๋๋ค.
| ์ ํ ๋ณ๊ฒฝ | ํ๊ดด | ์ฃผ์ ์ํฅ ๋์ | ์ํ ์์ค |
|---|---|---|---|
| null ํ์ฉ ์ด์ ์ถ๊ฐํฉ๋๋ค. | ์๋ | ์ ์ฝ๋๋ง ํด๋น | ๋์ |
| ๊ธฐ๋ณธ๊ฐ ์์ด NOT NULL ์ด์ ์ถ๊ฐํฉ๋๋ค. | ๊ฐ๋ฅ | ๋ชจ๋ INSERT ๋ฌธ | ๊ฒฐ์ ์ ์ธ |
| ์ด ์ด๋ฆ ๋ณ๊ฒฝ | ๊ฐ๋ฅ | ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ SELECT, INSERT, UPDATE ๋ฌธ | ๊ฒฐ์ ์ ์ธ |
| ์ด ์ญ์ | ๊ฐ๋ฅ | ์ด๋์ ์๋ ๋ชจ๋ ์ฐธ์กฐ | ๊ฒฐ์ ์ ์ธ |
| ๋ฐ์ดํฐ ํ์์ ํ์ฅํฉ๋๋ค(INT์์ BIGINT๋ก). | ์ผ๋ถ์ | ํ๋ ๊ธธ์ด ๋๋ ์ ํ์ ํ์ธํ๋ ์ฑ | ์ค๊ธ |
| ์ ํ๋ ๋ฐ์ดํฐ ํ์(VARCHAR 500~100) | ๊ฐ๋ฅ | ์ฑ์ด ์๋ก์ด ์ ํ๋ณด๋ค ๋ ์ค๋ซ๋์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ | ๋์ |
| ์์ธ ์ถ๊ฐ | ์๋ | ์ฑ๋ฅ ๋ถ์ ์ ์ฉ์ด๋ฉฐ, ์ฟผ๋ฆฌ๋ ๊ณ์ ์ ํจํฉ๋๋ค. | ๋์ |
| ๋๋กญ ์ธ๋ฑ์ค | ์ผ๋ถ์ | ์ฟผ๋ฆฌ ์ฑ๋ฅ์๋ ์ํฅ์ ๋ฏธ์น์ง๋ง ์ ํ์ฑ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. | ์ค๊ธ |
| ํ ์ด๋ธ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ | ๊ฐ๋ฅ | ์ด๋์ ์๋ ๋ชจ๋ ์ฐธ์กฐ | ๊ฒฐ์ ์ ์ธ |
| ์ธ๋ ํค ์ ์ฝ ์กฐ๊ฑด์ ์ถ๊ฐํฉ๋๋ค. | ์ผ๋ถ์ | ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค. | ์ค๊ฐ ๊ณ |
| nullable์ NOT NULL๋ก ๋ณ๊ฒฝํ์ธ์ | ๊ฐ๋ฅ | ์ฑ์ด ํด๋น ์ด์ NULL ๊ฐ์ ์ฝ์ ํฉ๋๋ค. | ๋์ |
| ์ ์ฅ ํ๋ก์์ ์๋ช ์์ | ๊ฐ๋ฅ | ์ ์ฐจ์ ์ฐธ์ฌํ ๋ชจ๋ ์ฌ๋ | ๊ฒฐ์ ์ ์ธ |
| ๋๋กญ ์ ์ฅ ํ๋ก์์ | ๊ฐ๋ฅ | ์ ์ฐจ์ ์ฐธ์ฌํ ๋ชจ๋ ์ฌ๋ | ๊ฒฐ์ ์ ์ธ |
| ๋ทฐ ์ด๋ฆ ๋ณ๊ฒฝ | ๊ฐ๋ฅ | ๊ทธ ๊ฒฌํด์ ๋ชจ๋ ์๋น์ | ๊ฒฐ์ ์ ์ธ |
| ๋ณด๊ธฐ ์ ์ ๋ณ๊ฒฝ | ์ผ๋ถ์ | ํด๋น ์นผ๋ผ์ ์๋น์ | ์ค๊ฐ ๊ณ |
๋ฐฐํฌ ๊ท์น: ๋ชจ๋ ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐฐํฌ ์ ์ ์ข ์ ํญ๋ชฉ ๋ชฉ๋ก์ ์๋ฒฝํ๊ฒ ์์ฑํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๊ณ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋จ๊ณ๋ณ ๋ฐฐํฌ๋ฅผ ํตํด ๊ฐ ๋จ๊ณ์์ ๊ฒ์ฆ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. ๋ชจ๋ ์ค๊ฐ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ต์ํ ์ฃผ์ ์ํฅ ๋์์ ๋ํ ๊ฒํ ๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. ์ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ค ํ ์คํธ๋ฅผ ํตํด ๋ฐฐํฌํ ์ ์์ง๋ง, ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋กํด์ผ ํฉ๋๋ค.
์คํค๋ง๊ฐ ์ถ์ ์ํฅ์ ๋ฏธ์น๋ ๋ค ๊ฐ์ง ์์กด์ฑ ๊ณ์ธต
์คํค๋ง ๋ณ๊ฒฝ ์ํฅ ๋ถ์์์ ๊ฐ์ฅ ์ค๋ํ ์ค์๋ ์ด๋ฅผ ๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ๋ก๋ง ์ทจ๊ธํ๋ ๊ฒ์ ๋๋ค. ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๋ฅผ ๋์ด ๋ค ๊ฐ์ง ๊ณ์ธต์ ๊ฑธ์ณ ์์ผ๋ฉฐ, ๊ฐ ๊ณ์ธต์ ์ด๊ฑฐํ๊ธฐ ์ํด์๋ ์๋ก ๋ค๋ฅธ ๋ถ์ ๊ธฐ๋ฒ์ด ํ์ํฉ๋๋ค.
1๋จ๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์ข ์์ฑ
๊ฐ์ฅ ๋์ ์ ๋๋ ๊ณ์ธต์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด ๋ด์์ ์คํค๋ง ๋ณ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ณ๊ฒฝ๋ ํ ์ด๋ธ์์ SELECT ๋ฌธ์ ์ฌ์ฉํ๋ ๋ทฐ . ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ์ด์ SELECT ๋ชฉ๋ก์ ํฌํจํ๋ ๋ทฐ๋ ๋ทฐ๊ฐ ๊ตฌ์ฒดํ๋์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์๋ชป๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ ์ ์์ต๋๋ค.
SELECT, INSERT, UPDATE ๋๋ DELETE ๋ฌธ์์ ํด๋น ์ด์ ์ฐธ์กฐํ๋ ์ ์ฅ ํ๋ก์์ ๋ฐ ํจ์ .
ํ ์ด๋ธ์ INSERT ๋๋ UPDATE ๋ฌธ์ด ์ฝ์ ๋ ๋ ์คํ๋๊ณ , ๋ก์ง์์ ํน์ ์ด ์ด๋ฆ์ ์ฐธ์กฐํ๋ ํธ๋ฆฌ๊ฑฐ์ ๋๋ค .
ํด๋น ์ด์ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ ์ ์ฝ ์กฐ๊ฑด ๋ฐ ๊ณ์ฐ ์ด์ ํ์ธํ์ญ์์ค .
์ปฌ๋ผ ์ญ์ ๋ก ์ธํด ๋ฌดํจํ๋ ์ ์๋ ์ธ๋ ํค ๊ด๊ณ .
์ด๋ฌํ ์ข
์์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์นดํ๋ก๊ทธ์์ ์ง์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. SQL Server๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค. sys.sql_dependencies sys.dm_sql_referenced_entitiesPostgreSQL์ ๋ค์์ ์ ๊ณตํฉ๋๋ค. pg_depend์ค๋ผํด์ ์ ๊ณตํฉ๋๋ค. ALL_DEPENDENCIES์๋ ์ฟผ๋ฆฌ๋ ํน์ ํ
์ด๋ธ ๋ฐ ์ด์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์ข
์ ํญ๋ชฉ์ ๋์ดํฉ๋๋ค.
SQL
-- SQL Server: all objects referencing a specific column
SELECT
OBJECT_NAME(d.object_id) AS dependent_object,
o.type_desc AS object_type,
OBJECT_NAME(d.referenced_major_id) AS referenced_table,
COL_NAME(d.referenced_major_id,
d.referenced_minor_id) AS referenced_column
FROM sys.sql_dependencies d
JOIN sys.objects o ON o.object_id = d.object_id
WHERE d.referenced_major_id = OBJECT_ID('dbo.Customers')
AND d.referenced_minor_id = COLUMNPROPERTY(
OBJECT_ID('dbo.Customers'), 'CustomerName', 'ColumnId')
ORDER BY o.type_desc, dependent_object;
SQL
-- PostgreSQL: views and functions depending on a specific column
SELECT
dep.classid::regclass AS dependency_type,
dependent.relname AS dependent_object,
a.attname AS referenced_column,
source.relname AS source_table
FROM pg_depend dep
JOIN pg_class source ON source.oid = dep.refobjid
JOIN pg_class dependent ON dependent.oid = dep.objid
JOIN pg_attribute a ON a.attrelid = dep.refobjid
AND a.attnum = dep.refobjsubid
WHERE source.relname = 'customers'
AND a.attname = 'customer_name';
SQL
-- Oracle: full dependency chain for objects referencing a table
SELECT
name AS dependent_object,
type AS object_type,
referenced_name,
referenced_type
FROM user_dependencies
WHERE referenced_name = 'CUSTOMERS'
ORDER BY type, name;
์ด ์ฟผ๋ฆฌ๋ ๋ ์ด์ด 1 ์ ์ฒด๋ฅผ ๋์์ผ๋ก ํ๋ฉฐ, ๋ ์ด์ด 2๋ถํฐ 4๊น์ง๋ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
2๋จ๊ณ: ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์ข ์์ฑ
๋ ๋ฒ์งธ ๊ณ์ธต์ ๋๋ถ๋ถ์ ์ด์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ๊ณณ์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์นดํ๋ก๊ทธ ์ฟผ๋ฆฌ๋ฅผ ํตํด์๋ ์ด๋ ํ ๊ฐ์์ฑ๋ ์ป์ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๋ค์ ๊ฒฝ๋ก๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํฉ๋๋ค.
Java ๋ฐ .NET ์ ํ๋ฆฌ์ผ์ด์ ์์ JDBC ๋ฐ ODBC ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋, ์์ค ์ฝ๋์ ํฌํจ๋ SQL ์ฟผ๋ฆฌ์์ ์ด ์ด๋ฆ์ด ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก ๋ํ๋๋ ๊ฒฝ์ฐ.
Hibernate, Entity Framework, SQLAlchemy ๋ฐ ActiveRecord์ ORM ๋งคํ ์์๋ ํ ์ด๋ธ ๋ฐ ์ด ์ด๋ฆ์ด ๊ฐ์ฒด ํ๋์ ๋งคํ๋ฉ๋๋ค. ์ด ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์คํค๋ง ๋ณ๊ฒฝ๊ณผ ORM ๊ตฌ์ฑ ๋ณ๊ฒฝ์ด ๋ชจ๋ ํ์ํ๋ฉฐ, ๊ตฌ์ฑ ๋ณ๊ฒฝ์ด ๋๋ฝ๋๋ฉด ORM์ด ์ ์ด ์ด๋ฆ์ ์ด์ ํ๋์ ์๋์ผ๋ก ๋งคํํ์ฌ null ๊ฐ์ด๋ ๋งคํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
COBOL ํ๋ก๊ทธ๋จ์ ๋ด์ฅ SQL์ COBOL ํ๋ก์์ ๋๋น์ ์ฝ๋์ EXEC SQL/END-EXEC ๋ธ๋ก ๋ด์ SQL์ด ๋ํ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ์ด๋ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ๊ฐ์ฅ ์ค์ํ๋ฉด์๋ ๊ฐ์ฅ ์์ฃผ ๊ฐ๊ณผ๋๋ ์ข ์์ฑ ์ ํ์ ๋๋ค. ํด๋น ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฝ๋ณผ
EXEC SQL
SELECT CUST-NAME, CUST-ADDR, CUST-PHONE
INTO :WS-CUST-NAME, :WS-CUST-ADDR, :WS-CUST-PHONE
FROM CUSTOMERS
WHERE CUST-ID = :WS-CUST-ID
END-EXEC
์ด๊ฒ์ SQL ๋ฌธ์ด ์๋๋ผ, SQL ๋ฌธ์ด ๋ด์ฅ๋ COBOL ์์ค ์ฝ๋์ ๋๋ค. ํ์ค SQL ์ข ์์ฑ ๋๊ตฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์นดํ๋ก๊ทธ ์ฟผ๋ฆฌ๋ก๋ ์ด ์ฐธ์กฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ์ด ์ฐธ์กฐ๋ SQL ๊ฐ์ฒด ์ ์๊ฐ ์๋ COBOL ์์ค ํ์ผ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฅผ ์ฐพ์ผ๋ ค๋ฉด COBOL ์์ค ์ฝ๋๋ฅผ ๋ถ์ํด์ผ ํฉ๋๋ค.
๋์ SQL์ ๋ฌธ์์ด ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋๋ฉฐ, ์ด ์ด๋ฆ์ ๋ฐํ์์ ์์ฑ๋ฉ๋๋ค. ์ด๋ฌํ ๋์ SQL์ SQL ๋ฆฌํฐ๋ด์ ๋ํ ์ ์ ๋ถ์์ผ๋ก๋ ์ฐพ์ ์ ์์ผ๋ฉฐ, ๋์ ๋ถ์(ํ ์คํธ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ) ๋๋ ๋ฌธ์์ด ๊ตฌ์ฑ ํจํด์ ๋ํ ์ธ์ฌํ ์๋ ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค.
GraphQL ๋ฆฌ์กธ๋ฒ ๋ฐ API ์ง๋ ฌํ๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด ์ด๋ฆ์ ์๋ต ํ๋ ์ด๋ฆ์ ๋งคํํ๋ API์
๋๋ค. customerName ์ด์์ ๊ฐ์ ธ์จ ์ด๋ฆ customer_name ์ด ์ด๋ฆ์ ์ง์ ๋งคํํ๋ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์
์ SQL ์ฟผ๋ฆฌ๊ฐ ์
๋ฐ์ดํธ๋๋๋ผ๋ ์ด ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋ํ์ง ์์ต๋๋ค. ์ง๋ ฌํ ๋งคํ์ด ์๋ ์ด๋ฆ๋ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
3๋จ๊ณ: ETL, ํ์ดํ๋ผ์ธ ๋ฐ ๋ฐ์ดํฐ ํ๋ซํผ ์ข ์์ฑ
์ธ ๋ฒ์งธ ๊ณ์ธต์ ๋ณ๊ฒฝ๋ ํ ์ด๋ธ์ด๋ ์ด์ ๊ฑฐ์น๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ด๋ ํ๋ก์ธ์ค๋ฅผ ํฌํจํฉ๋๋ค.
ETL ์์ (์ฌ์ฉ์ ์ง์ ์ฝ๋๋ก ์์ฑ๋์๊ฑฐ๋, Informatica, Talend ๋๋ SSIS๋ก ๊ด๋ฆฌ๋๊ฑฐ๋, Airflow DAG๋ก ํํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํฌํจ)์ ๋ณ๊ฒฝ๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ์ฌ ๋ณํํ๊ณ ํ์ ์์คํ ์ผ๋ก ๋ก๋ํฉ๋๋ค.
๋ณ๊ฒฝ ๋ฐ์ดํฐ ์บก์ฒ(CDC) ๊ตฌ์ฑ (Debezium, Oracle GoldenGate, SQL Server CDC)์ ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ ์์ค ๋ณ๊ฒฝ ์ฌํญ์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. CDC ๊ตฌ์ฑ์ ํน์ ํ ์ด๋ธ ๋ฐ ์ด ์ด๋ฆ์ ์ฐธ์กฐํ๋ฉฐ, ์ด ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ์ด ์ด๋ฆ์ด ํฌํจ๋ ๋ณ๊ฒฝ ์ด๋ฒคํธ๊ฐ ์์ฑ๋์ง๋ง, ํ์ CDC ์๋น์๊ฐ ์ด๋ฅผ ์ธ์ํ์ง ๋ชปํ ์ ์์ต๋๋ค.
๊ด๊ณํ ๊ตฌ์กฐ๋ฅผ ์ปฌ๋ผํ ํ์์ผ๋ก ๋ณํํ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ๋ฐ ๋ฐ์ดํฐ ๋ ์ดํฌ ๋ก๋ ํ๋ก์ธ์ค๊ฐ ์์ต๋๋ค. ์์ค์์ ์ปฌ๋ผ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ฉด ์จ์ดํ์ฐ์ค ์คํค๋ง, ๋ก๋ ์คํฌ๋ฆฝํธ, ๊ทธ๋ฆฌ๊ณ ํด๋น ์ปฌ๋ผ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ๋ถ์ ์ฟผ๋ฆฌ ๋๋ ๋์๋ณด๋์์๋ ์ด๋ฆ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
Tableau ํตํฉ ๋ฌธ์, Power BI ๋ฐ์ดํฐ ์ธํธ, Looker LookML ์ ์์ ๊ฐ์ BI ๋๊ตฌ์ ํฌํจ๋ ๋ณด๊ณ ์ฟผ๋ฆฌ๋ ์ด ์ด๋ฆ์ ์ง์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ์ฟผ๋ฆฌ๋ ๋ฌธ์ํ๋์ด ์์ง ์์ ๊ฒฝ์ฐ๊ฐ ํํ๋ฉฐ, ์คํค๋ง ๋ณ๊ฒฝ ํ ๋ณด๊ณ ์๊ฐ ์๋ํ์ง ์์ ๋ ๋น๋ก์ ๋ฐ๊ฒฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
4๊ณ์ธต: ๋ค์ด์คํธ๋ฆผ ๋ฐ ํํธ๋ ์ข ์์ฑ
๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ ๊ณ์ธต: ์กฐ์ง์ ์ง์ ์ ์ธ ํต์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์์คํ ์ผ๋ก, ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ธ๋ถ API ์๋น์ ์ด ์ด๋ฆ์์ ๋งคํ๋ ํ๋ ์ด๋ฆ์ ํฌํจํ๋ ์๋ต์ ๋ฐ๋ ๊ฒฝ์ฐ. ๊ณต๊ฐ API์ ๋ค์์ด ํฌํจ๋๋ ๊ฒฝ์ฐ. customer_name ์๋ต์์ ํด๋น ํ๋๊ฐ ์ง์ ์ ์ธ ์ด ๋งคํ์ ํตํด ์์ฑ๋๋ฏ๋ก, ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ์ธ๋ถ ์๋น์์ ๋ํ API ๊ณ์ฝ์ด ์๋ฐ๋ฉ๋๋ค.
ํํธ๋ ๋ฐ์ดํฐ ํผ๋ ๋ ๋ณ๊ฒฝ๋ ํ ์ด๋ธ์์ ์ถ์ถํ ๋ฐ์ดํฐ๋ฅผ ํ๋ซ ํ์ผ, CSV ๋๋ XML ํ์์ผ๋ก ์์ ํ๋ฉฐ, ํ๋ ์์น ๋๋ ์ด๋ฆ์ ์ถ์ถ ์คํค๋ง์ ์ํด ์ ์๋ฉ๋๋ค.
ํน์ ์ด ์ ์๊ฐ ์ธ๋ถ ๊ธฐ๊ด๊ณผ ํฉ์๋ ๊ท์ ๋ณด๊ณ ์ ์ฌ์์ ์ฐธ์กฐ๋๋ ๊ท์ ์ค์ ๋ฐ ๊ท์ ๋ณด๊ณ ์์คํ .
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์ข ์์ฑ ์ฐพ๊ธฐ: ๋ถ์ ๊ธฐ๋ฒ
1๊ณ์ธต์ ์นดํ๋ก๊ทธ ์กฐํ๋ฅผ ํตํ ์ ํ ์๋น์ค ๋ฐฉ์์ ๋๋ค. 2๊ณ์ธต๋ถํฐ 4๊ณ์ธต๊น์ง๋ ์ธ์ด ๋ฐ ์ํคํ ์ฒ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๊ธฐ์ ์ด ํ์ํฉ๋๋ค.
๋ฌธ์์ด ๊ฒ์(๋น ๋ฅด์ง๋ง ๋ถ์์ ํจ): grep ๋๋ ripgrep์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์์ ํ ์ด๋ธ ์ด๋ฆ, ์ด ์ด๋ฆ ๋๋ ๋ ๋ค๋ฅผ ๊ฒ์ํฉ๋๋ค. ๋น ๋ฅด๊ณ ์๋ํํ๊ธฐ ์ฝ์ต๋๋ค. ๋์ ์ผ๋ก ์์ฑ๋ SQL์ ๋์น๊ณ ์ฃผ์ ๋ฐ ๋ฌธ์์์ ์คํ์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
์ธ๊ฒ ๋๋ฆฌ๋ค
# Find all files referencing a specific column
rg "customer_name|CUST-NAME|customerName" \
--type java --type py --type cs --type cbl \
--glob "!**/test/**" \
-l # list files only, for scope assessment
# More precise: find SQL contexts specifically
rg "(?i)(SELECT|INSERT|UPDATE|WHERE).*customer_name" \
--type java --type py
AST ๊ธฐ๋ฐ ๋ถ์(๋ ์ ํํ๊ณ ์ธ์ด๋ณ ๋ง์ถค): ์์ค ์ฝ๋๋ฅผ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ก ํ์ฑํ๊ณ ์ด๋ฅผ ํ์ํ์ฌ SQL ๋ฌธ์์ด ๋ฆฌํฐ๋ด, ORM ์ด๋ ธํ ์ด์ ๋ฐ ๋งคํ ๊ตฌ์ฑ์ ์ฐพ์ต๋๋ค. ๋ฌธ์์ด ๊ฒ์๋ณด๋ค ์ ํํ์ง๋ง ์ธ์ด๋ณ๋ก ๋ณ๋์ ๋ถ์๊ธฐ๊ฐ ํ์ํฉ๋๋ค.
์๋ฏธ๋ก ์ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์(๊ฐ์ฅ ์ ํํ์ง๋ง ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ฐฉ์): ์ ์ ํ๋ก๊ทธ๋จ ๋ถ์์์ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ ์์ฉ์ ์ถ์ถํฉ๋๋ค. ์ด ๊ธฐ๋ฒ์ IEEE์ ์คํค๋ง ๋ณ๊ฒฝ ์ํฅ ๋ถ์ ์ฐ๊ตฌ์์ ์ ๋ฆฝ๋์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๊ตฌ์ฑ๋ถํฐ ๋ณ์ ํ ๋น์ ๊ฑฐ์ณ ์คํ ์์ ๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํ๊ณ , ์์ ํ ๋ฆฌํฐ๋ด ํํ๋ก ์์ฑ๋์ง ์๊ณ ๋ถ๋ถ์ ์ผ๋ก ์กฐํฉ๋ ๊ฒฝ์ฐ์๋ SQL ์ด ์ฐธ์กฐ๋ฅผ ์๋ณํฉ๋๋ค. ์ด ์ฐ๊ตฌ๋ ๋์ ์ ํ๋๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ด ๋ถ์์ด ๋ฌธ๋งฅ์ ๋ฏผ๊ฐํด์ผ ํ๋ฉฐ, ํ๋ก๊ทธ๋จ ๋ถํ ์ ํตํด ๋ถ์ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ๋ฉด์๋ ์์ ์ฑ์ ์ ์งํ ์ ์์์ ๋ณด์ฌ์ค๋๋ค.
์ค์ง์ ์ธ ๊ถ์ฅ ์ฌํญ: ์ ์ํ ๋ฒ์ ํ๊ฐ๋ฅผ ์ํด ๋ฌธ์์ด ๊ฒ์์ ํ์ฉํ์ญ์์ค. ์ค์ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ ์ ๊ถ์ ์๋ ์ด๊ฑฐ๋ฅผ ์ํด AST ๋๋ ์๋ฏธ ๋ถ์์ ์ฌ์ฉํ์ญ์์ค. ๋ฌธ์์ด ๊ฒ์์๋ง ์์กดํ์ฌ ์ด ์ด๋ฆ ๋ณ๊ฒฝ์ด๋ ์ด ์ญ์ ๋ฅผ ๋ฐฐํฌํ์ง ๋ง์ญ์์ค. ์คํ ์ํ์ด ๋๋ฌด ๋์ต๋๋ค.
๋ค๊ตญ์ด ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ์คํค๋ง์ ์ํฅ
์ผ๋ฐ์ ์ธ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ (Java ๋ฐฑ์๋, React ํ๋ฐํธ์๋, PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค)์์ ์คํค๋ง ๋ณ๊ฒฝ์ ์ข ์์ฑ ๋ฒ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋๋ก ์ ํ๋ฉ๋๋ค. ์ด ์ด๋ฆ ๋ณ๊ฒฝ์ Java ๋ ์ด์ด์ SQL ๋ฌธ์์ด๊ณผ ์ง๋ ฌํ๊ธฐ์ API ํ๋ ๋งคํ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ ๋ค ๋์ผํ ์ฝ๋๋ฒ ์ด์ค์์ ๊ฒ์ํ์ฌ ์ฐพ์ ์ ์์ต๋๋ค.
๊ธฐ์กด ๋ฉ์ธํ๋ ์ ์์คํ ์ ์ฌ์ฉํ๋ ๊ธฐ์ ํ๊ฒฝ์ ๋ชจ๋ ๋ฉด์์ ์๋ก ๋ค๋ฆ ๋๋ค. ๊ธ์ต ๊ธฐ๊ด์ ํต์ฌ ๋ฑ ํน ์์คํ ์ ์๋ DB2 ์ปฌ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ณณ์์ ์ฐธ์กฐ๋ ์ ์์ต๋๋ค.
- SQL์ด ๋ด์ฅ๋ COBOL ํ๋ก๊ทธ๋จ์ผ๋ก ์ผ์ผ ๊ณ์ข ๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ปฌ๋ผ ๋ ์ด์์์ ๋งคํ๋๋ ์ถ์ถ ํ์ผ์ ์์ฑํ๋ JCL ์์ ๋จ๊ณ
- ์ด์ ์ฐธ์กฐํ๋ ์ ์ฅ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ Java ๋ง์ดํฌ๋ก์๋น์ค
- JDBC๋ฅผ ํตํด DB2์ ์ง์ ์ฟผ๋ฆฌํ์ฌ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ Python ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ
- BI ๋๊ตฌ์์ ๊ฒฝ์์ง ๋์๋ณด๋์ ์ฌ์ฉ๋๋ SQL ๋ทฐ
- ํฐ๋ฏธ๋ ํ๋ฉด์ ์ด ๊ฐ์ ํ์ํ๋ CICS ํธ๋์ญ์ ํ๋ก๊ทธ๋จ
์ด๋ฌํ ์ฐธ์กฐ๋ ์๋ก ๋ค๋ฅธ 5๊ฐ ์ธ์ด๋ก ์์ฑ๋์๊ณ , 3๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฐํ์ ํ๊ฒฝ(๋ฉ์ธํ๋ ์, ํด๋ผ์ฐ๋, BI ํ๋ซํผ)์์ ๊ด๋ฆฌ๋๋ฉฐ, ์๋ก ์ง์ ์ํตํ์ง ์๋ ํ๋ค์ด ์ ์ง ๋ณด์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ณผ Java ์๋น์ค ํ ๊ฐ์ ํฉ์๋ ์ด ์ด๋ฆ ๋ณ๊ฒฝ ์ฌํญ์ด COBOL ํ, ๋ณด๊ณ ํ, BI ํ์๊ฒ๋ ์์คํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ ๊น์ง ์๋ ค์ง์ง ์์ ์๋ ์์ต๋๋ค.
์ ์ ํ๋ก๊ทธ๋จ ๋ถ์ ๊ธฐ๋ฒ์ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์์ ํตํด ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ ์์ฉ์ ์ถ์ถํจ์ผ๋ก์จ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ด ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ์น๋ ์ํฅ์ ํ์ ํฉ๋๋ค. ๋์ผํ ์๋ฆฌ๋ฅผ COBOL, JCL, Python ๋ฐ SQL์ ๋์์ ์ ์ฉํ์ฌ COBOL ์์ค ์ฝ๋์ ํฌํจ๋ SQL, JCL ํ๋ก๊ทธ๋จ์ EXEC SQL ๋ธ๋ก, Python ์คํฌ๋ฆฝํธ์ ๋งค๊ฐ๋ณ์ํ๋ ์ฟผ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL ๊ฐ์ฒด๋ฅผ ๋ถ์ํจ์ผ๋ก์จ ์ธ์ด ๊ฐ ์คํค๋ง ๋ณ๊ฒฝ ์ํฅ ๋ถ์์ ์ฉ์ดํ๊ฒ ํ๋ ์์ ํ ์ธ์ด ๊ฐ ์ข ์์ฑ ๋งต์ ์์ฑํ ์ ์์ต๋๋ค.
CI/CD ํตํฉ: ์ํฅ ๋ถ์ ์๋ํ
์คํค๋ง ๋ณ๊ฒฝ ์ ์ ์๋์ผ๋ก ์ํฅ ๋ถ์์ ํ๋ ๊ฒ์ ๋ถ์์ ์ ํ ํ์ง ์๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. ํ์ง๋ง CI/CD ๊ฒ์ดํธ๋ก์ ์๋ํ๋ ์ํฅ ๋ถ์์ ์ํํ๋ ๊ฒ์ด ์๋ ๋ถ์๋ณด๋ค ํจ์ฌ ํจ๊ณผ์ ์ ๋๋ค. ์๋ํ๋ ๋ถ์์ ๊ฐ๋ฐ์์ ์์จ์ ์ธ ๊ด๋ฆฌ ์์ด๋ ๋งค๋ฒ ์คํ๋๋ฉฐ, ๋ถ์์ด ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ ๋ฐฐํฌ๋ฅผ ์ฐจ๋จํฉ๋๋ค.
์
# GitHub Actions: schema impact gate
name: Schema Change Impact Analysis
on:
pull_request:
paths:
- 'migrations/**'
- 'schema/**'
- '**/*.sql'
jobs:
schema-impact:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect schema changes
id: detect
run: |
git diff origin/main...HEAD -- migrations/ schema/ \
> schema_changes.diff
# Classify: any breaking changes?
if grep -qiE \
"DROP COLUMN|RENAME|ALTER.*NOT NULL|DROP TABLE|DROP PROCEDURE" \
schema_changes.diff; then
echo "breaking=true" >> $GITHUB_OUTPUT
echo "Breaking schema changes detected"
else
echo "breaking=false" >> $GITHUB_OUTPUT
fi
- name: Block on breaking change without impact sign-off
if: steps.detect.outputs.breaking == 'true'
run: |
# Check for required impact analysis label on PR
if ! gh pr view ${{ github.event.pull_request.number }} \
--json labels --jq '.labels[].name' \
| grep -q "impact-analysis-complete"; then
echo "ERROR: Breaking schema change requires impact-analysis-complete label"
echo "Complete the impact analysis checklist before merging"
exit 1
fi
env:
GH_TOKEN: ${{ github.token }}
- name: Run catalog dependency check
run: |
psql ${{ secrets.DB_URL }} -f scripts/check_dependencies.sql \
| tee dependency_report.txt
if grep -q "DEPENDENT_COUNT > 0" dependency_report.txt; then
echo "Dependents found -- review dependency_report.txt"
fi
์์ ๊ฒ์ดํธ๋ ์ธ ๊ฐ์ง ์์ ์ ์ํํฉ๋๋ค. ์ฒซ์งธ, ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณ๊ฒฝ ํจํด์ด ์๋์ง ๊ฐ์งํฉ๋๋ค. ๋์งธ, ๋ณํฉ์ด ํ์ฉ๋๊ธฐ ์ ์ ๊ฒํ ์๊ฐ ์ํฅ ๋ถ์์ ์๋ฃํ๊ณ ๋ ์ด๋ธ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ ์งธ, ์นดํ๋ก๊ทธ ์ข ์์ฑ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์ข ์์ฑ์ ์ด๊ฑฐํฉ๋๋ค. ๋ ์ด๋ธ ์ง์ ์๊ตฌ ์ฌํญ์ ํต์ฌ์ ์ธ ์ธ์ ๊ฒํ ๋จ๊ณ์ด๋ฉฐ ํ์ดํ๋ผ์ธ์์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ์ฆ, ์ฝ๋๊ฐ ๋ณํฉ๋๊ธฐ ์ ์ ์ํฅ ๋ถ์์ด ์ํ๋๊ณ ๋ฌธ์ํ๋์ด์ผ ํฉ๋๋ค.
์๋ฒฝํ ์คํค๋ง ์ํฅ ๋ณด๊ณ ์์ ํฌํจ๋๋ ๋ด์ฉ
์คํค๋ง ์ํฅ ๋ถ์ ๊ฒฐ๊ณผ๋ ๋ณ๊ฒฝ ์๋ฌธ ์์ํ, ์ํคํ ํธ ๋ฐ DBA๊ฐ ๋ฐฐํฌ๋ฅผ ์น์ธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐํ๋ ๋ณด๊ณ ์์ ๋๋ค. ์ ์ฒด ๋ณด๊ณ ์์๋ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค.
1. ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ ์ ์ , ์ฌ์ฉ๋ ์ ํํ DDL ๋ฌธ, ์ํฅ์ ๋ฐ๋ ํ ์ด๋ธ ๋ฐ ์ด, ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ์ฌ์ .
2. ์ํ ๋ถ๋ฅ ์ฒด๊ณ์ ๋ฐ๋ฅธ ๋ณ๊ฒฝ ๋ถ๋ฅ : ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ๊ฐ์ฑ ์ฌ๋ถ, ์ํ ์์ค, ๊ทธ๋ฆฌ๊ณ ๊ตฌ์ฒด์ ์ธ ์ํฅ ๋ฒ์ฃผ(๋ฐ์ดํฐ ์์ค ์ํ, ์ฟผ๋ฆฌ ์คํจ ์ํ, ์ฑ๋ฅ ์ํ).
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์ข ์ ํญ๋ชฉ , ์ฆ ์นดํ๋ก๊ทธ ์ฟผ๋ฆฌ์ ์ถ๋ ฅ: ๋ณ๊ฒฝ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ๋ทฐ, ์ ์ฅ ํ๋ก์์ , ํจ์ ๋ฐ ํธ๋ฆฌ๊ฑฐ์ ํด๋น ๊ฐ์ฒด์ ํ์ฌ ์ ์ ๋ฐ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ.
4. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์ข ์์ฑ ๋ชฉ๋ก (์ธ์ด๋ณ, ํ์ผ ๊ฒฝ๋ก, ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ค ๋ฒํธ, ๋ฐ๊ฒฌ๋ ํน์ SQL ์ฐธ์กฐ ํฌํจ). ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ํ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ํ ๋๋ ์๋น์ค๋ณ๋ก ์ ๋ฆฌํฉ๋๋ค.
5. ETL ๋ฐ ํ์ดํ๋ผ์ธ ์ข ์ ํญ๋ชฉ์ ํ์ดํ๋ผ์ธ ์ด๋ฆ, ์์ ๋ฐ ๋ณ๊ฒฝ๋ ์ด ๋๋ ํ ์ด๋ธ์ ๋ํ ํน์ ์ฐธ์กฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
6. ์์คํ ์ด๋ฆ, ๋ฐ์ดํฐ ํผ๋ ๋๋ API ๊ณ์ฝ๋ณ๋ก ํ์ ์์คํ ๋ฐ ํํธ๋ ์ข ์ ํญ๋ชฉ์ ๋์ดํ๊ณ , ํ์ ์์คํ ์ธํฐํ์ด์ค์ ํ์๋๋ ํ๋ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
7. ์ข ์ ํญ๋ชฉ๋ณ ํ์ ๋ณ๊ฒฝ ์ฌํญ: ๋ฐ๊ฒฌ๋ ๊ฐ ์ข ์ ํญ๋ชฉ์ ๋ํด ์คํค๋ง ๋ณ๊ฒฝ ๋ฐฐํฌ ํ ์ ํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ์ํ ๊ตฌ์ฒด์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋ค.
8. ๋ฐฐํฌ ์์ , ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ข ์ ํญ๋ชฉ์ ์ ๋ฐ์ดํธํ๊ณ ์คํค๋ง ๋ณ๊ฒฝ์ ๋ฐฐํฌํด์ผ ํ๋ ์์. ์ผ๋ฐ์ ์ผ๋ก ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณ๊ฒฝ์๋ ๋ค์์ด ํ์ํฉ๋๋ค. (1) ํธํ์ฑ ๊ณ์ธต ๋๋ ๊ธฐ๋ณธ๊ฐ ๋ฐฐํฌ, (2) ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์ ์ด ์ด๋ฆ์ ์ฐธ์กฐํ๋๋ก ์ ๋ฐ์ดํธ, (3) ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋ฐฐํฌ, (4) ์ ํจ์ฑ ๊ฒ์ฌ, (5) ์คํค๋ง ๋ณ๊ฒฝ ๋ฐฐํฌ, (6) ์ ํจ์ฑ ๊ฒ์ฌ, (7) ํธํ์ฑ ๊ณ์ธต ์ ๊ฑฐ.
9. ํ์ ํ ์คํธ ์ผ์ด์ค: ์ข ์ ์ ํ๋น ํ๋์ ์ ํจ์ฑ ๊ฒ์ฌ ํ ์คํธ์ ์์ ๋ ์ ์ฅ ํ๋ก์์ ์ ๋ํ ํ๊ท ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค.
10. ๋กค๋ฐฑ ๊ณํ , ์ญ๋ฐฉํฅ DDL ๋ฐ ๋ฐฐํฌ๋ฅผ ๋๋๋ ค์ผ ํ๋ ๊ฒฝ์ฐ ์ด์ ์คํค๋ง ์ํ๋ฅผ ๋ณต์ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ .
๋ณด๊ณ ์ฒด๊ณ: ์ํฅ ๋ณด๊ณ ์๊ฐ ์กด์ฌํ์ง๋ง ์กฐ์น๊ฐ ์ทจํด์ง์ง ์๋ ๊ฒ์ ๋ณด๊ณ ์๊ฐ ์๋ ๊ฒ๋ณด๋ค ๋ ๋์ฉ๋๋ค. ์ด๋ ์ค์ฌ๋ฅผ ์ํํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ์ํ์ ์ํ๋์ง ์์ ์ฑ๋ก ๋จ๊ฒ ๋ฉ๋๋ค. ์ข ์ ํญ๋ชฉ ๋ชฉ๋ก์ ๋ชจ๋ ํญ๋ชฉ์ ๋ฐฐํฌ ์ ์ ์ ๋ฐ์ดํธ๋๊ฑฐ๋, ๋น์ ๊ณํ์ ์๋ฆฝํ์ฌ ์๋ ค์ง ์ํ์ผ๋ก ๋ช ์์ ์ผ๋ก ์ธ์ ๋์ด์ผ ํฉ๋๋ค.
๋ฐฉ๋ฒ SMART TS XL ์ธ์ด ๊ฐ ์คํค๋ง ์ํฅ ๋ถ์์ ์ ๊ณตํฉ๋๋ค.
ํ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์นดํ๋ก๊ทธ ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ๋ทฐ, ์ ์ฅ ํ๋ก์์ ๋ฐ ํธ๋ฆฌ๊ฑฐ์ ๊ฐ์ 1๊ณ์ธต ์ข ์ ์์๋ฅผ ์ด๊ฑฐํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๊ฒ์ ๋๊ตฌ๋ ๋จ์ผ ์ธ์ด ๋ด์์ ์ผ๋ถ 2๊ณ์ธต ์ข ์ ์์๋ฅผ ์ด๊ฑฐํฉ๋๋ค. ๋ชจ๋ ์ธ์ด์ ๊ฑธ์ณ ๋ค ๊ฐ์ง ๊ณ์ธต ๋ชจ๋๋ฅผ ํฌ๊ดํ๋ ๋จ์ผ ๋๊ตฌ๋ ์์ต๋๋ค.
SMART TS XL์ ์ ์ ์ฝ๋ ๋ถ์ COBOL ์์ค ํ์ผ์ ๋ด์ฅ SQL, Java ์๋น์ค์ JDBC ์ฟผ๋ฆฌ ๋ฌธ์์ด, Python ํ์ดํ๋ผ์ธ์ SQLAlchemy ๋ชจ๋ธ ๋ฐ SQL ๊ฐ์ฒด ์ ์๋ฅผ ๋์์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. DB2 ์ด์ ์ด๋ฆ ๋ณ๊ฒฝ์ด ์ ์๋ ๋, SMART TS XL ์ด ๋ถ์ ๋๊ตฌ๋ ์ ์ฒด ๋ค๊ตญ์ด ํฌํธํด๋ฆฌ์ค์์ ํด๋น ์ด์ ์ฐธ์กฐํ๋ ๋ชจ๋ COBOL EXEC SQL ๋ธ๋ก, ์ด ์ด๋ฆ์ ํฌํจํ๋ ๋ชจ๋ Java JDBC ์ฟผ๋ฆฌ ๋ฌธ์์ด, ํด๋น ์ด์ ์ฌ์ฉํ๋ ๋ชจ๋ Python ์ฟผ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ํด๋น ์ด์ ์ฐธ์กฐํ๋ ๋ชจ๋ SQL ๋ทฐ ๋๋ ์ ์ฅ ํ๋ก์์ ๋ฅผ ํ ๋ฒ์ ๋ถ์์ผ๋ก ์๋ณํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ข ์์ฑ ๋งคํ์ ์ง์ ์ ์ธ ์ด ์ฐธ์กฐ๋ฅผ ๋์ด ๊ตฌ์กฐ์ ์ข ์์ฑ ์ฒด์ธ๊น์ง ๋ถ์ ๋ฒ์๋ฅผ ํ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด Java ์๋น์ค๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ์ฐธ์กฐํ๋ ์ ์ฅ ํ๋ก์์ ๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ, ์ข ์์ฑ ๋งต์ Java ์๋น์ค์ ํ๋ก์์ ๊ฐ์ ์ข ์์ฑ ๋ฐ ํ๋ก์์ ์ ์ด ๊ฐ์ ์ข ์์ฑ์ ๋ชจ๋ ๋ํ๋ด๋ฏ๋ก, Java ์๋น์ค ์ฝ๋์ ์ง์ ์ ์ธ ์ด ์ฐธ์กฐ๊ฐ ์๋๋ผ๋ ์ํฅ ๋ฒ์์์ ํด๋น ์๋น์ค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ํฅ ๋ถ์ ๊ธฐ๋ฅ์ ์ด๋ฌํ ์ธ์ด ๊ฐ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ์ ์ฉํ์ฌ ๋ชจ๋ ์คํค๋ง ๋ณ๊ฒฝ์ ์์ ์ ๊ธฐ๋๋ ํน์ ์ง๋ฌธ์ ๋ตํฉ๋๋ค. ์ฆ, ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ๋ ๋ชจ๋ ์ธ์ด์ ๋ชจ๋ ๊ณ์ธต์์ ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ด๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ์ถ์ ์น๋ ๊ฐ๋ฐ์์ ๊ธฐ์ต์ ์์กดํ ์ํฅ ์์๊ฐ ์๋๋ผ ์ค์ ์ฝ๋์์ ๋์ถ๋ ๊ตฌ์กฐํ๋ ์ด๊ฑฐํ ๋ชฉ๋ก์ผ๋ก, ์์ ์ํฅ ๋ณด๊ณ ์ ํ ํ๋ฆฟ์ ์ง์ ๋งคํ๋ฉ๋๋ค.
์ํฐํ๋ผ์ด์ฆ ๊ฒ์ ๊ธฐ๋ฅ์ ํตํด ๋ณ๊ฒฝ ๊ด๋ฆฌ ์๋ช ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑธ์ณ ์ข ์์ฑ ๋ชฉ๋ก์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. COBOL, Java, Python ๋ฐ SQL์ ํฌํจํ ์๋ฐฑ๋ง ์ค์ ์ฝ๋์์ ํน์ ์ด์ ์ฐธ์กฐํ๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ๋์์ ๋ช ์ด ๋ง์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ค์ํ ํ๊ฒฝ์์ ์คํค๋ง ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๋ ํ์ ์ํ ๋ ๊ฑฐ์ ํ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋ํ ๋์์ธ COBOL ๋ฉ์ธํ๋ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ด๋ฅผ ๋์ฒดํ๋ ์ต์ Java ์๋น์ค ๊ฐ์ ๊ณต์ ํ๋ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ, ์ธ์ด ๊ฐ ์ํฅ ๋ถ์์ ํ์์ ์ ๋๋ค. ํ๋ํ ์ ํ ๊ณผ์ ์์ ๋ ๊ฑฐ์ ์์คํ ๊ณผ ์ต์ ์์คํ ์ด ๋์์ ์ด์๋ฉ๋๋ค. Java ์๋น์ค ๊ด์ ์์๋ ๋ฌธ์ ๊ฐ ์๋ ์คํค๋ง ๋ณ๊ฒฝ์ด๋ผ๋ ํจ๊ป ์คํ๋๋ COBOL ํ๋ก๊ทธ๋จ์์๋ ์ธ์๋์ง ์์ ์ ์์ต๋๋ค. SMART TS XL ๊ทธ ๊ฒฝ๊ณ์ ์์ชฝ์ ๋์์ ๋ณธ๋ค.
์คํค๋ง ๋ณ๊ฒฝ ์์ฒด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ํค์ง ์์ต๋๋ค. ๋ถ์๋์ง ์์ ์คํค๋ง ๋ณ๊ฒฝ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค.
์ด ๊ฐ์ด๋ ์ด๋ฐ์ ๋์ค๋ ๋ฐฐํฌ ์คํจ ์ฌ๋ก, ์ฆ Java ์๋น์ค, COBOL ๋ฐฐ์น ์์ , ๊ทธ๋ฆฌ๊ณ ๋ณด๊ณ ํ์ดํ๋ผ์ธ์ ๊ฐ๋ 3์๊ฐ ๋ง์ ์๋ ๋ถ๋ฅ ์ํ๋ก ๋ง๋ ์ด ์ด๋ฆ ๋ณ๊ฒฝ ๋ฌธ์ ๋ ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ ์์ฒด์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋์๊ณ , ์ด ์ด๋ฆ๋ ์๋ํ ๋๋ก ์ ํํ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ฌธ์ ๋ ๊ทธ ์ ์ ์ํ๋์์ด์ผ ํ ๋ถ์ ์์ , ์ฆ ์๋ ์ด ์ด๋ฆ์ ์ฐธ์กฐํ๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ฑฐํ๊ณ , ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๋ฐ์ดํธ๋์๋์ง ํ์ธํ๊ณ , ๋ฐฐํฌ ์์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ์ฌ์ฉ์ ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋์ง ๊ฒ์ฆํ๋ ์์ ์ ์์์ต๋๋ค.
์คํค๋ง ์ํฅ ๋ถ์์ ๋จ์ํ ํ์์ ์ธ ์ ์ฐจ๊ฐ ์๋๋๋ค. ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถํ์คํ ๋ฒ์๋ฅผ ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ํญ๋ชฉ์ ์ด๊ฑฐ ๊ฐ๋ฅํ๊ณ ๊ฒ์ฆ ๊ฐ๋ฅํ ๋ชฉ๋ก์ผ๋ก ๋ณํํ์ฌ ์ํํ ๋ฐฐํฌ๋ฅผ ์์ ํ ๋ฐฐํฌ๋ก ์ ํํ๋ ์์ ์ ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ ๋จ ๋ช ๋ถ์ด๋ฉด ์๋ฃ๋์ง๋ง, ์ํฅ ๋ถ์์๋ ํ์ํ ๋งํผ์ ์๊ฐ์ด ์์๋ฉ๋๋ค. ํ์ง๋ง ์ด๋ฅผ ํตํด ์๋ฐฉ๋๋ ์ด์ ํ๊ฒฝ ์ฅ์ ๋ ๋ฉฐ์น ์ด ๊ฑธ๋ฆด ์๋ ์์ต๋๋ค.