Oracle 사용자를 MySQL용 Cloud SQL로 마이그레이션: 보안, 작업, 모니터링, 로깅

이 문서는 2세대 인스턴스인 MySQL용 Cloud SQL 버전 5.7로의 Oracle® 11g/12c 데이터베이스 마이그레이션 계획 및 수행과 관련된 주요 정보 및 안내를 제공하는 시리즈의 일부입니다. 이 시리즈는 다음 문서로 구성되어 있습니다.

보안

이 섹션에서는 Oracle과 MySQL용 Cloud SQL의 데이터 암호화 차이점과 MySQL용 Cloud SQL 액세스 제어 감사에 대해 설명합니다.

Oracle 데이터 암호화

기본 사용자 인증 및 사용자 권한 관리 외에도, Oracle은 운영체제 수준에서 저장 데이터에 보안에 대한 암호화 레이어를 추가하는 TDE(투명 데이터 암호화) 메커니즘을 제공합니다. 구성이 완료되면 시스템에서 자동으로 Oracle TDE를 구현하므로 사용자의 수동 상호작용이 필요하지 않습니다. Oracle TDE를 구현하려면 테이블스페이스, 테이블, 열 등 일종의 암호화를 허용할 수 있는 필수적이고 지원되는 데이터베이스 객체에 명시적(명령어 사용)으로 구성하는 것이 좋습니다. 전송 중 데이터의 보안을 처리하려면 네트워크 보안 솔루션을 구현하는 것이 좋습니다.

MySQL용 Cloud SQL 데이터 암호화

Google Cloud는 여러 암호화 레이어를 제공하여 Cloud SQL을 비롯한 Google Cloud 제품의 고객 저장 데이터를 보호합니다. Cloud SQL은 AES-128 또는 AES-256 암호화를 사용하여 암호화됩니다. 자세한 내용은 저장 데이터 암호화에 대한 다음 주제를 참조하세요. 구성 작업을 통해 구현해야 하는 Oracle 암호화와 달리, Google Cloud는 다른 필요한 작업 없이 고객 저장 데이터를 암호화합니다. 스키마 변환 관점에서 작업이 필요하지 않으며 암호화가 사용자에게 투명하게 유지됩니다.

Google Cloud가 전송 중 데이터를 처리하는 방법에 대해 자세히 알아보려면 전송 중 데이터의 암호화 관리 방법을 참조하세요.

감사

Oracle은 표준 및 세분화된 감사와 같은 여러 감사 방법을 제공합니다. 반면 MySQL은 기본적으로 동일한 감사 솔루션을 제공하지 않습니다. 이러한 제한을 해결하기 위해 Google Cloud 대시보드 및 모니터링을 사용할 수 있지만, 데이터베이스 DML/DDL 작업을 캡처하기 위해 느린 쿼리, 일반, 오류 로그를 보다 강력한 감사 솔루션으로 사용할 수 있습니다.

이 솔루션을 구현하려면 FLAGS 인스턴스를 사용하여 느린 쿼리 로그와 일반 로그를 사용 설정하는 것이 좋습니다. 또한 비즈니스 요구에 따라 이러한 로그의 보관을 관리해야 합니다.

Google Cloud 감사 로그를 사용하여 감사 정보를 수집할 수 있습니다. 이러한 로그는 다음 세 가지 주요 수준을 다룹니다.

  • 관리 활동 감사 로그(기본적으로 사용 설정됨)
  • 데이터 액세스 감사 로그(기본적으로 사용 중지됨)
    • 데이터 액세스 로그 구성하는 방법을 읽어보세요.
    • 데이터 액세스 감사 로그는 Google Cloud에 로그인하지 않고 액세스할 수 있는 리소스에 데이터 액세스 작업을 기록하지 않습니다.
  • 시스템 이벤트 감사 로그(기본적으로 사용 설정됨)

Google Cloud 감사 로그 보기

감사 로그를 볼 수 있는 액세스 경로는 다음과 같습니다. Google Cloud 콘솔 > 홈 > 활동

감사 수준 간의 정보 세부사항을 필터링할 수 있습니다. 다음 스크린샷은 관리 활동 감사를 보여줍니다.

