빠른 시작: Node.js 앱과 함께 Azure Cache for Redis 사용

이 빠른 시작에서는 Azure Cache for Redis를 Node.js 앱에 통합하여 Azure의 모든 애플리케이션에서 액세스할 수 있는 안전한 전용 캐시에 액세스합니다.

필수 구성 요소

캐시 만들기

  1. 캐시를 만들려면 Azure Portal에 로그인합니다. Portal 메뉴에서 리소스 만들기를 선택합니다.

    Azure Portal의 왼쪽 탐색 창에 강조 표시된 리소스 만들기 옵션을 보여 주는 스크린샷입니다.

  2. 시작 창의 검색 창에서 Aure Cache for Redis를 입력합니다. 검색 결과에서 Azure Cache for Redis를 찾은 다음, 만들기를 선택합니다.

    검색 상자에 Azure Cache for Redis가 있는 Azure Marketplace를 보여 주고 만들기 단추가 강조 표시되어 있는 스크린샷입니다.

  3. 새 Redis Cache 창의 기본 탭에서 캐시에 대해 다음 설정을 구성합니다.

    설정 작업 설명
    구독 Azure 구독을 선택합니다. Azure Cache for Redis의 새 인스턴스를 만드는 데 사용할 구독입니다.
    리소스 그룹 리소스 그룹을 선택하거나 새로 만들기를 선택하고 새 리소스 그룹 이름을 입력합니다. 캐시 및 기타 리소스를 만들 리소스 그룹의 이름입니다. 모든 앱 리소스를 하나의 리소스 그룹에 배치하면 앱 리소스를 쉽게 관리하거나 삭제할 수 있습니다.
    DNS 이름 고유한 이름을 입력합니다. 캐시 이름은 숫자, 문자 및 하이픈만 포함하는 1~63자의 문자열이어야 합니다. 이름은 숫자 또는 문자로 시작하고 끝나야 하며 연속 하이픈을 포함할 수 없습니다. 캐시 인스턴스의 호스트 이름\<DNS name>.redis.cache.windows.net입니다.
    위치 위치를 선택합니다. 캐시를 사용하는 다른 서비스 근처에 있는 Azure 지역입니다.
    캐시 SKU SKU를 선택합니다. SKU는 캐시에 사용할 수 있는 크기, 성능 및 기능 매개 변수를 결정합니다. 자세한 내용은 Azure Cache for Redis 개요를 참조하세요.
    캐시 크기 캐시 크기를 선택합니다. 자세한 내용은 Azure Cache for Redis 개요를 참조하세요.
  4. 네트워킹 탭을 선택하거나 다음: 네트워킹을 선택합니다.

  5. 네트워킹 탭에서 캐시에 사용할 연결 방법을 선택합니다.

  6. 고급 탭을 선택하거나 다음: 고급을 선택합니다.

  7. 고급 창에서 다음 정보에 따라 인증 방법을 확인하거나 선택합니다.

    고급 창과 선택할 수 있는 옵션을 보여 주는 스크린샷입니다.

    • 기본적으로 새 기본, 표준 또는 프리미엄 캐시의 경우 Microsoft Entra 인증이 활성화되고 액세스 키 인증이 비활성화됩니다.
    • 기본 또는 표준 캐시의 경우 비 TLS 포트 선택 영역을 선택/해제할 수 있습니다.
    • 표준 및 프리미엄 캐시의 경우 가용성 영역을 사용하도록 선택할 수 있습니다. 캐시를 만든 후에는 가용성 영역을 비활성화할 수 없습니다.
    • 프리미엄 캐시의 경우 비 TLS 포트, 클러스터링, 관리 ID 및 데이터 지속성에 대한 설정을 구성합니다.

    Important

    최적의 보안을 위해 관리 ID와 함께 Microsoft Entra ID를 사용하여 가능한 경우 캐시에 대한 요청에 권한을 부여하는 것이 좋습니다. Microsoft Entra ID 및 관리 ID를 사용한 인증은 공유 액세스 키 인증에 비해 뛰어난 보안과 사용 편의성을 제공합니다. 캐시에서 관리 ID를 사용하는 방법에 대한 자세한 내용은 캐시 인증을 위한 Microsoft Entra ID 사용을 참조하세요.

  8. (선택 사항) 태그 탭을 선택하거나 다음: 태그를 선택합니다.

  9. (선택 사항) 태그 탭에서 캐시 리소스를 분류하려는 경우 태그 이름과 값을 입력합니다.

  10. 검토 + 만들기 단추를 선택합니다.

    검토 + 만들기 탭에서 Azure는 자동으로 구성의 유효성을 검사합니다.

  11. 녹색 유효성 검사 통과 메시지가 표시되면 만들기를 선택합니다.

