쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

자습서: AWS 통합을 통해 WebSocket API 생성

포커스 모드
자습서: AWS 통합을 통해 WebSocket API 생성 - Amazon API Gateway

본 자습서에서는 WebSocket API를 사용하여 서버리스 브로드캐스트 애플리케이션을 생성합니다. 클라이언트는 업데이트를 폴링하지 않고 메시지를 수신할 수 있습니다.

이 자습서는 연결된 클라이언트에 메시지를 브로드캐스트하는 방법을 보여 주며, Lambda 권한 부여자, 모의 통합, Step Functions에 대한 비프록시 통합의 예를 포함합니다.

이 자습서에서 생성하는 API의 아키텍처 개요입니다.

AWS CloudFormation 템플릿을 사용하여 리소스를 생성한 후에는 API Gateway 콘솔을 사용하여 AWS 리소스와 통합되는 WebSocket API를 생성합니다. Lambda 권한 부여자를 API에 연결하고 Step Functions와 AWS 서비스 통합을 생성하여 상태 머신 실행을 시작합니다. Step Functions 상태 머신은 연결된 모든 클라이언트에 메시지를 보내는 Lambda 함수를 간접 호출합니다.

API를 빌드한 후에는 API에 대한 연결을 테스트하고 메시지가 송신 및 수신되는지 확인합니다. 이 자습서는 완료되는데 약 45분이 걸립니다.

사전 조건

필요한 사전 조건은 다음과 같습니다.

이 자습서를 시작하기 전에 WebSocket 채팅 앱 자습서를 완료하는 것이 좋습니다. WebSocket 채팅 앱 자습서를 완료하려면 자습서: WebSocket API, Lambda 및 DynamoDB를 사용하여 WebSocket 채팅 앱 생성을 참조하세요.

1단계: 리소스 생성

AWS CloudFormation용 앱 생성 템플릿을 다운로드하고 압축을 해제합니다. 이 템플릿을 사용하여 다음을 만들 수 있습니다.

  • API 요청을 처리하고 API에 대한 액세스를 승인하는 Lambda 함수.

  • Lambda 권한 부여자가 반환한 클라이언트 ID 및 주 사용자 ID를 저장하는 DynamoDB 테이블입니다.

  • 연결된 클라이언트로 메시지를 보내는 Step Functions 상태 머신입니다.

AWS CloudFormation 스택을 생성하려면
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. 스택 생성을 선택한 다음 새 리소스 사용(표준)을 선택합니다.

  3. 템플릿 지정에서 템플릿 파일 업로드를 선택합니다.

  4. 다운로드한 템플릿을 선택합니다.

  5. 다음을 선택합니다.

  6. 스택 이름websocket-step-functions-tutorial을 입력하고 다음을 선택합니다.

  7. 스택 옵션 구성에서 다음을 선택합니다.

  8. 기능의 경우 AWS CloudFormation이 계정에 IAM 리소스를 생성할 수 있음을 확인합니다.

  9. 제출을 선택합니다.

AWS CloudFormation은 템플릿에 지정된 리소스를 프로비저닝합니다. 리소스 프로비저닝을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 출력 탭을 선택하면 생성된 리소스와 해당 ARN을 확인할 수 있습니다. AWS CloudFormation 스택 상태가 CREATE_COMPLETE인 경우 다음 단계로 넘어갈 준비가 된 것입니다.

2단계: WebSocket API 생성

클라이언트 연결을 처리하고 1단계에서 생성한 리소스로 요청을 라우팅하는 WebSocket API를 생성합니다.

