아래 주소에서 초록색 Create New App 버튼 클릭
From Scratch 클릭
앱 이름(추후 변경 가능), 사용할 워크스페이스 선택
생성 후 해당 앱의 OAuth & Permissions 메뉴에서 아래와 같이 Scope 설정
추가한 채널의 아이디 알아내기 ⇒ 채널 세부 정보 좌측 하단
알아낸 정보를 토대로 아래 주소에서 테스트 가능 ⇒ token: 5에서 발급받은 토큰, channel: 7에서 알아낸 채널 ID, text: 전송할 내용
npm i --save ioredis
npm i @liaoliaots/nestjs-redis
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerModule } from './logger/logger.module';
import { RedisModule } from '@liaoliaots/nestjs-redis';
@Module({
imports: [
RedisModule.forRoot({
config: {
host: '127.0.0.1',
port: 6379,
},
}),
...
LoggerModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
import { RedisService } from '@liaoliaots/nestjs-redis';
import { Injectable } from '@nestjs/common';
import { Logger } from '@nestjs/common';
import { Redis } from 'ioredis';
import axios from 'axios';
@Injectable()
export class LoggerService {
private readonly redis: Redis;
constructor(private readonly redisService: RedisService) {
this.redis = this.redisService.getClient();
}
async log(message: string) {
this.redis.publish('logs', message); // Redis 클라이언트를 사용하여 'logs' 채널로 메시지를 게시
// await this.redis.set('logs', message, 'EX', 10); // Redis 클라이언트에 10초 간 정보 저장
await this.redis.rpush('logs', message); // Redis 클라이언트에 배열로 저장
Logger.log(message); // Nest.js의 Logger를 사용하여 메시지를 기본 로거로 출력
// Slack에 로그 메시지를 전송하기 위한 Slack API 호출에 사용할 정보들
const slackToken = process.env.SLACK_SECRET; // Slack API 토큰을 설정
const slackChannel = process.env.SLACK_CHANNEL_ID; // Slack 채널 ID를 설정
await sendSlackMessage(slackToken, slackChannel, message); // Slack에 메시지를 전송하기 위한 메서드 호출
}
}
// Slack에 메시지를 전송하는 메서드
async function sendSlackMessage(token: string, channel: string, text: string) {
try {
// Slack API의 chat.postMessage API를 호출하여 메시지를 전송
const response = await axios.post(
'<https://slack.com/api/chat.postMessage>',
{
channel: channel, // Slack 채널
text: text, // 전송할 메시지 텍스트
},
{
headers: {
Authorization: `Bearer ${token}`, // Slack API 인증을 위한 Bearer 토큰
},
},
);
return response.data; // Slack API 응답 데이터 반환
} catch (error) {
console.error('슬랙에 메시지를 보내던 중 에러가 발생하였습니다:', error);
}
}