감사 수준 간의 세부사항 필터링

Cloud Logging 페이지

로깅 페이지의 액세스 경로는 다음과 같습니다. Google Cloud 콘솔 > Cloud Logging

로그 유형 간의 정보 세부사항을 필터링할 수 있습니다. 다음 스크린샷은 일반 로그 감사(사용자, 호스트, SQL 문의 감사 데이터)를 보여줍니다.

일반 감사 로그

MySQL용 Cloud SQL 액세스 제어

사용자는 승인된 고정 IP 주소로 MySQL 클라이언트를 사용하거나 다른 데이터베이스 연결과 유사한 방식으로 Cloud SQL 프록시를 사용하여 MySQL용 Cloud SQL 인스턴스에 연결할 수 있습니다. App Engine 또는 Compute Engine과 같은 다른 연결 소스의 경우 사용자는 Cloud SQL 프록시 사용과 같은 몇 가지 옵션을 사용할 수 있습니다. 이러한 옵션은 인스턴스 액세스 제어에 자세히 설명되어 있습니다.

작업

이 섹션에서는 내보내기 및 가져오기, 인스턴스 수준 백업 및 복원, MySQL 이벤트 스케줄러(데이터베이스 작업용), 읽기 전용 작업 및 재해 복구의 대기 인스턴스에 대해 설명합니다.

내보내기 및 가져오기

Oracle이 논리적 내보내기 및 가져오기 작업을 수행하는 기본 방식은 Data Pump 유틸리티로, EXPDP/IMPDP 명령어(expimp 명령어가 포함된 Oracle 내보내기/가져오기 기능의 이전 버전)를 사용합니다. MySQL 동일 명령어는 mysqldumpmysqlimport 유틸리티이며, 이 유틸리티는 덤프 파일을 생성한 다음 데이터베이스 또는 객체 수준(메타데이터 내보내기 및 가져오기만 포함)에서 가져오기를 수행합니다.

Oracle DBMS_DATAPUMP 유틸리티(EXPDP/IMPDP 기능을 DBMS_DATAPUMP 패키지와 직접 상호작용하는 Oracle 방식)에 대한 직접적인 MySQL 동일 솔루션은 없습니다. Oracle DBMS_DATAPUMP PL/SQL 코드에서 변환하려면 대체 코드(예: Bash 또는 Python)를 사용하여 논리 요소를 구현하고 MySQL mysqldumpmysqlimport를 사용하여 내보내기/가져오기 작업을 실행합니다.

MySQL mysqldumpmysqlimport 유틸리티는 MySQL 클라이언트 프로그램의 일부로 클라이언트 수준에서 실행되며 MySQL용 Cloud SQL 인스턴스에 원격으로 연결됩니다. 덤프 파일은 클라이언트 측에서 생성됩니다.

mysqldump:

클라이언트 유틸리티는 sql로 논리적 백업 및 데이터 가져오기를 수행합니다. 그러면 원래 데이터베이스 객체 정의 및 테이블 데이터의 재현하기 위해 실행 가능한 SQL 문 집합이 생성됩니다. mysqldump 유틸리티는 CSV 형식, 줄바꿈으로 구분된 텍스트 또는 XML 형식으로 출력을 생성할 수도 있습니다. 이 출력 형식의 주요 장점은 텍스트 파일이므로 복원하기 전에 내보내기 출력을 보거나 수정할 수 있다는 것입니다. 주요 단점은 상당한 양의 데이터를 백업하기 위한 빠르고 확장 가능한 솔루션이 아니라는 점입니다.

mysqldump 사용:

-- Single database backup & specific tables backup
# mysqldump database_name > outpitfile.sql
# mysqldump database_name tbl1 tbl2 > outpitfile.sql

-- Back up all databases
# mysqldump --all-databases > all_databases.sql

-- Ignore a given table
# mysqldump --databases db1 --ignore-table db1.tbl > outpitfile.sql

-- Back up metadata only - Schema only
# mysqldump --no-data db1 > bck.sql

-- Include stored procedures and functions (routines)
# mysqldump db1 --routines > db1.sql

-- Back up only rows by a given WHERE condition
# mysqldump db1 tbl1 --where="col1=1" > bck.sql

