> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sifi.life/llms.txt
> Use this file to discover all available pages before exploring further.

# 왜 올바른 파이프라인 구성이 중요한가요?과 Unity Catalog Co

> 이 문서는 **[데이터 엔지니어링](/training/05-data-engineering/overview)** 섹션의 일부입니다.

## 왜 올바른 파이프라인 구성이 중요한가요?

Lakeflow Connect의 수집 파이프라인은 한번 설정하면 지속적으로 운영되는 시스템입니다. 초기 구성을 올바르게 하지 않으면 **데이터 누락, 성능 저하, 불필요한 비용 증가** 등의 문제가 발생할 수 있습니다. 이 문서에서는 수집 파이프라인의 각 구성 요소를 상세히 설명하고, 운영 환경에서의 모범 사례를 안내합니다.

***

## Unity Catalog Connection 설정

### Connection이란?

Unity Catalog **Connection** 은 외부 데이터 소스에 접속하기 위한 자격증명과 연결 정보를 **중앙에서 안전하게 관리** 하는 객체입니다. 한번 생성하면 여러 파이프라인에서 재사용할 수 있습니다.

| 구성 요소                               | 역할                  | 사용하는 파이프라인           |
| ----------------------------------- | ------------------- | -------------------- |
| **Connection: mysql\_prod**         | MySQL 프로덕션 연결       | 고객 데이터 수집, 주문 데이터 수집 |
| **Connection: salesforce\_crm**     | Salesforce CRM 연결   | CRM 동기화              |
| **Connection: postgres\_analytics** | PostgreSQL 분석 DB 연결 | 분석 DB 수집             |

### Connection 생성 옵션 상세

#### MySQL Connection

```sql theme={null}
CREATE CONNECTION mysql_prod
TYPE MYSQL
OPTIONS (
    host = 'mysql-prod.example.com',    -- MySQL 서버 주소
    port = '3306',                       -- 포트 (기본값: 3306)
    user = 'databricks_reader',          -- 접속 계정
    password = secret('scope', 'mysql-password'),  -- Secret 참조
    useSSL = 'true',                     -- SSL 암호화 사용
    trustServerCertificate = 'false'     -- 서버 인증서 검증
);
```

#### PostgreSQL Connection

```sql theme={null}
CREATE CONNECTION postgres_analytics
TYPE POSTGRESQL
OPTIONS (
    host = 'postgres.example.com',
    port = '5432',
    user = 'databricks_cdc',
    password = secret('scope', 'pg-password'),
    database = 'analytics',              -- 대상 데이터베이스 지정
    sslmode = 'require'                  -- SSL 모드 (require/verify-full)
);
```

#### SQL Server Connection

```sql theme={null}
CREATE CONNECTION sqlserver_erp
TYPE SQLSERVER
OPTIONS (
    host = 'sqlserver.example.com',
    port = '1433',
    user = 'databricks_reader',
    password = secret('scope', 'mssql-password'),
    database = 'ERP',
    encrypt = 'true',
    trustServerCertificate = 'false'
);
```

#### Salesforce Connection

```sql theme={null}
CREATE CONNECTION salesforce_crm
TYPE SALESFORCE
OPTIONS (
    sfUrl = 'https://mycompany.my.salesforce.com',
    oauthClientId = secret('scope', 'sf-client-id'),
    oauthClientSecret = secret('scope', 'sf-client-secret'),
    oauthRefreshToken = secret('scope', 'sf-refresh-token')
);
```

### Connection 보안 모범 사례

| 항목            | 권장 사항               | 이유         |
| ------------- | ------------------- | ---------- |
| **비밀번호 관리**   | `secret()` 함수 사용    | 평문 노출 방지   |
| **계정 권한**     | 최소 필요 권한만 부여        | 보안 원칙 준수   |
| **전용 계정**     | Databricks 전용 계정 생성 | 감사 추적 용이   |
| **SSL 사용**    | SSL/TLS 활성화         | 통신 구간 암호화  |
| **네트워크 제한**   | IP 화이트리스트 설정        | 비인가 접근 차단  |
| **비밀번호 로테이션** | 주기적 갱신 (90일 권장)     | 자격증명 유출 대비 |

***

## 테이블 선택 및 필터링

### 전체 스키마 수집 vs 개별 테이블 선택

| 방식            | 장점                 | 단점                  | 적합한 경우                 |
| ------------- | ------------------ | ------------------- | ---------------------- |
| **전체 스키마**    | 설정 간단, 새 테이블 자동 수집 | 불필요한 테이블까지 수집       | 소스 스키마의 모든 데이터가 필요한 경우 |
| **개별 테이블 선택** | 필요한 데이터만 수집, 비용 절감 | 새 테이블 추가 시 설정 변경 필요 | 특정 테이블만 필요한 경우         |

### 테이블 선택 패턴

```python theme={null}
# 방법 1: 전체 스키마 수집
@dlt.table
def ingest_all():
    return mysql.read_changefeed(
        connection="mysql_prod",
        source_schema="ecommerce",
        # source_table 생략 시 전체 스키마 수집
    )

# 방법 2: 특정 테이블만 선택
@dlt.table
def ingest_customers():
    return mysql.read_changefeed(
        connection="mysql_prod",
        source_schema="ecommerce",
        source_table="customers"
    )
```

### UI에서 테이블 필터링

Pipeline UI에서 테이블을 선택할 때 다음과 같은 필터링 옵션을 사용할 수 있습니다:

| 필터 옵션         | 설명                  | 예시                        |
| ------------- | ------------------- | ------------------------- |
| **스키마 선택**    | 특정 스키마의 모든 테이블      | `ecommerce` 스키마 전체        |
| **테이블 개별 선택** | 체크박스로 필요한 테이블만 선택   | `customers`, `orders`만 선택 |
| **와일드카드 패턴**  | 이름 패턴으로 필터 (일부 커넥터) | `dim_*`, `fact_*`         |
| **제외 패턴**     | 특정 테이블 제외           | 임시 테이블, 로그 테이블 제외         |

***