WebSocket API를 생성하려면
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API 생성을 선택합니다. WebSocket API에서 빌드(Build)를 선택합니다.

  3. API 이름에서 websocket-step-functions-tutorial을 입력합니다.

  4. 경로 선택 표현식(Route selection expression)request.body.action을 입력합니다.

    경로 선택 표현식에 따라 클라이언트가 메시지를 보낼 때 API Gateway에서 호출할 경로가 결정됩니다.

  5. Next(다음)를 선택합니다.

  6. 미리 정의된 경로의 경우 $connect 추가, $disconnect 추가, $default 추가를 선택합니다.

    $connect$disconnect 경로는 클라이언트가 API에 연결하거나 API에서 연결을 끊을 때 API Gateway가 자동으로 호출하는 특수 경로입니다. API Gateway는 요청과 일치하는 다른 경로가 없는 경우 $default 경로를 간접 호출합니다. API를 생성한 후 Step Functions에 연결할 사용자 지정 경로를 생성합니다.

  7. Next(다음)를 선택합니다.

  8. $connect를 위한 통합의 경우 다음을 수행합니다.

    1. 통합 유형‬에서 ‬Lambda를 선택합니다.

    2. Lambda 함수에서, 1단계에서 AWS CloudFormation으로 생성한 해당 $connect Lambda 함수를 선택합니다. Lambda 함수 이름은 websocket-step으로 시작해야 합니다.

  9. $disconnect를 위한 통합의 경우 다음을 수행합니다.

    1. 통합 유형‬에서 ‬Lambda를 선택합니다.

    2. Lambda에서, 1단계에서 AWS CloudFormation으로 생성한 해당 $disconnect Lambda 함수를 선택합니다. Lambda 함수 이름은 websocket-step으로 시작해야 합니다.

  10. $default를 위한 통합의 경우 모의을 선택합니다.

    모의 통합에서는 API Gateway가 통합 백엔드가 없어도 경로 응답을 관리합니다.

  11. Next(다음)를 선택합니다.

  12. API Gateway가 생성하는 스테이지를 검토합니다. 기본적으로 API Gateway는 스테이지 프로덕션이라는 스테이지를 생성하여 API를 해당 스테이지에 자동으로 배포합니다. Next(다음)를 선택합니다.

  13. 생성 및 배포를 선택합니다.

3단계: Lambda 권한 부여자 생성 단계

WebSocket API에 대한 액세스를 제어하려면 Lambda 권한 부여자를 생성합니다. AWS CloudFormation 템플릿은 Lambda 권한 부여 함수를 생성했습니다. Lambda 콘솔에서 Lambda 함수를 볼 수도 있습니다. websocket-step-functions-tutorial-AuthorizerHandler로 시작하는 이름은 사용해야 합니다. 이 Lambda 함수는 Authorization 헤더가 Allow가 아닌 한 WebSocket API에 대한 모든 직접 호출을 거부합니다. 또한 Lambda 함수는 $context.authorizer.principalId 변수를 API로 전달하며, 이 변수는 나중에 DynamoDB 테이블에서 API 호출자를 식별하는 데 사용됩니다.

이 단계에서는 Lambda 권한 부여자를 사용하도록 $connect 경로를 구성합니다.

Lambda 권한 부여자를 생성하려는 경우
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. 기본 탐색 창에서 권한 부여자를 선택합니다.

  3. 권한 부여자 생성을 선택합니다.

  4. 권한 부여자 이름LambdaAuthorizer를 입력합니다.

  5. 권한 부여자 ARN의 경우 AWS CloudFormation 템플릿에서 생성한 권한 부여자의 이름을 입력합니다. websocket-step-functions-tutorial-AuthorizerHandler로 시작하는 이름은 사용할 수 없습니다.

    참고

    프로덕션 API에는 이 예제 권한 부여자를 사용하지 않는 것이 좋습니다.

  6. ID 소스 유형에서는 헤더를 선택합니다. Authorization를 입력합니다.

  7. 권한 부여자 생성을 선택합니다.

권한 부여자를 생성한 후 API의 $connect 경로에 권한 부여자를 연결합니다.

$connect 경로에 권한 부여자를 연결하려면
  1. 기본 탐색 창에서 경로를 선택합니다.

  2. $connect 경로를 선택합니다.

  3. 경로 요청 설정 섹션에서 편집을 선택합니다.

  4. 권한 부여의 경우 드롭다운 메뉴를 선택한 다음 요청 권한 부여자를 선택합니다.

  5. 변경 사항 저장을 선택합니다.

4단계: 모의 양방향 통합 생성

다음으로 $default 경로에 대한 양방향 모의 통합을 생성합니다. 모의 통합을 사용하면 백엔드를 사용하지 않고도 클라이언트에 응답을 보낼 수 있습니다. $default 경로에 대한 통합을 생성하면 클라이언트에게 API와 상호 작용하는 방법을 보여줄 수 있습니다.

$default 경로를 구성하여 클라이언트에게 sendmessage 경로를 사용하도록 알릴 수 있습니다.