-- Include triggers for each dumped table (default)
# mysqldump db1 tbl1 —triggers > bck.sql

mysqlimport:

LOAD DATA INFILE SQL 문에 명령줄 인터페이스를 제공하는 클라이언트 프로그램입니다. mysqlimport는 텍스트 또는 CSV 파일의 데이터를 해당 구조의 MySQL 테이블로 가져오는 데 자주 사용됩니다. Oracle SQL*Loader는 둘 다 외부 파일에서 데이터를 로드하는 것과 동일한 기능을 공유하므로 mysqlimport로 전환될 수 있습니다.

mysqlimport 사용:

-- Example of loading data from a CSV file into a table:
-- Create a table named csv_file
mysql> create table file(col1 int, col2 varchar(10));

-- Create a CSV file (delimited by tab)
# echo 1    A > file.csv
# echo 2    B >> file.csv
# echo 3    C >> file.csv

-- Import the CSV file into the csv_file table
-- Note that the file and table name must be named identically
# mysqlimport -u USER -p -h HOSTNAME/IP DB_NAME --local file.csv
csv_file: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

-- Verify
# mysql -u USER -p -h HOSTNAME/IP DB_NAME -e "SELECT * FROM file"
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+

-- Example of using LOAD DATA INFILE to load a CSV file (using the same
   table from the previous example, with the CSV delimiter defined by
   comma)
mysql> LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE file
       FIELDS TERMINATED BY ','
       LINES TERMINATED BY '\n' (col1, col2);

mysql> SELECT * FROM file;
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+

MySQL용 Cloud SQL 내보내기/가져오기:

다음 문서 링크에서는 내보내기가져오기 작업을 적용할 수 있도록 gcloud CLI를 사용하여 Cloud SQL 인스턴스 및 Cloud Storage와 상호작용하는 방법을 보여줍니다.

인스턴스 수준 백업 및 복원

Oracle RMAN 또는 Data Pump에서 MySQL용 Cloud SQL로 마이그레이션하고 추가 백업 및 복원 옵션(예: VM 스냅샷, 콜드 백업 또는 타사 도구)을 MySQL용 Cloud SQL에 포함하는 간단한 작업입니다. 코드 또는 추가 지식이 필요하지 않으며, Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 이 프로세스를 관리할 수 있습니다. (위 예시는 2세대 Cloud SQL 인스턴스로 컴파일되었습니다.)

MySQL 데이터베이스 백업 방법 유형은 주문형 백업자동화된 백업입니다.

MySQL용 Cloud SQL 데이터베이스 인스턴스 복원을 사용하여 같은 인스턴스로 복원하거나 기존 데이터를 덮어쓰거나 다른 인스턴스로 복원할 수 있습니다. 또한 MySQL용 Cloud SQL을 사용하면 자동화된 백업 옵션을 사용 설정한 상태에서 바이너리 로깅을 사용하여 MySQL 데이터베이스를 특정 시점으로 복원할 수 있습니다.

MySQL용 Cloud SQL은 소스 데이터베이스의 독립 버전을 클론하는 기능을 제공합니다. 이 기능은 기본(마스터) 데이터베이스 또는 다른 클론에만 적용되며 읽기 복제본 인스턴스에서 가져올 수 없습니다. 또한 이 기능을 사용하면 특정 시점에서 MySQL 인스턴스를 복원할 수 있어 필요한 경우 데이터를 복구할 수 있습니다. Google Cloud 콘솔 또는 gcloud CLI를 사용하여 MySQL용 Cloud SQL 데이터베이스 복원을 적용할 수 있습니다.

MySQL 이벤트 스케줄러(데이터베이스 작업)

사전 정의된 데이터베이스 절차를 시작하기 위해 MySQL 이벤트 스케줄러 기능은 Oracle DBMS_JOBS 또는 Oracle DBMS_SCHEDULER와 동일합니다. 기본적으로 event_scheduler 데이터베이스 매개변수는 OFF로 설정되며, 필요한 경우 Cloud SQL 플래그를 사용하여 ON으로 전환되어야 합니다.

