웹 애플리케이션에서 탐색할 때 실시간 알림을 받는 것은 매우 일반적입니다. 알림은 채팅 봇, 경고 시스템에서 오거나 앱이 한 명 이상의 사용자에게 푸시하는 이벤트에 의해 트리거될 수 있습니다. 알림의 출처가 무엇이든 개발자는 점점 더 Redis를 사용하여 알림 서비스를 만들고 있습니다.
마이크로서비스 아키텍처로 구동되는 최신 애플리케이션에서 Redis는 종종 단순 캐시와 기본 데이터베이스로 사용됩니다. 그러나 잘 알려진 Pub/Sub(Publish/Subscribe) 명령을 사용하는 경량 이벤트 시스템인 Redis Streams로 구동되는 영구 메시징 계층을 사용하는 서비스 간의 통신 계층으로도 사용됩니다.
이 블로그 게시물에서는 Vue.js, Node.js 및 WebSockets로 개발된 웹 애플리케이션에 메시지를 보내기 위해 Redis Pub/Sub를 사용하여 작은 알림 서비스를 만드는 것이 얼마나 쉬운지 보여줄 것입니다.
전제조건
이 데모 서비스는 다음을 사용합니다:
- 도커
- Redis 5.0.x 이상(이 데모에서는 Redis Docker 컨테이너 사용)
- Node 패키지 관리자(npm)가 있는 Node.js 10.x
- 개발 중 애플리케이션을 자동으로 다시 시작하는 간단한 도구인 nodemon
- 뷰 CLI
Redis 서버 시작
Redis 인스턴스가 아직 실행되지 않은 경우 Docker를 사용하여 시작할 수 있습니다. 터미널에서 다음 명령을 실행하십시오:
> docker run -it --rm --name redis-server -p 6379:6379 redis
이제 Redis가 실행되고 연결을 수락할 준비가 되었습니다.
Node.js로 WebSocket 서버 만들기
적절한 구조로 프로젝트를 구성하려면 터미널을 열고 다음 명령을 입력하십시오.
npm을 사용하여 새 Node.js 프로젝트를 만듭니다. (-y 매개변수는 모든 값을 기본값으로 설정합니다) :
위의 마지막 명령은 WebSocket 및 Redis 종속성을 프로젝트에 추가합니다. 이제 코드를 작성할 준비가 되었습니다!
WebSocket 서버 작성
즐겨 사용하는 Node.js용 코드 편집기(저는 Visual Studio Code 사용)를 열고 “code .” 코드를 입력하기만 하면 됩니다. 현재 디렉토리를 엽니다. 편집기에서 server.js라는 새 파일을 만듭니다. .
이 간단한 Node.js 프로그램은 데모로 제한되며 다음에 중점을 둡니다.
- Redis에 연결(9행)
- “app:notifications”의 메시지 구독 채널(10행)
- WebSocket 서버 시작(13행)
- 사용자 클라이언트 연결 등록(16행)
- Redis 구독 이벤트 듣기(19행)
- 모든 WebSocket 클라이언트(21)에 메시지를 보냅니다.
5행과 6행은 단순히 Redis 서버 위치와 웹 소켓 서버에 사용할 포트를 구성하는 데 사용됩니다. 보시다시피 매우 간단합니다.
WebSocket 서버 실행
nodemon을 아직 설치하지 않은 경우 , 지금 설치하십시오. 그런 다음 다음 명령을 사용하여 WebSocket 서버를 시작합니다.
이제 알림을 수신하고 사용자에게 인쇄할 프런트엔드를 만들어 보겠습니다.
Vue.js로 프론트엔드 만들기
새 터미널을 열고 알림에서 다음 명령을 실행합니다. 디렉토리:
Vue CLI 도구를 아직 설치하지 않았다면 지금 npm install -g @vue/cli 명령을 사용하여 설치하세요. .
이 명령은 실행 및 확장할 준비가 된 새 Vue 프로젝트를 생성합니다.
이 데모를 위해 설치할 마지막 패키지는 BootstrapVue로, 인기 있는 Bootstrap 프레임워크의 CSS 라이브러리와 구성 요소를 쉽게 사용할 수 있습니다.
즐겨 사용하는 코드 편집기에서 웹 클라이언트 디렉토리를 연 다음 새로 생성된 Vue 애플리케이션을 시작합니다.
마지막 명령은 페이지를 제공할 Vue 개발 서버를 시작하고 페이지를 변경할 때 페이지를 자동으로 다시 로드합니다.
브라우저를 열고 https://localhost:8080으로 이동합니다. 기본 Vue 시작 페이지가 표시되어야 하는 위치:
프런트엔드에 WebSocket 추가
Vue 프레임워크는 매우 간단하며 이 게시물에서는 코드를 최대한 단순하게 유지합니다. 디렉토리 구조를 빠르게 살펴보겠습니다.
├── README.md ├── babel.config.js ├── node_modules ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src ├── App.vue ├── assets │ └── logo.png ├── components │ └── HelloWorld.vue └── main.js
루트 수준의 파일(babel.config.js , 패키지.json , 패키지 잠금.json , 노드_모듈 )는 프로젝트를 구성하는 데 사용됩니다. 적어도 현재로서는 가장 흥미로운 부분은 src에 있습니다. 디렉토리:
- main.js file은 모든 공통 요소를 로드하고 App.vue를 호출하는 애플리케이션의 기본 JavaScript 파일입니다. 메인 화면. 나중에 Bootstrap 지원을 추가하도록 수정하겠습니다.
- App.vue 특정 페이지 또는 템플릿에 대한 HTML, CSS 및 JavaScript에 포함된 파일입니다. 애플리케이션의 진입점으로 이 부분은 기본적으로 모든 화면에서 공유되므로 이 파일에 알림 클라이언트 부분을 작성하는 것이 좋습니다.
public/index.html DOM이 로드될 정적 진입점입니다. 보시면
이 데모는 매우 간단하며 App.vue 파일 2개만 수정하면 됩니다. 및 main.js 파일. 실제 응용 프로그램에서는 다양한 위치에서 재사용될 Vue.js 구성 요소를 만들 수 있습니다.
WebSocket 메시지를 표시하도록 App.vue 파일 업데이트
App.vue를 엽니다. 편집기에서 파일을 만들고 아래 나열된 정보를 추가하십시오. 페이지 하단의
{{message}} 표기법을 사용하여 Vue가 다음 블록에서 정의할 메시지 변수의 내용을 인쇄하도록 지정합니다.
에서 , 내용을 다음으로 대체:
이 몇 줄의 코드는 다음과 같은 용도로 사용됩니다.
- WebSocket 서버에 연결(라인 13)
- 서버의 메시지를 사용하고 로컬 메시지를 보냅니다. 변수(13-17행)
변경된 내용을 자세히 살펴보면 다음과 같이 추가되었음을 알 수 있습니다.
- 데이터() 화면 자체에 바인딩할 수 있는 로컬 변수를 정의하고 있음을 Vue 구성 요소에 나타내는 함수(라인 6-10)
- created() Vue 구성 요소가 초기화될 때 자동으로 호출되는 함수
Redis에서 Vue 애플리케이션으로 메시지 보내기
WebSocket 서버와 Vue 프런트엔드는 추가한 몇 줄의 JavaScript 덕분에 이제 실행되고 연결되어야 합니다. 테스트할 시간입니다!
Redis CLI 또는 RedisInsight를 사용하여 일부 메시지를 app:notifications에 게시합니다. 채널. 예를 들어 Docker를 사용하여 Redis를 시작한 경우 다음 명령을 사용하여 Redis에 연결하고 메시지 게시를 시작할 수 있습니다.
브라우저의 애플리케이션 하단에 메시지가 표시되어야 합니다.
보시다시피 WebSocket을 사용하여 실시간으로 웹 프론트엔드에 콘텐츠를 푸시하는 것은 매우 쉽습니다. 이제 Bootstrap을 사용하여 디자인을 개선하고 사용자 친화적인 인터페이스를 추가할 수 있습니다.
Bootstrap으로 경고 블록 만들기
이 섹션에서는 간단한 카운트다운을 사용하여 새 메시지가 수신될 때 나타나고 몇 초 후에 자동으로 사라지는 부트스트랩 경고 구성 요소를 사용하는 방법을 보여줍니다.
Main.js 파일
main.js 파일을 열고 마지막 가져오기 후에 다음 줄을 추가합니다.
이 네 줄은 Vue 응용 프로그램에서 Bootstrap 구성 요소를 가져오고 등록합니다.
App.js 파일
App.vue에서 파일에서 이전에 추가한 코드를 바꿉니다(두
사이의 모든 태그 및 태그 자체):
이 구성 요소는 여러 속성을 사용합니다.
- id="알림" JavaScript 또는 CSS 코드에서 요소를 참조하는 데 사용되는 요소 ID입니다.:show=”dismissCountDown” 구성 요소가 dismissCountDown인 경우에만 표시됨을 나타냅니다. 변수가 null도 아니고 0도 아닙니다.
- 닫을 수 있음 사용자가 수동으로 닫을 수 있도록 경고에 작은 아이콘을 추가합니다.
- @dismissed="dismissCountDown=0″ 경고 상자가 닫히고 dismissCountDown 값이 표시됨을 나타냅니다. 0과 같음
- @dismiss-count-down="countDownChanged" 카운트다운 방식
경고 구성 요소에서 사용하는 변수와 메서드를 정의하기 위해 몇 줄의 JavaScript를 추가해 보겠습니다.
이 섹션에는 다음이 포함됩니다.
- dismissSecs 추가 및 dismissCountDown 경고를 다시 숨기기 전에 경고를 표시하는 타이머를 제어하는 데 사용되는 data() 메서드(4-5행)에 대한 변수
- 경고 구성 요소를 표시하고 숨기는 메서드 생성(라인 10-26)
- showAlert()라고 함 새 메시지 수신 시 메소드(13행)
시도해보자!
redis-cli 또는 Redis Insight로 돌아가서 app:notifications에 새 메시지를 게시하세요. 채널.
보시다시피 Redis를 사용하여 애플리케이션에 대한 강력한 알림 서비스를 만드는 것은 쉽습니다. 이 샘플은 단일 채널과 서버를 사용하고 모든 클라이언트에 브로드캐스팅하는 매우 기본적인 것입니다.
목표는 WebSocket 및 Redis Pub/Sub로 시작하여 Redis에서 웹 애플리케이션으로 메시지를 푸시하는 쉬운 방법을 제공하는 것이었습니다. 다양한 채널을 사용하여 특정 클라이언트에 메시지를 전달하고 애플리케이션을 확장 및 보호하는 많은 옵션이 있습니다.
WebSocket 서버를 다른 방향으로 사용하여 메시지를 소비하고 클라이언트에 메시지를 푸시할 수도 있습니다. 그러나 그것은 다른 블로그 게시물의 큰 주제입니다. 실제로 Redis Gears를 사용하여 Redis 데이터베이스에서 직접 쉽게 이벤트를 캡처하고 일부 이벤트를 다양한 클라이언트에 푸시하는 방법에 대한 더 많은 블로그 게시물을 계속 지켜봐 주시기 바랍니다.
자세한 내용은 다음 리소스를 참조하세요.
- Redis Microservices for Dummies(무료 eBook)
- Redis Streams 소개(Redis 문서)
- Redis Pub/Sub(Redis 문서)
- Redis University에서 무료 온라인 과정 수강
- Redis Enterprise Cloud 확인