연습 - 데이터베이스에 연결하고 샘플 데이터 추가

완료됨

데이터베이스를 앱에 연결하기 전에 연결할 수 있는지 확인하고, 기본 테이블을 추가하고, 샘플 데이터로 작업을 수행할 수 있습니다.

Microsoft는 Azure SQL 데이터베이스에 대한 인프라, 소프트웨어 업데이트 및 패치를 유지 관리합니다. 기타 모든 SQL Server 설치와 마찬가지로 Azure SQL 데이터베이스를 관리할 수 있습니다. 예를 들어, Visual Studio, SQL Server Management Studio, Azure Data Studio 또는 기타 도구를 사용하여 Azure SQL Database를 관리할 수 있습니다.

데이터베이스에 액세스하고 앱에 연결하는 방법은 사용자가 결정합니다. 데이터베이스 작업 환경을 쌓기 위해 포털에서 직접 데이터베이스에 연결하고, 테이블을 만들고, 몇 가지 기본 CRUD 작업을 실행해 보겠습니다. 여기서 알아볼 수 있는 내용은 다음과 같습니다.

  • Cloud Shell의 정의 및 포털에서 액세스하는 방법
  • Azure CLI에서 연결 문자열을 비롯한 데이터베이스에 대한 정보에 액세스하는 방법
  • sqlcmd를 사용하여 데이터베이스에 연결하는 방법
  • 기본 테이블 및 일부 샘플 데이터를 사용하여 데이터베이스를 초기화하는 방법

Azure Cloud Shell은 무엇인가요?

Azure Cloud Shell은 Azure 리소스를 관리 및 개발하기 위한 브라우저 기반 셸 환경입니다. Cloud Shell을 클라우드에서 실행되는 대화형 콘솔로 생각하세요.

내부적으로, Cloud Shell은 Linux에서 실행됩니다. 그러나 Linux 또는 Windows 환경을 선호하는지에 따라 선택할 수 있는 두 가지 환경이 있습니다. Bash와 PowerShell의 두 가지 환경 중에 선택할 수 있습니다.

Cloud Shell은 어디에서나 액세스할 수 있습니다. 포털 외에도 shell.azure.com, Azure 모바일 앱 또는 Visual Studio Code에서 Cloud Shell에 액세스할 수 있습니다.

Cloud Shell에는 인기 있는 도구 및 텍스트 편집기가 포함되어 있습니다. 다음은 이 연습에서 사용하는 세 가지 도구인 az, jqsqlcmd 유틸리티에 대해 간략히 살펴보겠습니다.

  • az는 Azure CLI라고도 합니다. Azure 리소스로 작업하기 위한 명령줄 인터페이스입니다. 이 인터페이스를 사용하여 연결 문자열을 포함하여 데이터베이스에 대한 정보를 가져옵니다.
  • jq는 명령줄 JSON 파서입니다. az 명령의 출력을 이 도구로 파이프하여 JSON 출력에서 중요한 필드를 추출합니다.
  • sqlcmd를 사용하면 SQL Server에서 명령문을 실행할 수 있습니다. sqlcmd를 사용하여 Azure SQL Database와의 대화형 세션을 만듭니다.

Azure SQL 데이터베이스에 대한 정보 가져오기

데이터베이스에 연결하기 전에 해당 데이터베이스가 존재하고 온라인 상태인지 확인하는 것이 좋습니다.