MySQL 이벤트 스케줄러를 사용하여 명시적 DML/DDL 명령어를 실행하거나 특정 시간 및 특정 로직으로 저장된 절차 또는 함수를 예약할 수 있습니다.

Oracle DBMS_JOBS 또는 DBMS_SCHEDULER의 변환 고려사항:

모든 Oracle 작업은 상업적으로 제공되는 PL/SQL 변환 도구를 사용하거나 수동으로 MySQL 구문 및 기능으로 변환되어야 합니다.

다음 문을 사용하여 클라이언트 실행의 현재 event_scheduler 매개변수 값을 확인합니다.

mysql> SHOW VARIABLES LIKE '%event_s%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

이벤트 스케줄러 예시:

  • Oracle DBMS_SCHEDULER

    SQL> BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
       job_name             => 'job_sessions_1d_del',
       job_type             => 'PLSQL_BLOCK',
       job_action           => 'BEGIN DELETE FROM sessions WHERE
                                      session_date < SYSDATE - 1;
                                END;',
       start_date           => SYSTIMESTAMP,
       repeat_interval      => 'FREQ=DAILY',
       end_date             => NULL,
       enabled              =>  TRUE,
       comments             => 'Deletes last day data from the sessions table');
    END;
    /
    
  • MySQL 이벤트 변환:

    mysql> CREATE EVENT job_sessions_1d_del
           ON SCHEDULE EVERY 1 DAY
           COMMENT 'Deletes last day data from the sessions table'
           DO
           DELETE FROM sessions
              WHERE session_date < DATE_SUB(SYSDATE(), INTERVAL 1 DAY);
    
  • MySQL 이벤트 스케줄러 메타데이터:

    mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS \G;
    
    -- OR
    
    mysql> SHOW EVENTS FROM HR;
    

읽기 전용 작업 및 재해 복구 구현에 대한 대기 인스턴스

Oracle Active Data Guard를 사용하면 새 데이터가 재실행 및 보관 로그를 통해 계속 적용되는 동안 대기 인스턴스를 읽기 전용 엔드포인트로 제공할 수 있습니다. 또한 변경 데이터 캡처(CDC) 솔루션으로 제공되는 Oracle GoldenGate를 사용하여 데이터 수정사항이 실시간으로 적용되는 동안 추가 인스턴스를 읽기용으로 사용 설정할 수 있습니다.

MySQL용 Cloud SQL은 읽기 복제본을 사용하여 기본 인스턴스에서 읽기 또는 분석 워크로드를 거의 실시간으로 복제된 대체 소스에 전달하여 읽기/쓰기 분리를 지원합니다. Google Cloud 콘솔 또는 gcloud CLI를 사용하여 MySQL용 Cloud SQL 읽기 복제본의 설정을 적용할 수 있습니다.

MySQL용 Cloud SQL은 외부 MySQL 인스턴스에 복제외부 MySQL 인스턴스에서 복제와 같은 추가 복제 옵션을 지원합니다.

기본 인스턴스와 이미 동기화된 대기 인스턴스를 추가하여 Oracle Active Data Guard 및 Oracle GoldenGate를 재해 복구(DR) 솔루션으로 구현할 수 있습니다.

MySQL용 Cloud SQL 읽기 복제본은 DR 시나리오의 대기 인스턴스로 제공하기 위함이 아닙니다. 이를 위해서 Cloud SQL은 Google Cloud 콘솔 또는 gcloud CLI를 사용하여 고가용성의 MySQL 인스턴스를 구성하는 기능을 제공합니다.

일부 작업을 하려면 인스턴스를 재부팅해야 할 수 있습니다(예: 기존 기본 인스턴스에 HA 추가). 고가용성(HA) SLA 관점에서 보면 기본 인스턴스가 약 60초 동안 응답하지 않으면 재연결 시 HA 대기 인스턴스를 사용할 수 있습니다. MySQL용 Cloud SQL에 HA를 사용 설정하려면 다음 안내를 참조하세요.

로깅 및 모니터링

Oracle의 알림 로그 파일은 Oracle 데이터베이스 인스턴스 수명 주기(주로 문제 해결 실패 이벤트 및 오류 이벤트)를 이해하기 위해 일반적인 시스템 이벤트 및 오류 이벤트의 식별에 사용되는 기본 소스입니다.