모의 통합을 생성하는 방법
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. $default 경로를 선택한 다음 통합 요청 탭을 선택합니다.

  3. 요청 템플릿의 경우 편집을 선택합니다.

  4. 템플릿 선택 표현식200을 입력한 다음 편집을 선택합니다.

  5. 통합 요청 탭의 요청 템플릿에서 템플릿 생성을 선택합니다.

  6. 템플릿 키200를 입력합니다.

  7. 템플릿 생성에 다음 매핑 템플릿을 입력합니다:

    {"statusCode": 200}

    템플릿 생성을 선택합니다.

    결과는 다음과 같아야 합니다.

    $default 경로에 대한 모의 통합을 위한 통합 요청 구성
  8. $default 경로 창에서 양방향 통신 활성화를 선택합니다.

  9. 통합 응답 탭을 선택한 다음 통합 응답 생성을 선택합니다.

  10. 응답 본문$default를 입력합니다.

  11. 템플릿 선택 표현식200을 입력합니다.

  12. 응답 생성을 선택합니다.

  13. 응답 템플릿에서 템플릿 생성을 선택합니다.

  14. 템플릿 키200를 입력합니다.

  15. 응답 템플릿에 다음 매핑 템플릿을 입력합니다.

    {"Use the sendmessage route to send a message. Connection ID: $context.connectionId"}
  16. 템플릿 생성을 선택합니다.

    결과는 다음과 같아야 합니다.

    $default 경로에 대한 모의 통합을 위한 통합 응답 구성

5단계: Step Functions와의 비프록시 통합 생성

다음으로 sendmessage 경로를 생성합니다. 클라이언트는 sendmessage 경로를 간접 호출하여 연결된 모든 클라이언트에 메시지를 브로드캐스트할 수 있습니다. sendmessage 경로에는 AWS Step Functions와의 비프록시 AWS 서비스 통합이 있습니다. 통합은 AWS CloudFormation 템플릿이 사용자를 위해 생성한 Step Functions 상태 머신에 대해 StartExecution 명령을 간접 호출합니다.

비프록시 통합을 생성하려면
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. 경로 생성(Create route)을 선택합니다.

  3. 경로 키(Route key)sendmessage를 입력합니다.

  4. 통합 유형에서 AWS 서비스를 선택합니다.

  5. AWS 리전에는 AWS CloudFormation 템플릿을 배포한 리전을 입력합니다.

  6. AWS 서비스에서 Step Functions를 선택합니다.

  7. HTTP 메서드에 대해 POST를 선택합니다.

  8. 함수 이름StartExecution를 입력합니다.

  9. 실행 역할에는 AWS CloudFormation 템플릿에서 생성한 실행 역할을 입력합니다. 이름은 WebsocketTutorialApiRole이어야 합니다.

  10. 경로 생성(Create route)을 선택합니다.

다음으로, 요청 파라미터를 Step Functions 상태 머신에 전송하는 매핑 템플릿을 생성합니다.

매핑 템플릿을 생성하려면
  1. sendmessage 경로를 선택한 다음 통합 요청 탭을 선택합니다.

  2. 요청 템플릿 섹션에서 편집을 선택합니다.

  3. 템플릿 선택 표현식\$default를 입력합니다.

  4. 편집을 선택합니다.

  5. 템플릿 요청 섹션에서 템플릿 생성을 선택합니다.

  6. 템플릿 키\$default를 입력합니다.

  7. 템플릿 생성에 다음 매핑 템플릿을 입력합니다.

    #set($domain = "$context.domainName") #set($stage = "$context.stage") #set($body = $input.json('$')) #set($getMessage = $util.parseJson($body)) #set($mymessage = $getMessage.message) { "input": "{\"domain\": \"$domain\", \"stage\": \"$stage\", \"message\": \"$mymessage\"}", "stateMachineArn": "arn:aws:states:us-east-2:123456789012:stateMachine:WebSocket-Tutorial-StateMachine" }

    stateMachineArn을 AWS CloudFormation이 만든 스테이트 머신의 ARN으로 바꿉니다.

    매핑 템플릿이 다음을 수행합니다.

    • 컨텍스트 변수 domainName을 사용하여 변수 $domain을 생성합니다.

    • 컨텍스트 변수 stage를 사용하여 변수 $stage를 생성합니다.

      $domain$stage 변수는 콜백 URL을 작성하는 데 필요합니다.

    • 수신되는 sendmessage JSON 메시지를 받아 message 속성을 추출합니다.

    • 상태 머신에 대한 입력을 생성합니다. 입력은 WebSocket API의 도메인 및 스테이지와 sendmessage 경로의 메시지입니다.

  8. 템플릿 생성을 선택합니다.

    sendmessage 경로 구성.

$connect 또는 $disconnect 경로에 비프록시 통합을 생성하여 Lambda 함수를 간접 호출하지 않고도 DynamoDB 테이블에 연결 ID를 직접 추가하거나 제거할 수 있습니다.