여기서는 az 유틸리티를 사용하여 데이터베이스를 나열하고, 최대 크기 및 상태를 비롯한 Logistics 데이터베이스 관련 정보를 표시합니다.

  1. 실행할 az 명령에는 리소스 그룹의 이름과 Azure SQL 논리 서버의 이름이 필요합니다. 키 입력을 저장하려면 이 azure configure 명령을 실행하여 기본값으로 지정합니다.

    [server-name]을 만든 Azure SQL 논리 서버의 이름으로 바꾸고 [resource-group]을 서버에 사용한 리소스 그룹으로 바꿉니다.

    az configure --defaults group=[resource-group] sql-server=[server-name]
    

    참고

    Portal의 창에 따라 SQL 서버 이름이 FQDN(예: servername.database.windows.net)으로 표시될 수 있습니다. 그러나 이 명령의 경우 .database.windows.net 접미사 없이 논리적 이름만 필요합니다.

  2. 다음 az sql db list 명령을 실행하여 Azure SQL 논리 서버의 모든 데이터베이스를 나열합니다.

    az sql db list
    

    대량의 JSON 블록이 출력으로 표시됩니다.

  3. 데이터베이스 이름만 표시하려고 하므로 명령을 한 번 더 실행합니다. 하지만 이번에는 출력을 jq로 파이프하여 이름 필드만 표시합니다.

    az sql db list | jq '[.[] | {name: .name}]'
    

    다음 출력이 표시됩니다.

    [
      {
        "name": "Logistics"
      },
      {
        "name": "master"
      }
    ]
    

    Logistics가 데이터베이스입니다. SQL Server와 마찬가지로 master 시스템 데이터베이스에는 로그인 계정 및 시스템 구성 설정과 같은 서버 메타데이터가 포함됩니다.

  4. 다음 az sql db show 명령을 실행하여 Logistics 데이터베이스에 대한 세부 정보를 가져옵니다.

    az sql db show --name Logistics
    

    앞의 경우처럼 JSON의 대형 블록이 출력으로 표시됩니다.

  5. 이 명령을 한 번 더 실행합니다. 이번에는 출력을 jq로 파이프하여 출력을 Logistics 데이터베이스의 이름, 최대 크기 및 상태로만 제한합니다.

    az sql db show --name Logistics | jq '{name: .name, maxSizeBytes: .maxSizeBytes, status: .status}'
    

    데이터베이스가 온라인 상태인지와 데이터베이스가 저장할 수 있는 최대 데이터 양이 표시됩니다.

    {
      "name": "Logistics",
      "maxSizeBytes": 2147483648,
      "status": "Online"
    }
    

데이터베이스 연결

데이터베이스를 어느 정도 이해했으므로 sqlcmd를 사용하여 연결하고, 운송 기사에 대한 정보를 포함하는 테이블을 만들고, 몇 가지 기본 CRUD 작업을 수행해보겠습니다.