Oracle 알림 로그에는 다음에 대한 정보가 표시됩니다.

  • Oracle 데이터베이스 인스턴스 오류 및 경고(ORA- + 오류 번호)
  • Oracle 데이터베이스 인스턴스 시작 및 종료 이벤트
  • 네트워크 및 연결 관련 문제
  • 이벤트를 전환하는 데이터베이스 재실행 로그
  • 특정 데이터베이스 이벤트에 대한 추가 세부정보의 링크에 언급될 수도 있는 Oracle 추적 파일

또한 Oracle은 MySQL용 Cloud SQL에 동일한 구성요소가 없는 LISTENER, ASM, Enterprise Manager(OEM)와 같은 다양한 서비스의 전용 로그 파일을 제공합니다.

다음은 MySQL용 Cloud SQL 로그 유형입니다.

MySQL 로그 유형 설명 참고
활동 로그 MySQL용 Cloud SQL 인스턴스의 구성 또는 메타데이터를 수정하는 API 호출 또는 기타 관리 작업에 대한 데이터가 포함됩니다. 이 로그는 Cloud 감사 로그 그룹의 세 가지 로그 중 하나입니다.
데이터 액세스 로그 리소스의 구성 또는 메타데이터를 읽는 API 호출뿐만 아니라 사용자가 제공한 리소스 데이터를 생성, 수정 또는 읽는 사용자 주도 API 호출도 포함됩니다. 이 로그는 Cloud 감사 로그 그룹의 세 가지 로그 중 하나입니다. 이 로그는 Google Cloud에 로그인하지 않고 액세스할 수 있는 이벤트에 대한 MySQL 인스턴스의 데이터 액세스 작업만 기록합니다.
mysql.err
이 파일은 MySQL 기본 로그 파일이며 Oracle의 알림 로그와 비교할 수 있습니다. 두 로그 모두 시작 및 종료 이벤트, 오류 및 경고 이벤트와 같은 데이터베이스 인스턴스 이벤트 로깅을 보관합니다. MySQL 5.7 오류 메시지 가이드
mysql-slow.log
MySQL 느린 쿼리 로그는 실행 시간이 2초보다 긴 각 쿼리와 같이 사전 정의된 구성을 초과하는 쿼리의 데이터를 수집합니다(기본값은 10초). 기본적으로 사용 중지됩니다. 이 로그를 사용 설정하려면 다음 변수(데이터베이스 매개변수)를 설정합니다.

  • slow_query_log
  • long_query_time
mysql-general.log
로그는 클라이언트 연결 및 연결 해제에 대한 데이터와 MySQL 데이터베이스 인스턴스에 대해 실행되는 모든 SQL 문에 대한 데이터를 수집합니다. 이 로그는 문제 해결에 유용하며 일반적으로 작업이 완료되면 OFF로 설정됩니다. 기본적으로 사용 중지되며 사용 설정하려면 general_log 변수가 ON으로 설정되어야 합니다.
바이너리 로그 MySQL 서버는 바이너리 로깅을 사용하여 데이터를 수정한 모든 문을 로깅합니다. 이 로그의 기본 용도는 백업 및 복제입니다. 복구 및 읽기 복제본 배포의 사용을 위해 MySQL용 Cloud SQL에서 바이너리 로깅 매개변수가 기본적으로 사용 설정됩니다. 바이너리 로깅을 사용 설정하려면 log_bin 구성 매개변수를 ON으로 설정합니다.
릴레이 로그 종속 인스턴스(읽기 복제본)에서 모든 데이터 수정을 구현하기 위해 기본 바이너리 로그에서 수신된 문을 저장합니다. 보조(슬레이브) 인스턴스 및 읽기 복제본에만 적용됩니다.

MySQL용 Cloud SQL 작업 로그 보기

Cloud Logging은 모든 로그 세부정보를 볼 수 있는 기본 플랫폼입니다. 다른 로그를 선택하고 로그 이벤트 수준(예: 중요, 오류 또는 경고)별로 필터링할 수 있습니다. 이벤트 기간 및 무료 텍스트 필터링도 사용할 수 있습니다.

Cloud Logging에서 로그 보기

예시

