top of page
검색

AWS EC2로 AI 콜봇 만들기

  • sanghoroh
  • 4월 2일
  • 4분 분량

AWS EC2 무료 서버(t2.micro)를 사용해서 WebSocket 서버를 띄우고, Twilio Media Stream을 연동해 음성 데이터를 실시간으로 처리하는 AI 콜봇 구축 과정을 A부터 Z까지 소개할게요.




AWS EC2
AWS EC2

AWS EC2 t2.micro 인스턴스 무료로 시작하기

✅ t2.micro란?

  • vCPU 1개, 메모리 1GB

  • 750시간 무료 (1년간)

  • 간단한 서버 운영에 적합

🛠️ EC2 인스턴스 생성 절차

  1. AWS 콘솔 로그인 → EC2로 이동

  2. 인스턴스 시작 클릭 → Amazon Linux 2 or Ubuntu 선택

  3. 인스턴스 유형에서 t2.micro 선택

  4. 키 페어 생성 → SSH 접속용 .pem 파일 다운로드

  5. 보안 그룹 설정 (포트 22, 80, 443, 3000 (WebSocket) 열기)

: 인스턴스를 생성한 후 퍼블릭 IP를 확보해야 외부에서 접속이 가능해요.

AWS EC2
AWS EC2

2. Node.js + WebSocket 서버 구축

📦 필수 패키지 설치


sudo apt update sudo apt install nodejs npm


📁 WebSocket 서버 코드 예시 (server.js)