새 캐시 배포는 몇 분 동안 발생합니다. Azure Cache for Redis 개요 창에서 배포 진행률을 모니터링할 수 있습니다. 상태실행 표시되면 캐시를 사용할 준비가 됩니다.

node-redis 클라이언트 라이브러리 설치

node-redis 라이브러리는 Redis의 기본 Node.js 클라이언트입니다. npm 및 다음 명령을 사용하여 클라이언트를 설치할 수 있습니다.

npm install redis

캐시에 액세스하기 위한 Node.js 앱 만들기

Microsoft Entra ID 또는 액세스 키를 사용하여 Azure Cache for Redis에 연결하는 Node.js 앱을 만듭니다. Microsoft Entra ID를 사용하는 것이 좋습니다.

캐시에서 Microsoft Entra ID 인증 사용

기존 캐시의 경우 먼저 Microsoft Entra 인증이 사용하도록 설정되어 있는지 확인합니다. 그렇지 않은 경우 다음 단계를 완료하여 Microsoft Entra 인증을 사용하도록 설정합니다. 애플리케이션에서 인증에 Microsoft Entra ID를 사용하는 것이 좋습니다.

  1. Azure Portal에서 Microsoft Entra 토큰 기반 인증을 사용하려는 Azure Cache for Redis 인스턴스를 선택합니다.

  2. 서비스 메뉴의 설정 아래에서 인증을 선택합니다.

  3. 인증 창에서 Microsoft Entra 인증 사용 확인란이 선택되어 있는지 확인합니다. 선택된 경우 다음 섹션으로 이동할 수 있습니다.

  4. 그렇지 않은 경우 Microsoft Entra 인증 사용 확인란을 선택합니다. 그런 다음 유효한 사용자의 이름을 입력합니다. 저장을 선택합니다. 입력한 사용자 이름에 데이터 소유자 액세스 정책이 자동으로 할당됩니다.

    관리 ID 또는 서비스 주체를 입력하여 캐시에 연결할 수도 있습니다.

    서비스 메뉴에서 선택한 인증과 선택한 Microsoft Entra 인증 사용 확인란을 보여 주는 스크린샷입니다.

  5. 대화 상자에 구성을 업데이트할지 묻는 메시지가 표시되고 업데이트를 완료하는 데 몇 분 정도 걸린다는 메시지가 표시됩니다. 를 선택합니다.

    Important

    사용 작업이 완료되면 캐시의 노드가 다시 부팅되어 새 구성을 로드합니다. 표준 유지 관리 기간 동안 또는 사용량이 많은 업무 시간 외에 이 작업을 완료하는 것이 좋습니다. 이 프로세스는 최대 30분 정도 걸릴 수 있습니다.

Azure CLI와 함께 Microsoft Entra ID를 사용하는 방법에 대한 자세한 내용은 ID 참조 페이지를 참조하세요.

JavaScript용 Azure ID 클라이언트 라이브러리를 설치합니다.

JavaScript용 Azure ID 클라이언트 라이브러리는 필수 MSAL(Microsoft 인증 라이브러리)을 사용하여 토큰 인증 지원을 제공합니다. npm을 사용하여 라이브러리를 설치합니다.