다음 스크린샷은 커스텀 기간을 필터 기준으로 사용하여 mysql-slow.log 파일에서 특정 쿼리를 찾는 방법을 보여줍니다.

mysql-slow.log에서 쿼리 찾기

MySQL 데이터베이스 인스턴스 모니터링

Oracle의 기본 UI 모니터링 대시보드는 OEM 및 Grid/Cloud 제어 제품(예: 인기 활동 그래프)의 일부이며 세션 또는 SQL 문 수준에서의 실시간 데이터베이스 인스턴스 모니터링에 유용합니다. MySQL용 Cloud SQL은 Google Cloud 콘솔을 사용하여 유사한 모니터링 기능을 제공합니다. CPU 사용률, 스토리지 사용량, 메모리 사용량, 읽기/쓰기 작업, 인그레스/이그레스 바이트, 활성 연결 등과 같은 여러 모니터링 측정항목을 포함하는 MySQL용 Cloud SQL 데이터베이스 인스턴스에 대한 요약 정보를 볼 수 있습니다.

Cloud Logging은 MySQL용 Cloud SQL에 대한 추가 모니터링 측정항목을 지원합니다. 다음 스크린샷은 지난 12시간 동안의 MySQL 쿼리 그래프를 보여줍니다.

지난 12시간 동안의 MySQL 쿼리 그래프

MySQL 읽기 복제본 모니터링

앞에서 설명한 것처럼 Google Cloud 콘솔 모니터링 측정항목을 사용해서 기본 인스턴스와 비슷한 방식으로 읽기 복제본을 모니터링할 수 있습니다. 또한 기본 인스턴스와 읽기 복제본 인스턴스 사이의 지연 시간(초 단위)을 확인하는 방식으로 복제 지연을 모니터링하기 위한 전용 모니터링 측정항목이 있습니다. 이러한 지연 시간은 Google Cloud 콘솔의 읽기 복제본 인스턴스 개요 탭에서 모니터링할 수 있습니다.

gcloud CLI를 사용하여 복제 상태를 가져올 수 있습니다.

gcloud sql instances describe REPLICA_NAME

또한 MySQL 클라이언트의 명령어를 사용하여 복제 모니터링을 수행할 수 있습니다. 이를 통해 기본 및 종속 데이터베이스 상태와 바이너리 로그 및 릴레이 로그 상태를 확인할 수 있습니다.

다음 SQL 문을 사용하여 읽기 복제본 상태를 확인할 수 있습니다.

mysql> SHOW SLAVE STATUS;

MySQL 모니터링

이 섹션에서는 DBA(Oracle 또는 MySQL)에서 수행하는 루틴 태스크로 간주되는 기본 MySQL 모니터링 방법을 설명합니다.

세션 모니터링

Oracle 세션 모니터링은 'V$' 뷰라고 하는 동적 성능 뷰를 쿼리하여 수행됩니다. V$SESSIONV$PROCESS 뷰는 일반적으로 SQL 문을 사용하여 현재 데이터베이스 활동에 대한 실시간 통계를 얻는 데 사용됩니다. 명령어와 SQL 문을 사용하여 MySQL에서 세션 활동을 모니터링할 수 있습니다. 예를 들어 MySQL SHOW PROCESSLIST 명령어는 세션 활동에 대한 다음 세부정보를 제공합니다.

mysql> SHOW PROCESSLIST;

SELECT 문을 사용하여 SHOW PROCESSLIST 결과를 쿼리 및 필터링할 수도 있습니다.

mysql>  SELECT * FROM information_schema.processlist;

긴 트랜잭션 모니터링

성능 문제를 일으킬 수 있는 긴 실행 트랜잭션을 실시간으로 식별하려면 information_schema.innodb_trx 동적 뷰를 쿼리하면 됩니다. 이 뷰는 MySQL 데이터베이스 인스턴스에서 실행 중인 열린 트랜잭션의 레코드만 표시합니다.

잠금 모니터링

성능 문제를 일으킬 수 있는 잠금 발생에 대한 실시간 정보를 제공하는 information_schema.innodb_locks 동적 뷰를 사용하여 데이터베이스 잠금을 모니터링할 수 있습니다.