CRUD는 만들기, 읽기, 업데이트삭제를 의미합니다. 이러한 용어는 테이블 데이터에서 수행하는 작업을 의미하며, 앱에 필요한 네 가지 기본 작업에 해당합니다. 이제 각 작업을 수행할 수 있는지 확인해보겠습니다.

  1. 다음 az sql db show-connection-string 명령을 실행하여 연결 문자열을 sqlcmd에서 사용할 수 있는 형식으로 Logistics 데이터베이스에 가져옵니다.

    az sql db show-connection-string --client sqlcmd --name Logistics
    

    출력은 다음 예제와 유사합니다. 다음 단계에서 사용하기 위해 이 출력을 복사합니다.

    "sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U <username> -P <password> -N -l 30"
    
  2. 이전 단계의 출력에 있는 sqlcmd 문을 실행하여 대화형 세션을 만듭니다. 따옴표를 제거하고 <username><password>를 사용자가 데이터베이스를 만들 때 지정한 사용자 이름과 암호로 바꿉니다. 예를 들면 다음과 같습니다.

    sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    “&” 및 기타 특수 문자가 처리 명령으로 해석되지 않도록 암호를 작은따옴표로 묶습니다.

    Important

    다음 예제와 유사하게 오류 메시지가 표시될 수 있습니다.

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server:
    Cannot open server 'contoso' requested by the login.
    Client with IP address 'nnn.nnn.nnn.nnn' is not allowed to access the server.
    To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule
    on the master database to create a firewall rule for this IP address or address range.
    It may take up to five minutes for this change to take effect.
    

    이 오류가 발생하는 경우 클라이언트에 대해 또 다른 방화벽 규칙을 추가해야 합니다. 이렇게 하려면 다음 단계를 수행합니다.

    • Azure Portal에 로그인합니다.

    • Azure 홈페이지Azure 서비스에서 모든 리소스를 선택합니다. 모든 리소스 창이 표시됩니다.

    • 데이터베이스를 검색하여 선택합니다. SQL 데이터베이스에 대한 물류 창이 표시됩니다.

    • 상단 메뉴 모음에서 서버 방화벽 설정을 선택합니다. 네트워킹 창이 나타납니다.

    • 방화벽 규칙 섹션에서 방화벽 규칙 추가를 선택합니다. 방화벽 규칙 추가 창이 나타납니다.

    • 고유한 규칙 이름을 지정하고 시작 IP종료 IP 필드 모두에 오류 메시지의 IP 주소를 입력합니다. 확인을 선택합니다.

    • 저장을 선택합니다.

    • sqlcmd 문을 다시 실행하여 대화형 sqlcmd 세션을 시작합니다. 다음 예와 같아야 합니다.

    sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    이제 sqlcmd 세션을 시작했으므로 나머지 명령은 Transact-SQL 또는 T-SQL 언어를 사용합니다.

    이 모듈에서 T-SQL 명령을 실행할 때 두 번째 줄의 GOsqlcmd 프롬프트로 복사되지 않을 수 있습니다. 명령의 첫 번째 줄을 입력한 후 GO 명령을 입력해야 할 수도 있습니다. GO 명령이 없으면 T-SQL 명령이 실행되지 않으므로 반드시 이 명령을 실행해야 합니다.

  3. sqlcmd 세션에서 다음 T-SQL 문을 실행하여 Drivers라는 테이블을 만듭니다.

    CREATE TABLE Drivers (DriverID int, LastName varchar(255), FirstName varchar(255), OriginCity varchar(255));
    GO
    

    이 테이블에는 4개의 열인 고유 ID, 기사의 이름과 성, 기사의 출생 도시가 포함됩니다.

  4. 다음 T-SQL 문을 실행하여 Drivers 테이블이 있는지 확인합니다.

    SELECT name FROM sys.tables;
    GO
    

    다음 출력이 표시됩니다.

    name
    --------------------------------------------------------------------------------------------------------------------------------
    Drivers
    
    (1 rows affected)
    
  5. create 작업을 테스트하려면 다음 T-SQL 문을 실행하여 테이블에 샘플 행을 추가합니다.

    INSERT INTO Drivers (DriverID, LastName, FirstName, OriginCity) VALUES (123, 'Zirne', 'Laura', 'Springfield');
    GO
    

    이 출력은 작업이 성공했음을 나타냅니다.

    (1 rows affected)
    
  6. read 작업을 테스트하려면 다음 T-SQL 문을 실행하여 테이블의 모든 행에 있는 DriverIDOriginCity 열을 나열합니다.

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    이전 단계에서 만든 행의 DriverIDOriginCity가 포함된 하나의 결과가 표시됩니다.

    DriverID    OriginCity
    ----------- --------------------------
            123 Springfield
    
    (1 rows affected)
    
  7. update 작업을 테스트하려면 다음 T-SQL 문을 실행하여 DriverID가 123인 기사의 출생 도시를 “Springfield”에서 “Boston”으로 변경합니다.

    UPDATE Drivers SET OriginCity='Boston' WHERE DriverID=123;
    GO
    
  8. 다음 T-SQL 문을 실행하여 DriverIDOriginCity 열을 다시 나열합니다.

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    이제 다음과 같이 출력됩니다. OriginCity에 Boston에 대한 업데이트가 어떻게 반영되었는지 확인하세요.

    DriverID    OriginCity
    ----------- --------------------------
            123 Boston
    
    (1 rows affected)
    
  9. 마지막으로 다음 T-SQL 문을 실행하여 레코드를 삭제하여 delete 작업을 테스트합니다.

    DELETE FROM Drivers WHERE DriverID=123;
    GO
    
    (1 rows affected)
    
  10. 다음 T-SQL 문을 실행하여 Drivers 테이블이 비었는지 확인합니다.

    SELECT COUNT(*) FROM Drivers;
    GO
    

    테이블에 행이 없는 것을 볼 수 있습니다.

    -----------
              0
    
    (1 rows affected)
    

이제 Cloud Shell에서 Azure SQL Database를 사용하는 일반적인 방법을 알게 되었으므로, 즐겨 사용하는 SQL 관리 도구(SQL Server Management Studio, Visual Studio 또는 기타)에 대한 연결 문자열을 가져올 수 있습니다.

Cloud Shell을 사용하면 Azure 리소스에 쉽게 액세스하고 관련 작업을 수행할 수 있습니다. Cloud Shell은 브라우저 기반이므로 Windows, macOS, Linux에서, 특히 웹 브라우저가 있는 모든 시스템에서 Cloud Shell에 액세스할 수 있습니다.

Azure CLI 명령을 실행하여 Azure SQL Database에 대한 정보를 가져오는 방법에 대한 몇 가지 실습 경험을 했습니다. 추가로 T-SQL 기술도 연습해보았습니다.

다음 단원에서는 이 모듈을 마무리하고 데이터베이스를 분리하는 방법에 관해 설명하겠습니다.