6단계: API 테스트

다음으로 API를 배포하고 테스트하여 올바르게 작동하는지 확인합니다. wscat 명령을 사용하여 API에 연결한 다음 슬래시 명령을 사용하여 WebSocket API에 대한 연결을 확인하는 ping 프레임을 전송합니다.

API를 배포하려면
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. 기본 탐색 창에서 경로를 선택합니다.

  3. Deploy API(API 배포)를 선택합니다.

  4. 스테이지에서는 프로덕션을 선택합니다.

  5. (선택 사항) 배포 설명에 설명을 입력합니다.

  6. 배포를 선택합니다.

API를 배포한 후 API를 간접 호출할 수 있습니다. 호출 간접 URL을 사용하여 API를 직접 호출할 수 있습니다.

API의 URL 간접 호출을 가져오려면
  1. API를 선택합니다.

  2. 스테이지(Stages)를 선택한 다음 프로덕션(production)을 선택합니다.

  3. API의 WebSocket URL을 기록해 둡니다. URL은 wss://abcdef123.execute-api.us-east-2.amazonaws.com/production와 같아야 합니다.

이제 간접 호출 URL이 연결되었으므로 WebSocket API에 대한 연결을 테스트할 수 있습니다.

API에 대한 연결을 테스트하려면
  1. API에 연결하려면 다음 명령을 사용합니다. 먼저 /ping 경로를 간접 호출하여 연결을 테스트합니다.

    wscat -c wss://abcdef123.execute-api.us-east-2.amazonaws.com/production -H "Authorization: Allow" --slash -P
    Connected (press CTRL+C to quit)
  2. 다음 명령을 입력하여 컨트롤 프레임을 핑합니다. 클라이언트 측에서 keepalive 목적으로 컨트롤 프레임을 사용할 수 있습니다.

    /ping

    결과는 다음과 같아야 합니다.

    < Received pong (data: "")

연결 테스트에 성공했으므로 API가 제대로 작동하는지 테스트할 수 있습니다. 이 단계에서는 WebSocket API가 연결된 모든 클라이언트에 메시지를 보낼 수 있도록 새 터미널 창을 엽니다.

API 테스트하기
  1. 새 터미널을 열고 다음 파라미터를 사용하여 wscat 명령을 다시 실행합니다.

    wscat -c wss://abcdef123.execute-api.us-east-2.amazonaws.com/production -H "Authorization: Allow"
    Connected (press CTRL+C to quit)
  2. API Gateway는 API의 경로 선택 표현식을 기반으로 간접 호출할 경로를 결정합니다. API의 경로 선택 표현식은 $request.body.action입니다. 따라서 API Gateway는 다음 메시지가 전송될 때 sendmessage 경로를 호출합니다.

    {"action": "sendmessage", "message": "hello, from Step Functions!"}

    경로와 연결된 Step Functions 상태 머신은 메시지 및 콜백 URL과 함께 Lambda 함수를 간접 호출합니다. Lambda 함수는 API Gateway Management API를 호출하고 모든 연결된 클라이언트에 메시지를 보냅니다. 모든 클라이언트는 다음과 같은 메시지를 받습니다.

    < hello, from Step Functions!

이제 WebSocket API를 테스트했으므로 API와의 연결을 끊을 수 있습니다.

API 연결을 해제하려면
  • API 연결을 해제하려면 CTRL+C를 누릅니다.

    클라이언트가 API에서 연결을 해제하면 API Gateway에서 API $disconnect의 경로를 간접 호출합니다. API의 $disconnect 경로에 대한 Lambda 통합이 DynamoDB에서 연결 ID를 제거합니다.

7단계: 정리

불필요한 비용을 방지하려면 이 자습서의 일부로 생성한 리소스를 삭제합니다. 다음 단계에서는 AWS CloudFormation 스택 및 WebSocket API를 삭제합니다.

WebSocket API를 삭제하려면
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. APIs 페이지에서 websocket-api.를 선택합니다.

  3. 작업(Actions)을 선택하고 삭제(Delete)를 선택한 다음 선택을 확인합니다.

AWS CloudFormation 스택을 삭제하려면
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. AWS CloudFormation 스택을 선택합니다.

  3. 삭제를 선택한 다음 해당 선택을 확인합니다.

다음 단계

이 자습서와 관련된 모든 AWS 리소스의 생성 및 정리를 자동화할 수 있습니다. 이 자습서에서 이러한 작업을 자동화하는 AWS CloudFormation 템플릿의 예는 ws-sfn.zip를 참조합니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.