const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 3000 }); wss.on('connection', function connection(ws) { console.log('Client connected'); ws.on('message', function incoming(message) { console.log('Received:', message); // AI 처리 로직 삽입 (예: STT, GPT API 등) }); ws.send('Welcome to AI Callbot Server!'); });

서버 실행:


node server.js

: EC2는 서버 재부팅 시 프로세스가 종료되므로, PM2로 Node.js 프로세스를 관리하는 게 좋아요.

3. Twilio Media Stream과 실시간 연동

Twilio는 전화 통화 중 오디오 데이터를 WebSocket으로 스트리밍할 수 있도록 Media Stream 기능을 제공해요.

📞 TwiML App 설정

  1. Twilio Console > Programmable Voice > TwiML App 생성

  2. Voice Request URL 설정:


<Response> <Start> <Stream url="wss://[EC2 퍼블릭 IP]:3000"/> </Start> <Say>AI 콜봇에 연결 중입니다.</Say> </Response>


🎯 실시간 음성 처리 흐름

Twilio → WebSocket → Node.js 서버 → AI 처리(API 연동) → 응답 전달

예: STT(Text-to-Speech) → GPT 처리 → TTS(Text-to-Speech) → Twilio에 응답

✅ 1. AWS 로그인 후 EC2로 이동

  1. https://console.aws.amazon.com/ 로그인

  2. 상단 검색창에 “EC2” 검색

  3. “EC2” 클릭 → 대시보드 진입

✅ 2. 인스턴스 만들기

  1. 왼쪽 메뉴에서 [인스턴스] > [인스턴스 시작]

  2. 주요 설정:

항목

선택값

AMI (OS)

Ubuntu 22.04 (프리티어 가능)

인스턴스 유형

t2.micro 또는 t3.micro (둘 다 프리티어)

키 페어

새로 생성 (twilio-callbot-key) & .pem 파일 저장

네트워크

기본값 사용

보안 그룹

새로 생성 (다음 단계에서 설명)

✅ 3. 보안 그룹 설정 (방화벽 열기)

  • 새 보안 그룹 생성 → 아래 포트 허용:

포트

용도

22

SSH 접속 (내 IP만 허용 추천)

80

HTTP (웹 브라우저 연결)

443

HTTPS

8080

WebSocket 서버 포트 (Twilio가 연결함)

예시 설정: Anywhere (0.0.0.0/0) 허용해도 개발 중에는 괜찮습니다.

✅ 4. 인스턴스 시작

  • ‘인스턴스 시작’ 클릭

  • 완료 후 인스턴스 목록 → 퍼블릭 IPv4 주소 복사

👉 예: 3.37.112.54

✅ 5. 터미널 열기

  • macOS: 터미널

  • Windows: Git Bash or PowerShell (또는 PuTTY)

✅ 6. 접속 명령어


chmod 400 twilio-callbot-key.pem ssh -i twilio-callbot-key.pem ubuntu@<EC2-PUBLIC-IP>

예시:


ssh -i twilio-callbot-key.pem ubuntu@3.37.112.54

💡 “yes” 한 번만 입력하면 SSH 접속 완료!

이제 AWS 위에 서버 세팅할 준비가 끝났습니다.

⏭️ 다음 단계: Node.js 설치 & WebSocket 서버 올리기

WebSocket
WebSocket

WebSocket, 왜 요즘 이렇게 많이 쓸까?

우리가 웹사이트를 이용할 때 보통은 브라우저가 서버에 요청(request)을 보내고, 서버는 그에 대한 응답(response)을 주는 구조죠. 이걸 HTTP 통신이라고 해요. 하지만 이 구조는 일방적이에요. 서버가 먼저 클라이언트에게 말을 걸 수 없거든요.

그런데 실시간 채팅, 게임, AI 콜봇처럼 서버와 클라이언트가 계속 실시간으로 대화해야 하는 서비스라면? 여기서 등장하는 게 바로 WebSocket입니다!

WebSocket의 정의

WebSocket은 클라이언트(브라우저 등)와 서버 사이에 지속적인 연결을 유지하며 양방향 통신이 가능한 프로토콜입니다.
  • 한 번 연결되면 지속적으로 연결 유지

  • 클라이언트와 서버 서로 실시간 메시지 주고받기 가능

  • HTTP보다 데이터 전송량이 적고 빠름

WebSocket vs HTTP 차이

항목

HTTP

WebSocket

연결 방식

요청-응답 후 연결 종료

최초 연결 이후 지속 연결 유지

데이터 전송 방향

클라이언트 → 서버 (일방향)

양방향 실시간 통신

속도

느림 (매번 연결 필요)

빠름 (연결 유지되므로 바로 전송)

사용 예시

게시판, 블로그

채팅, 게임, AI 콜봇, 실시간 알림

예시: WebSocket 사용 흐름

1. 클라이언트 연결 요청


const socket = new WebSocket("ws://example.com/ws");

2. 서버 연결 수락


const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 3000 }); wss.on('connection', (ws) => { console.log('Client connected'); ws.send('Hello from server!'); });

3. 양방향 메시지 주고받기


// 클라이언트에서 메시지 보내기 socket.send("Hi, Server!"); // 서버에서 메시지 받기 ws.on('message', (msg) => { console.log("Received from client:", msg); });

WebSocket을 사용하는 대표 서비스

  • 카카오톡, WhatsApp 등 메신저

  • 온라인 게임 (리그 오브 레전드, 배틀그라운드)

  • AI 콜봇 (Twilio Media Stream처럼 음성 데이터를 실시간 처리)

  • 주식/코인 시세 실시간 스트리밍




Google Cloud, IBM Cloud와 비교해보자

항목

AWS EC2 t2.micro

Google Cloud f1-micro

IBM Cloud Lite

무료 기간

12개월 (750시간/월)

12개월 (F1-micro, 744시간/월)

제한 없음 (Lite 플랜, 소규모 사용만 가능)

사양

1vCPU, 1GB RAM

0.2 vCPU, 0.6GB RAM

256MB RAM, 1 vCPU

퍼포먼스

⭐⭐⭐⭐☆

⭐⭐☆☆☆

⭐⭐☆☆☆

지원 OS

Ubuntu, Amazon Linux 등 다양

Debian, Ubuntu 등

Ubuntu 기반 컨테이너

설정 난이도

보통 (UI 친절, 튜토리얼 풍부)

약간 복잡 (권한, 네트워크 설정 주의)

매우 쉬움 (GUI 위주, CLI 없이도 가능)

WebSocket 적합도

매우 적합 (포트 설정 자유로움)

적합하나 방화벽 설정 유의

제약 있음 (고정 포트 사용, 제한적 설정 가능)

✅ 어떤 플랫폼이 나에게 맞을까?

유형

추천 플랫폼

초보자 + 실무 연습

AWS EC2 (튜토리얼/정보 풍부)

가볍게 체험용

IBM Cloud Lite

GCP 생태계 활용 중

Google Cloud f1-micro



FAQ

Q1. AWS 무료 계정 만들면 바로 EC2 쓸 수 있나요?

A. 네! 가입 후 바로 EC2 생성이 가능하고, t2.micro 인스턴스는 12개월간 자동 무료로 적용돼요.

Q2. EC2는 사용 안 해도 요금이 나오나요?

A. 인스턴스를 실행 중일 때만 시간 차감돼요. 중지(stop)하면 과금되지 않지만, 볼륨(EBS)은 과금될 수 있으니 주의하세요.

Q3. WebSocket 서버는 어떤 포트를 열어야 하나요?

A. 일반적으로 3000, 8080, 443 등을 많이 써요. EC2 보안 그룹에서 해당 포트를 꼭 인바운드 허용해야 외부 접속이 됩니다.


FAQ

Q1. WebSocket이 왜 HTTP보다 빠른가요?

A. HTTP는 매 요청마다 연결을 다시 만들기 때문에 오버헤드가 커요. 반면 WebSocket은 한 번 연결되면 계속 유지되기 때문에 데이터 전송 시 빠르고 효율적이에요.

Q2. WebSocket은 안전한가요?

A. 기본 WebSocket(ws://)은 암호화되지 않지만, 보안 WebSocket(wss://)을 사용하면 HTTPS처럼 SSL/TLS로 암호화돼서 안전하게 통신할 수 있어요.

Q3. 모든 브라우저에서 지원되나요?

A. 네! 크롬, 사파리, 엣지, 파이어폭스 등 대부분의 최신 브라우저에서 WebSocket을 기본 지원합니다.


FAQ

Q1. t2.micro로 AI 콜봇 충분히 돌아가나요?

A. 실시간 전화 1~2통 정도는 충분합니다. GPT API나 Whisper 같은 STT는 외부 API를 사용하므로 서버 부하가 크지 않아요.

Q2. WebSocket은 왜 쓰나요?

A. Twilio Media Stream이 음성 데이터를 실시간으로 전달하기 위해 WebSocket을 사용합니다. 즉시 처리와 응답이 가능한 구조이기 때문에 콜봇에 최적입니다.

Q3. 서버가 자꾸 죽어요, 왜 그럴까요?

A. Node.js를 그냥 node server.js로 실행하면 SSH 끊김과 함께 서버도 종료됩니다. pm2나 forever 같은 프로세스 매니저를 쓰세요.







 
 
 

Comments


bottom of page