MySQL 데이터 소스 구성
MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로, 대량의 데이터를 효율적으로 저장, 관리, 조회할 수 있고 다양한 운영 체제를 지원하여 여러 유형의 소프트웨어와 웹사이트 개발에 널리 사용됩니다.
AE 데이터 개발 플랫폼의 오프라인 동기화 계획은 MySQL 데이터 소스의 읽기(Reader)와 쓰기(Writer)를 지원합니다. 이 문서에서는 MySQL 데이터 동기화 기능의 지원 현황을 소개합니다.
지원 버전
mysql 5.5+
사용 제한
현재는 다음 구성 방식만 지원합니다.
- MySQL 데이터 소스 읽기(오프라인 읽기) 및 AE 사전 설정 스토리지 공간 테이블로 쓰기 지원
- AE 사전 설정 스토리지 공간 테이블에서 MySQL로 쓰기 지원(오프라인 쓰기)
참고: MySQL 데이터베이스에서 AE 사전 설정 스토리지가 아닌 다른 데이터베이스로 직접 쓰는 것은 아직 지원하지 않습니다.
지원 필드 타입
| 필드 타입 | 오프라인 읽기(MySQL Reader) | 오프라인 쓰기(MySQL Writer) |
|---|---|---|
| TINYINT | 지원 | 지원 |
| SMALLINT | 지원 | 지원 |
| INTEGER | 지원 | 지원 |
| BIGINT | 지원 | 지원 |
| FLOAT | 지원 | 미지원 |
| DOUBLE | 지원 | 지원 |
| DECIMAL | 지원 | 지원 |
| DATE | 지원 | 지원 |
| DATETIME | 지원 | 지원 |
| TIMESTAMP | 지원 | 지원 |
| REAL | 지원 | 미지원 |
| VARCHAR | 지원 | 지원 |
| JSON | 지원 | 미지원 |
| TEXT | 지원 | 미지원 |
| MEDIUMTEXT | 지원 | 미지원 |
| LONGTEXT | 지원 | 미지원 |
| ENUM | 지원 | 미지원 |
| SET | 지원 | 미지원 |
| BIT | 지원 | 미지원 |
| TIME | 지원 | 미지원 |
| YEAR | 지원 | 미지원 |
| VARBINARY | 미지원 | 미지원 |
| BINARY | 미지원 | 미지원 |
| TINYBLOB | 미지원 | 미지원 |
| MEDIUMBLOB | 미지원 | 미지원 |
| LONGBLOB | 미지원 | 미지원 |
| Blob | 미지원 | 미지원 |
| BOOLEAN | 미지원 | 미지원 |
| MULTIPOLYGON | 미지원 | 미지원 |
| LINESTRING | 미지원 | 미지원 |
| POLYGON | 미지원 | 미지원 |
| MULTIPOINT | 미지원 | 미지원 |
| MULTILINESTRING | 미지원 | 미지원 |
| GEOMETRYCOLLECTION | 미지원 | 미지원 |
MySQL 데이터 소스 생성
데이터 개발 플랫폼 - 통합 모듈에서 MySQL 데이터 소스 추가를 선택할 수 있습니다.
데이터 소스 설정 파라미터 정보
데이터 소스에 필요한 설정 정보를 입력하고 연결 테스트를 완료하면 MySQL 데이터 소스가 생성됩니다.
파라미터 이름 앞에 *가 있는 항목은 필수 파라미터이고, *가 없는 항목은 선택 파라미터입니다.
| 필드 이름 | 설명 |
|---|---|
| 기본 정보 | |
| *데이터 소스 이름 | 데이터 개발 플랫폼 공간 내에서 고유해야 하며, 영문자, 숫자, 밑줄로 구성하고 숫자나 밑줄로 시작할 수 없습니다 |
| 비고 | 선택 사항 |
| 데이터 소스 설정 | |
| 환경 구분 없음 / 독립 환경 설정 | 둘 중 하나 선택: 환경 구분 없음은 운영 환경과 개발 환경이 하나의 설정을 공유하고, 독립 환경 설정은 두 환경을 각각 독립적으로 설정합니다 |
| *연결 문자열 | 연결 문자열(Connection String)은 MySQL 데이터베이스와 연결을 설정하는 데 사용하는 문자열 조합입니다 참고: 문자열 내 파라미터 분석은 아직 지원하지 않습니다 |
| *데이터베이스명 | 연결할 MySQL 데이터베이스 이름 |
| *사용자 이름 | 데이터베이스에 접근할 권한이 있는 사용자 이름 |
| *비밀번호 | 사용자 이름에 대응하는 비밀번호 |
| 고급 설정 | 데이터베이스 연결에 필요한 기타 고급 파라미터. 직접 입력할 수 있습니다 |
고급 파라미터 블랙리스트
연동 보안을 위해 고급 설정에서는 다음 파라미터를 설정할 수 없습니다.
| 파라미터 이름 | 용도 | 보안 위험 |
|---|---|---|
| allowLoadLocalInfile | 용도: LOAD DATA LOCAL INFILE SQL 문을 통해 클라이언트 머신(즉, Java 애플리케이션을 실행하는 서버)에서 MySQL 데이터베이스로 파일을 로드하는 것을 허용할지 제어합니다. | 보안 위험: 위험도가 매우 높은 파라미터입니다. 활성화하면 악의적인 MySQL 서버(또는 공격당한 정상 서버)가 클라이언트 연결 시 클라이언트의 임의 파일을 역으로 요청할 수 있습니다. 공격자는 MySQL 서버를 위조할 수 있으며, 애플리케이션이 연결을 시도하면 LOAD DATA LOCAL 요청을 보내고, JDBC 드라이버는 클라이언트 머신의 민감한 파일(예: /etc/passwd, ~/.ssh/id_rsa, 애플리케이션 설정 파일, 데이터베이스 연결 설정 등)을 무조건 공격자 서버로 전송합니다. 이를 일반적으로 "MySQL 클라이언트 파일 읽기 취약점" 악용이라고 합니다. |
| allowUrlInLocalInfile | 용도: LOAD DATA LOCAL INFILE 문에서 URL(예: http://, ftp://)을 파일 소스로 지정할 수 있는지 제어합니다. | 보안 위험: 이 파라미터는
|
| allowLoadLocalInfileInPath | 용도: allowLoadLocalInfile의 보안을 강화한 대안입니다(최신 버전의 드라이버 필요). 임의 파일 읽기를 허용하지 않고 파일 읽기를 지정한 디렉터리와 그 하위 디렉터리로 제한합니다. | 보안 위험: 설정한 경로 범위가 너무 넓거나(예: /tmp) 공격자가 다른 애플리케이션 취약점을 통해 허용된 경로에 파일을 쓸 수 있다면 여전히 해당 파일을 읽을 수 있습니다. 잘못 설정하면(예: /로 설정) allowLoadLocalInfile=true와 같은 효과가 됩니다. |
| initCommand | 용도: 새 연결이 생성될 때마다 즉시 실행할 SQL 문을 지정할 수 있습니다. 주로 SET NAMES 'utf8mb4' 또는 SET time_zone = '+8:00'와 같이 세션 변수를 설정하는 데 사용합니다 | 보안 위험: 위험은 사용자 입력의 제어에서 비롯됩니다. 이 파라미터 값이 코드에 하드코딩된 안전한 문자열이 아니라 외부 사용자 입력을 조합하여 만들어진다면 SQL 인젝션이 발생할 수 있습니다. 공격자가 연결 문자열의 initCommand를 제어할 수 있게 되면 테이블 삭제, 데이터 수정, 사용자 추가 등 권한이 있는 모든 SQL 작업을 실행할 수 있습니다. |
| clientFlags | 용도: 클라이언트와 MySQL 서버가 핸드셰이크할 때 사용하는 기능 플래그 비트를 설정하는 저수준 파라미터입니다. 비트마스크(bitmask)로, 숫자 값을 통해 클라이언트의 특정 기능을 활성화하거나 비활성화합니다. | 보안 위험: 위험한 플래그 비트가 포함될 수 있다는 점이 위험합니다. 특히 다음과 같습니다.
|
위 제한은 "최소 권한 원칙"과 "심층 방어"라는 보안 모범 사례에 기반하며, 애플리케이션과 기반 인프라를 악의적인 공격으로부터 보호하기 위한 것입니다.
업무상 관련 기능을 반드시 사용해야 하는 경우 ThinkingAI 운영 유지보수팀에 문의하여 별도 평가를 받으십시오.
오프라인 동기화 작업 생성
위 단계에 따라 MySQL 데이터 소스 생성을 완료하고 연결 테스트에 성공했다면, 실제 시나리오에 맞게 MySQL 오프라인 읽기, MySQL 오프라인 쓰기 등의 오프라인 동기화 작업을 구성할 수 있습니다.
MySQL을 데이터 소스로 사용
데이터 소스에서 MySQL을 선택하고 다음 관련 파라미터를 설정합니다.
| 필드 이름 | 설명 |
|---|---|
| *소스 타입 | 데이터 소스의 대상 타입으로 MySQL 선택 |
| *데이터 소스 이름 | 데이터 소스 관리 화면에 등록된 MySQL 데이터 소스이며, 드롭다운에서 선택할 수 있습니다. 해당 데이터 소스를 아직 만들지 않았다면 데이터 소스 관리 버튼을 클릭하여 MySQL 데이터 소스를 생성할 수 있습니다. |
| *데이터 가져오기 방식 |
|
| *데이터베이스명 | 읽을 데이터베이스 이름 |
| *데이터 테이블 이름 | 읽을 데이터 테이블 정보 |
| 샤딩 키 | 선택한 소스 테이블에 샤딩 필드가 있는 경우 샤딩 키를 선택할 수 있습니다 |
| 데이터 필터링 | 데이터 필터링 스위치를 켜면 SQL 문법으로 WHERE 필터 구문을 작성할 수 있습니다 |
| 고급 설정 | 일괄 처리 건수 등의 파라미터 제어 지원 |
파라미터 이름 앞에 *가 있는 항목은 필수 파라미터이고, *가 없는 항목은 선택 파라미터입니다.
MySQL을 데이터 목적지로 사용
데이터 목적지에서 MySQL을 선택하고 다음 관련 파라미터를 설정합니다.
| 필드 이름 | 설명 |
|---|---|
| *소스 타입 | 데이터 목적지의 대상 타입으로 MySQL 선택 |
| *데이터 소스 이름 | 데이터 소스 관리 화면에 등록된 MySQL 데이터 소스이며, 드롭다운에서 선택할 수 있습니다. 해당 데이터 소스를 아직 만들지 않았다면 데이터 소스 관리 버튼을 클릭하여 MySQL 데이터 소스를 생성할 수 있습니다. |
| *데이터베이스명 | 읽을 데이터베이스 이름 |
| *데이터 테이블 이름 | 읽을 데이터 테이블 정보 |
| *쓰기 모드 |
|
| 고급 설정 | 일괄 처리 건수 등의 파라미터 제어 지원 |
파라미터 이름 앞에 *가 있는 항목은 필수 파라미터이고, *가 없는 항목은 선택 파라미터입니다.
필드 매핑 설명
데이터 소스와 타겟 설정을 완료한 후에는 필드 매핑 관계를 설정해야 합니다. 시스템은 매핑 관계에 따라 소스 필드의 데이터를 타겟 필드로 자동 동기화합니다. 필드 매핑 관계는 다음 세 가지 방식으로 설정할 수 있습니다.
- 방법 1: 직접 선택. 소스 테이블 필드를 선택한 후 타겟 테이블의 타겟 필드를 선택합니다
- 방법 2: 동일 이름으로 매핑. 시스템이 소스 테이블과 타겟 테이블에서 이름이 같은 필드 사이에 매핑 관계를 자동으로 설정합니다
- 방법 3: 동일 행으로 매핑. 시스템이 같은 행에 있는 필드 사이에 매핑 관계를 자동으로 설정합니다
하나의 타겟 필드는 하나의 소스 필드에만 대응할 수 있다는 점에 유의하십시오.
필드 타입 변환 방식
데이터를 동기화할 때 시스템은 CAST() 함수로 소스 테이블 필드의 타입을 타겟 필드의 타입으로 변환하려고 시도합니다. 변환에 실패하면 타겟 필드의 값은 NULL로 설정됩니다
데이터 타입 변환 특이 사항
- √는 해당 타입 변환을 지원함을 의미합니다
- √, null은 해당 타입 변환을 지원하며, 변환에 실패하면 NULL로 설정됨을 의미합니다
| 소스 타입/타겟 타입 | ROW | ARRAY | MAP | STRING | BOOLEAN | TINYINT | SMALLINT | INT | BIGINT | FLOAT | DOUBLE | DECIMAL | BYTES | DATE | TIMESTAMP | TIME |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ROW | √, null | |||||||||||||||
| ARRAY | √, null | |||||||||||||||
| MAP | √, null | |||||||||||||||
| STRING | √ | √, null | √, null | √, null | √, null | √, null | √, null | √, null | √, null | √, null | √, null | √, null | ||||
| BOOLEAN | √, null | √ | ||||||||||||||
| TINYINT | √, null | √ | √, null | √, null | √, null | |||||||||||
| SMALLINT | √, null | √, null | √ | √, null | √, null | |||||||||||
| INT | √, null | √, null | √, null | √ | √, null | |||||||||||
| BIGINT | √, null | √, null | √, null | √, null | √ | |||||||||||
| FLOAT | √, null | √ | √, null | √, null | ||||||||||||
| DOUBLE | √, null | √, null | √ | √, null | ||||||||||||
| DECIMAL | √, null | √, null | √, null | √ | ||||||||||||
| BYTES | √, null | √ | ||||||||||||||
| DATE | √, null | √ | √, null | |||||||||||||
| TIMESTAMP | √, null | √, null | √ | |||||||||||||
| TIME | √, null | √ |
기본 정보 설정
마지막으로 통합 계획의 기본 정보를 설정해야 합니다. 계획 이름, 담당자, 통합 동기화 속도, 비고 등이 포함됩니다.
설정을 완료한 후 저장 버튼을 클릭하면 통합 계획 생성이 완료됩니다.
참고: 계획 이름은 저장 후 수정할 수 없습니다
상세 페이지:
오프라인 동기화 계획을 작업 플로우에 연결
작업 플로우에 연결
1. 연결 시작
- 통합 계획 상세 페이지에서 오른쪽 상단의 작업 플로우에 연결 버튼을 클릭합니다
2. 작업 플로우 선택
-
드롭다운 메뉴에서 대상 작업 플로우를 선택합니다
-
새 작업 플로우를 만들려면:
- 드롭다운 메뉴 아래의 새 작업 플로우 바로가기 버튼을 클릭합니다
- 또는 개발 모듈로 이동하여 생성합니다
-
팁: 대상 작업 플로우가 표시되지 않으면 오른쪽의 ↻ 새로고침 버튼을 클릭합니다
3. 동기화 노드 생성
- 작업 플로우에서 오프라인 동기화 계획 타입의 노드를 새로 만듭니다
- 이 노드는 현재 통합 계획과 연관되며, 노드가 실행되면 해당 통합 계획의 실행이 트리거됩니다
4. 연결 완료
- 노드 생성 및 연결을 클릭하여 설정을 완료합니다
- 연결에 성공하면 작업 플로우로 이동을 클릭하여 연결 결과를 바로 확인할 수 있습니다
참고: 작업 플로우에 연결하여 생성된 작업 노드는 아직 배포되지 않은 상태입니다. 작업 플로우로 이동하여 확인한 후 해당 노드를 배포하여 라이브 상태로 전환하는 것을 권장합니다.
작업 플로우 연결 해제
오프라인 동기화 계획의 작업 플로우 연결을 해제하려면 다음과 같이 진행합니다.
- 작업 플로우가 아직 배포되지 않았다면, 해당 계획이 연결된 작업 플로우로 이동하여 개발 모드에서 해당 오프라인 동기화 계획 작업 노드를 삭제하면 됩니다.
- 작업 플로우가 이미 배포되어 라이브 상태라면, 개발 모드에서 해당 오프라인 동기화 계획 작업 노드를 삭제한 후 작업 플로우를 다시 배포해야 합니다. 이렇게 하면 운영 환경에서도 해당 노드의 연결이 함께 해제됩니다.

