이 페이지에서는 CSV 파일을 사용하여 Cloud SQL 인스턴스로 데이터를 내보내고 가져오는 방법을 설명합니다.
시작하기 전에
내보내기 또는 가져오기 작업을 시작하기 전에 다음 사항을 확인하세요.
- 데이터베이스에 충분한 여유 공간이 있는지 확인합니다.
- CSV 파일에 예상 데이터가 있고 형식이 올바른지 확인합니다. CSV 파일에는 데이터 필드의 행마다 한 줄이 있어야 합니다.
- 데이터 내보내기 및 가져오기 권장사항을 따르세요.
내보내기 및 가져오기 작업은 데이터베이스 리소스를 사용하지만 인스턴스가 프로비저닝되지 않는 한 일반적인 데이터베이스 작업에 지장을 주지 않습니다.
PostgreSQL용 Cloud SQL에서 데이터 내보내기
PostgreSQL용 Cloud SQL에서 내보내기에 필요한 역할 및 권한
데이터를 Cloud SQL에서 Cloud Storage로 내보내려면 내보내기를 시작하는 사용자에게 다음 역할 중 하나가 있어야 합니다.
- Cloud SQL 편집자 역할
- 다음 권한이 포함된 맞춤 역할:
cloudsql.instances.get
cloudsql.instances.export
또한 Cloud SQL 인스턴스의 서비스 계정에는 다음 역할 중 하나가 있어야 합니다.
storage.objectAdmin
Identity and Access Management(IAM) 역할- 다음 권한이 포함된 맞춤 역할:
storage.objects.create
storage.objects.list
(파일을 동시에 내보내는 경우에만)storage.objects.delete
(파일을 동시에 내보내는 경우에만)
IAM 역할에 대한 도움말은 Identity and Access Management를 참조하세요.
PostgreSQL용 Cloud SQL에서 CSV 파일로 데이터 내보내기
다른 도구와 환경에서 사용할 수 있는 CSV 형식으로 데이터를 내보낼 수 있습니다. 내보내기는 데이터베이스 수준에서 발생합니다. CSV 내보내기 도중에 내보낼 스키마를 지정할 수 있습니다. 데이터베이스 수준의 모든 스키마는 내보낼 수 있습니다.
Cloud SQL 인스턴스의 데이터베이스에서 Cloud Storage 버킷의 CSV 파일로 데이터를 내보내려면 다음 안내를 따르세요.
Console
-
Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.
- 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
- 내보내기를 클릭합니다.
- 내보내기가 진행되는 동안 다른 작업을 수행하려면 내보내기 오프로드를 선택합니다.
-
Cloud Storage 내보내기 위치 섹션에서 내보낼 버킷, 폴더, 파일의 이름을 추가하거나 찾아보기를 클릭하여 버킷, 폴더 또는 파일을 찾거나 만듭니다.
찾아보기를 클릭한 경우:
- 위치 섹션에서 내보낼 Cloud Storage 버킷 또는 폴더를 선택합니다.
이름 상자에
CSV
파일의 이름을 추가하거나 위치 섹션의 목록에서 기존 파일을 선택합니다..gz
파일 확장자(전체 확장자는.csv.gz
)를 사용하여 내보내기 파일을 압축할 수 있습니다.- 선택을 클릭합니다.
- 형식 섹션에서 CSV를 클릭합니다.
- 내보낼 데이터베이스 섹션의 드롭다운 메뉴에서 데이터베이스의 이름을 선택합니다.
-
SQL 쿼리에서 데이터를 내보낼 테이블을 지정하는 SQL 쿼리를 입력합니다.
예를 들어
guestbook
데이터베이스에서entries
테이블의 전체 콘텐츠를 내보내려면 다음을 입력합니다.SELECT * FROM guestbook.entries;
쿼리에서 지정된 데이터베이스의 테이블을 지정해야 합니다. 데이터베이스 전체를 CSV 형식으로 내보낼 수는 없습니다. - 내보내기를 클릭하여 시작합니다.
- 데이터베이스를 내보낼까요? 대화상자가 열리고 크기가 큰 데이터베이스의 경우 내보내기 프로세스가 1시간 이상 걸릴 수 있다는 메시지가 표시됩니다. 내보내는 동안 인스턴스에 수행할 수 있는 유일한 작업은 정보 보기입니다. 내보내기가 시작된 후 작업을 취소할 수 있습니다. 내보내기를 시작해도 좋으면 내보내기를 클릭합니다. 그렇지 않으면 취소를 클릭합니다.
gcloud
- Cloud Storage 버킷을 만듭니다.
파일을 버킷에 업로드합니다.
버킷에 파일 업로드하기에 대한 도움말은 객체 업로드를 참조하세요.
- 내보낼 Cloud SQL 인스턴스의 서비스 계정을 찾습니다.
gcloud sql instances describe
명령어를 실행하여 수행할 수 있습니다. 출력에서serviceAccountEmailAddress
필드를 찾습니다.gcloud sql instances describe INSTANCE_NAME
gsutil iam
을 사용하여 Cloud SQL 인스턴스 서비스 계정에storage.objectAdmin
IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.- 데이터베이스를 내보냅니다.
gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME \ --offload \ --query=SELECT_QUERY
export csv
명령어 사용에 대한 자세한 내용은sql export csv
명령어 참조 페이지를 확인하세요. - 이전에 설정한 IAM 역할을 유지할 필요가 없으면 지금 취소합니다.
REST v1
- 내보내기에 사용할 버킷을 만듭니다.
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
이 단계는 필수 사항은 아니지만 다른 데이터에 대한 액세스를 열지 않아도 되기 때문에 적극 권장됩니다.
- 인스턴스에 버킷의
legacyBucketWriter
IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요. -
데이터베이스를 내보냅니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project-id: 프로젝트 ID
- instance-id: 인스턴스 ID
- bucket_name: Cloud Storage 버킷 이름
- path_to_csv_file: CSV 파일의 경로
- database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름
- offload: 서버리스 내보내기를 사용 설정합니다. 서버리스 내보내기를 사용하기 위해
true
로 설정합니다. - select_query: 내보낼 SQL 쿼리(선택사항)
- escape_character: 이스케이프 처리되어야 하는 데이터 문자 앞에 표시되어야 하는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- quote_character: 문자열 데이터 유형이 있는 열의 값을 묶는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- fields_terminated_by: 열 값을 분할하는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "2C"는 쉼표를 나타냅니다. (선택사항)
- lines_terminated_by: 줄 레코드를 분할하는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "0A"는 줄바꿈을 나타냅니다. (선택사항)
HTTP 메서드 및 URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export
JSON 요청 본문:
{ "exportContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "databases": ["database_name"], "offload": true | false "csvExportOptions": { "selectQuery":"select_query", "escapeCharacter":"escape_character", "quoteCharacter":"quote_character", "fieldsTerminatedBy":"fields_terminated_by", "linesTerminatedBy":"lines_terminated_by" } } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
databases
속성을 사용하여 정확히 하나의 데이터베이스만 지정해야 하며, select 쿼리가 데이터베이스를 지정하는 경우 이 데이터베이스와 동일해야 합니다. - 이전에 설정한 IAM 권한을 유지할 필요가 없으면 지금 삭제합니다.
REST v1beta4
- 내보내기에 사용할 버킷을 만듭니다.
gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
이 단계는 필수 사항은 아니지만 다른 데이터에 대한 액세스를 열지 않아도 되기 때문에 적극 권장됩니다.
- 인스턴스에 버킷의
storage.objectAdmin
IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요. -
데이터베이스를 내보냅니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project-id: 프로젝트 ID
- instance-id: 인스턴스 ID
- bucket_name: Cloud Storage 버킷 이름
- path_to_csv_file: CSV 파일의 경로
- database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름
- offload: 서버리스 내보내기를 사용 설정합니다. 서버리스 내보내기를 사용하기 위해
true
로 설정합니다. - select_query: 내보낼 SQL 쿼리(선택사항)
- escape_character: 이스케이프 처리되어야 하는 데이터 문자 앞에 표시되어야 하는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- quote_character: 문자열 데이터 유형의 열 값을 묶는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- fields_terminated_by: 열 값을 분할하는 문자를 지정합니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "2C"는 쉼표를 나타냅니다. (선택사항)
- lines_terminated_by: 줄 레코드를 분할하는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "0A"는 줄바꿈을 나타냅니다. (선택사항)
HTTP 메서드 및 URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export
JSON 요청 본문:
{ "exportContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "databases": ["database_name"], "offload": true | false "csvExportOptions": { "selectQuery": "select_query", "escapeCharacter": "escape_character", "quoteCharacter": "quote_character", "fieldsTerminatedBy": "fields_terminated_by", "linesTerminatedBy": "lines_terminated_by" } } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
databases
속성을 사용하여 정확히 하나의 데이터베이스만 지정해야 하며, select 쿼리가 데이터베이스를 지정하는 경우 이 데이터베이스와 동일해야 합니다. - 이전에 설정한 IAM 역할을 유지할 필요가 없으면 지금 취소합니다.
CSV 내보내기 파일 형식 맞춤설정
gcloud
또는 REST API를 사용하여 CSV 파일 형식을 맞춤설정할 수 있습니다. 내보내기를 수행할 때 다음 형식 지정 옵션을 지정할 수 있습니다.
CSV 옵션 | 기본값 | gcloud 플래그 | REST API 속성 | 설명 |
---|---|---|---|---|
이스케이프 |
파일 구분 기호의 ASCII 16진수 코드입니다. |
--escape |
escapeCharacter |
이스케이프 처리해야 하는 데이터 문자 앞에 표시되는 문자입니다. MySQL 및 PostgreSQL에서만 지원됩니다. |
견적 |
큰따옴표의 ASCII 16진수 코드입니다. |
--quote |
quoteCharacter |
문자열 데이터 유형의 열 값을 묶는 문자입니다. MySQL 및 PostgreSQL에서만 지원됩니다. |
필드 구분 기호 |
쉼표의 ASCII 16진수 코드입니다. |
--fields-terminated-by |
fieldsTerminatedBy |
열 값을 분할하는 문자입니다. MySQL 및 PostgreSQL에서만 지원됩니다. |
줄바꿈 문자 |
줄바꿈의 ASCII 16진수 코드입니다. |
--lines-terminated-by |
linesTerminatedBy |
줄 레코드를 분할하는 문자입니다. MySQL에서만 지원됩니다. |
예를 들어 이러한 인수를 모두 사용하는 gcloud
명령어는 다음과 같을 수 있습니다.
gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME \ --offload \ --query=SELECT_QUERY \ --quote="22" \ --escape="5C" \ --fields-terminated-by="2C" \ --lines-terminated-by="0A"
이에 상응하는 REST API 요청 본문은 다음과 같습니다.
{ "exportContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "databases": ["DATABASE_NAME"], "offload": true, "csvExportOptions": { "selectQuery": "SELECT_QUERY", "escapeCharacter": "5C", "quoteCharacter": "22", "fieldsTerminatedBy": "2C", "linesTerminatedBy": "0A" } } }
기본적으로 CSV 출력의 결과는 표준 CSV 형식입니다. Cloud SQL에서 제공하는 것보다 더 많은 옵션이 필요한 경우 psql 클라이언트에서 다음 문을 사용할 수 있습니다.
\copy [table_name] TO '[csv_file_name].csv' WITH (FORMAT csv, ESCAPE '[escape_character]', QUOTE '[quote_character]', DELIMITER '[delimiter_character]', ENCODING 'UTF8', NULL '[null_marker_string]');
PostgreSQL용 Cloud SQL로 데이터 가져오기
PostgreSQL용 Cloud SQL로 가져오기에 필요한 역할 및 권한
데이터를 Cloud Storage에서 Cloud SQL로 가져오려면 가져오기를 시작하는 사용자에게 다음 역할 중 하나가 있어야 합니다.
- Cloud SQL 관리자 역할
- 다음 권한이 포함된 맞춤 역할:
cloudsql.instances.get
cloudsql.instances.import
또한 Cloud SQL 인스턴스의 서비스 계정에는 다음 역할 중 하나가 있어야 합니다.
storage.objectAdmin
IAM 역할- 다음 권한이 포함된 맞춤 역할:
storage.objects.get
storage.objects.list
(동시에 파일을 가져오는 경우에만)
IAM 역할에 대한 도움말은 Identity and Access Management를 참조하세요.
CSV 파일에서 PostgreSQL용 Cloud SQL로 데이터 가져오기
- 가져오기의 대상 데이터베이스와 테이블이 Cloud SQL 인스턴스에 존재해야 합니다. 데이터베이스를 만드는 방법은 데이터베이스 만들기를 참조하세요.
- CSV 파일은 CSV 파일 형식 요구사항을 준수해야 합니다.
CSV 파일 형식 요구사항
CSV 파일은 각 데이터 행에 줄이 하나씩 있고 쉼표로 구분된 필드를 사용해야 합니다.
CSV 파일을 사용하여 Cloud SQL 인스턴스로 데이터를 가져오려면 다음 안내를 따르세요.
Console
-
Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.
- 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
- 가져오기를 클릭합니다.
- 데이터를 가져오려는 파일 선택에서 가져오기에 사용할 버킷과 CSV 파일의 경로를 입력합니다. 또는 파일을 찾으려면 다음 안내를 따르세요.
- 둘러보기를 클릭합니다.
- 위치 섹션의 목록에서 버킷 이름을 더블클릭합니다.
- 목록에서 파일을 선택합니다.
- 선택을 클릭합니다.
압축된 파일(
.gz
) 또는 압축되지 않은 파일(.csv
)을 가져올 수 있습니다. - 형식 섹션에서 CSV를 선택합니다.
- Cloud SQL 인스턴스에서 CSV 파일을 가져올 데이터베이스 및 테이블을 지정합니다.
- 가져오기 작업의 사용자를 선택사항으로 지정할 수 있습니다.
- 가져오기를 클릭하여 가져오기를 시작합니다.
gcloud
- Cloud Storage 버킷을 만듭니다.
파일을 버킷에 업로드합니다.
버킷에 파일 업로드하기에 대한 도움말은 객체 업로드를 참조하세요.
- CSV 파일의 데이터를 버킷에 업로드합니다.
- 내보낼 Cloud SQL 인스턴스의 서비스 계정을 찾습니다. 인스턴스 이름을 사용해
gcloud sql instances describe
명령어를 실행하면 됩니다. 출력에서serviceAccountEmailAddress
필드를 찾습니다.gcloud sql instances describe INSTANCE_NAME
- serviceAccountEmailAddress 필드를 복사합니다.
gsutil iam
을 사용하여 버킷의 Cloud SQL 인스턴스 서비스 계정에storage.objectAdmin
IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.- 파일을 가져옵니다.
gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME \ --table=TABLE_NAME
import csv
명령어 사용에 대한 자세한 내용은sql import csv
명령어 참조 페이지를 확인하세요. - 이전에 설정한 IAM 권한을 유지할 필요가 없으면
gsutil iam
을 사용하여 삭제합니다.
REST v1
- Cloud Storage 버킷을 만듭니다.
파일을 버킷에 업로드합니다.
버킷에 파일 업로드하기에 대한 도움말은 객체 업로드를 참조하세요.
- 인스턴스에 버킷의
legacyBucketWriter
및objectViewer
IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요. - 파일을 가져옵니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project-id: 프로젝트 ID
- instance-id: 인스턴스 ID
- bucket_name: Cloud Storage 버킷 이름
- path_to_csv_file: CSV 파일의 경로
- database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름
- table_name: 데이터베이스 테이블의 이름
- escape_character: 이스케이프 처리되어야 하는 데이터 문자 앞에 표시되어야 하는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- quote_character: 문자열 데이터 유형의 열 값을 묶는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- fields_terminated_by: 열 값을 분할하는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "2C"는 쉼표를 나타냅니다. (선택사항)
- lines_terminated_by: 줄 레코드를 분할하는 문자입니다. 이 인수 값은 16진수 ASCII 코드의 문자여야 합니다. 예를 들어 "0A"는 줄바꿈을 나타냅니다. (선택사항)
HTTP 메서드 및 URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import
JSON 요청 본문:
{ "importContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "database": "database_name", "csvImportOptions": { "table": "table_name", "escapeCharacter": "escape_character", "quoteCharacter": "quote_character", "fieldsTerminatedBy": "fields_terminated_by", "linesTerminatedBy": "lines_terminated_by" } } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
이 요청을 위한 매개변수의 전체 목록은 instances:import 페이지를 참조하세요. - 이전에 설정한 IAM 권한을 유지할 필요가 없으면 삭제합니다.
REST v1beta4
- Cloud Storage 버킷을 만듭니다.
파일을 버킷에 업로드합니다.
버킷에 파일 업로드하기에 대한 도움말은 객체 업로드를 참조하세요.
- 인스턴스에 버킷의
storage.objectAdmin
IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요. - 파일을 가져옵니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- project-id: 프로젝트 ID
- instance-id: 인스턴스 ID
- bucket_name: Cloud Storage 버킷 이름
- path_to_csv_file: CSV 파일의 경로
- database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름
- table_name: 데이터베이스 테이블의 이름
- escape_character: 이스케이프 처리되어야 하는 데이터 문자 앞에 표시되어야 하는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- quote_character: 문자열 데이터 유형의 열 값을 묶는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "22"는 큰따옴표를 나타냅니다. (선택사항)
- fields_terminated_by: 열 값을 분할하는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "2C"는 쉼표를 나타냅니다. (선택사항)
- lines_terminated_by: 줄 레코드를 분할하는 문자입니다. 이 인수 값은 ASCII 16진수 형식이어야 합니다 예를 들어 "0A"는 줄바꿈을 나타냅니다. (선택사항)
HTTP 메서드 및 URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
JSON 요청 본문:
{ "importContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "database": "database_name", "csvImportOptions": { "table": "table_name", "escapeCharacter": "escape_character", "quoteCharacter": "quote_character", "fieldsTerminatedBy": "fields_terminated_by", "linesTerminatedBy": "lines_terminated_by" } } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
이 요청을 위한 매개변수의 전체 목록은 instances:import 페이지를 참조하세요. - 이전에 설정한 IAM 권한을 유지할 필요가 없으면 삭제합니다.
PostgreSQL용 Cloud SQL의 CSV 파일 형식 맞춤설정
gcloud
또는 REST API를 사용하여 CSV 파일 형식을 맞춤설정할 수 있습니다.
샘플 gcloud
명령어는 다음과 같습니다.
gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \ --database=DATABASE_NAME \ --table=TABLE_NAME \ --quote="22" \ --escape="5C" \ --fields-terminated-by="2C" \ --lines-terminated-by="0A"
이에 상응하는 REST API 요청 본문은 다음과 같습니다.
{ "importContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "database": ["DATABASE_NAME"], "csvImportOptions": { "table": "TABLE_NAME", "escapeCharacter": "5C", "quoteCharacter": "22", "fieldsTerminatedBy": "2C", "linesTerminatedBy": "0A" } } }
ERROR_RDBMS
오류가 나타나면 테이블이 있는지 확인합니다. 테이블이 있으면 버킷에 대한 올바른 권한이 있는지 확인합니다. Cloud Storage에서 액세스 제어를 구성하는 방법은 액세스제어 목록 만들기 및 관리를 참조하세요.
다음 단계
- 가져오기 및 내보내기 작업 상태 확인 방법 알아보기
- 데이터 가져오기 및 내보내기 권장사항 자세히 알아보기
- 가져오기 및 내보내기에 대해 알려진 문제