npm install @azure/identity

Microsoft Entra ID를 사용하여 Node.js 앱 만들기

  1. 호스트 이름과 서비스 주체 ID에 대한 환경 변수를 추가합니다.

    서비스 주체 ID는 Microsoft Entra ID 서비스 주체 또는 사용자의 개체 ID입니다. Azure Portal에서 이 값은 사용자 이름으로 나타납니다.

    set AZURE_CACHE_FOR_REDIS_HOST_NAME=contosoCache
    set REDIS_SERVICE_PRINCIPAL_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
  2. redistest.js라는 스크립트 파일을 만듭니다.

  3. 다음 예제 JavaScript를 파일에 추가합니다. 이 코드는 캐시 호스트 이름과 키 환경 변수를 사용하여 Azure Cache for Redis 인스턴스에 연결하는 방법을 보여 줍니다. 코드는 또한 캐시에 문자열 값을 저장하고 검색합니다. 또한 PINGCLIENT LIST 명령을 실행했습니다. node-redis 클라이언트가 포함된 Redis 사용에 관한 더 많은 예는 Node-Redis를 참조하세요.

    const { createClient } = require("redis");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    async function main() {
      // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc.
      const credential = new DefaultAzureCredential();
      const redisScope = "https://redis.azure.com/.default";
    
      // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password.
      let accessToken = await credential.getToken(redisScope);
      console.log("access Token", accessToken);
    
      // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password.
      const cacheConnection = createClient({
        username: process.env.REDIS_SERVICE_PRINCIPAL_ID,
        password: accessToken.token,
        url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`,
        pingInterval: 100000,
        socket: { 
          tls: true,
          keepAlive: 0 
        },
      });
    
      cacheConnection.on("error", (err) => console.log("Redis Client Error", err));
      await cacheConnection.connect();
    
      // PING command
      console.log("\nCache command: PING");
      console.log("Cache response : " + await cacheConnection.ping());
    
      // SET
      console.log("\nCache command: SET Message");
      console.log("Cache response : " + await cacheConnection.set("Message",
          "Hello! The cache is working from Node.js!"));
    
      // GET
      console.log("\nCache command: GET Message");
      console.log("Cache response : " + await cacheConnection.get("Message"));
    
      // Client list, useful to see if connection list is growing...
      console.log("\nCache command: CLIENT LIST");
      console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"]));
    
      cacheConnection.disconnect();
    
      return "Done"
    }
    
    main().then((result) => console.log(result)).catch(ex => console.log(ex));
    
  4. Node.js를 사용하여 스크립트를 실행합니다.

    node redistest.js
    
  5. 코드의 출력이 다음 예제와 같은지 확인합니다.

    Cache command: PING
    Cache response : PONG
    
    Cache command: GET Message
    Cache response : Hello! The cache is working from Node.js!
    
    Cache command: SET Message
    Cache response : OK
    
    Cache command: GET Message
    Cache response : Hello! The cache is working from Node.js!
    
    Cache command: CLIENT LIST
    Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6
    
    Done
    

재인증이 있는 샘플 JavaScript 앱 만들기

Microsoft Entra ID 액세스 토큰의 수명은 약 75분으로 제한됩니다. 캐시에 대한 연결을 유지하려면 토큰을 새로 고쳐야 합니다.

이 예제에서는 JavaScript를 사용하여 토큰을 새로 고치는 방법을 보여 줍니다.

  1. redistestreauth.js라는 스크립트 파일을 만듭니다.

  2. 다음 예제 JavaScript를 파일에 추가합니다.

     const { createClient } = require("redis");
     const { DefaultAzureCredential } = require("@azure/identity");
    
     async function returnPassword(credential) {
         const redisScope = "https://redis.azure.com/.default";
    
         // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password.
         return credential.getToken(redisScope);
     }
    
     async function main() {
       // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc.
       const credential = new DefaultAzureCredential();
       let accessToken = await returnPassword(credential);
    
       // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password.
       let cacheConnection = createClient({
         username: process.env.REDIS_SERVICE_PRINCIPAL_ID,
         password: accessToken.token,
         url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`,
         pingInterval: 100000,
         socket: { 
           tls: true,
           keepAlive: 0 
         },
       });
    
       cacheConnection.on("error", (err) => console.log("Redis Client Error", err));
       await cacheConnection.connect();
    
       for (let i = 0; i < 3; i++) {
         try {
             // PING command
             console.log("\nCache command: PING");
             console.log("Cache response : " + await cacheConnection.ping());
    
             // SET
             console.log("\nCache command: SET Message");
             console.log("Cache response : " + await cacheConnection.set("Message",
                 "Hello! The cache is working from Node.js!"));
    
             // GET
             console.log("\nCache command: GET Message");
             console.log("Cache response : " + await cacheConnection.get("Message"));
    
             // Client list, useful to see if connection list is growing...
             console.log("\nCache command: CLIENT LIST");
             console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"]));
           break;
         } catch (e) {
           console.log("error during redis get", e.toString());
           if ((accessToken.expiresOnTimestamp <= Date.now())|| (redis.status === "end" || "close") ) {
             await redis.disconnect();
             accessToken = await returnPassword(credential);
             cacheConnection = createClient({
               username: process.env.REDIS_SERVICE_PRINCIPAL_ID,
               password: accessToken.token,
               url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`,
               pingInterval: 100000,
               socket: {
                 tls: true,
                 keepAlive: 0
               },
             });
           }
         }
       }
     }
    
     main().then((result) => console.log(result)).catch(ex => console.log(ex));
    
  3. Node.js를 사용하여 스크립트를 실행합니다.

    node redistestreauth.js
    
  4. 다음 예제와 유사한 출력을 확인합니다.

     Cache command: PING
     Cache response : PONG
    
     Cache command: GET Message
     Cache response : Hello! The cache is working from Node.js!
    
     Cache command: SET Message
     Cache response : OK
    
     Cache command: GET Message
     Cache response : Hello! The cache is working from Node.js!
    
     Cache command: CLIENT LIST
     Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6
    
    

참고 항목

Microsoft Entra ID를 사용하여 node-redis 라이브러리를 통해 Redis에 인증하는 방법에 대한 자세한 예제는 node-redis GitHub 리포지토리를 참조하세요.

리소스 정리

이 문서에서 만든 리소스를 계속 사용하려면 리소스 그룹을 유지합니다.

그렇지 않은 경우 리소스와 관련된 요금을 방지하려면 리소스 사용을 완료한 경우 만든 Azure 리소스 그룹을 삭제할 수 있습니다.

Warning

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹을 삭제하면 리소스 그룹의 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다. 유지하려는 리소스가 있는 기존 리소스 그룹 내에 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 각 리소스를 개별적으로 삭제할 수 있습니다.

리소스 그룹 삭제

  1. Azure Portal에 로그인한 다음, 리소스 그룹을 선택합니다.

  2. 삭제할 리소스 그룹을 선택합니다.

    리소스 그룹이 많은 경우 필드 필터링에서 이 문서를 완료하기 위해 만든 리소스 그룹의 이름을 입력합니다. 검색 결과 목록에서 리소스 그룹을 선택합니다.

    삭제하기 위해 선택할 리소스 그룹 목록을 보여주는 스크린샷입니다.

  3. 리소스 그룹 삭제를 선택합니다.

  4. 리소스 그룹 삭제 창에서 확인할 리소스 그룹의 이름을 입력한 다음 삭제를 선택합니다.

    삭제를 확인하기 위해 리소스 이름을 입력해야 하는 상자를 보여 주는 스크린샷입니다.

몇 분 내에 리소스 그룹과 모든 해당 리소스가 삭제됩니다.

샘플 코드 가져오기

GitHub에서 Node.js 빠른 시작 샘플을 가져옵니다.