250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[Nestjs] 네스트js 프로젝트 websocket 구축해서 postman 테스트 해보기 본문

[Snow-ball]server/NestJS

[Nestjs] 네스트js 프로젝트 websocket 구축해서 postman 테스트 해보기

Snow-ball 2023. 10. 30. 20:10
반응형

nestjs 프로젝트로 websocket을 구현해서 postman으로 테스트를 해보겠다.

간단하게 테스트를 해볼것이기 때문에 코드레벨은 간단히 정의해보았다.

 

88번 포트로 웹소켓 통신을 시작할 것이고, 연결이 되기 시작했다면 'message'라는 값으로 통신을 시작할 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@WebSocketGateway(88, {
  transports: ['websocket'],
  cors: {
    origin: '*',
    methods: ['GET''POST'],
    transports: ['websocket''polling'],
    credentials: true,
  },
  allowEIO3: true,
})
 
export class ChatGateway
  implements OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit
{
  @WebSocketServer() private readonly server: Server;
 
  public handleConnection(client: Socket): void {
    const roomId: string = client?.handshake?.query['id'as string;
    
    client.connected && client.join(roomId);
  }
 
  public handleDisconnect(client: Socket): void {
    !client.disconnected && client.disconnect();
  }
 
  public afterInit(): void {
    instrument(this.server, {
      auth: false,
      mode: 'development',
    });
  }
 
  @SubscribeMessage<string>('message')
  private message(@MessageBody() message: Message) {
    this.server.to(message.roomId).emit('message', message);
  }
}
cs

 

 

 

 

위에처럼 코드를 작성해서 서버를 실행한다면 이제 postman으로 테스트 할 수 있는 상황이 되었다.

 

1. 포스트맨을 접속한다.

 

 

2. 왼쪽 상단의 [ New ] 버튼을 눌러서 뜨는 창에서 [ Socket.IO ]를 눌러주자.

 

 

3. 그러면 이렇게 빈 창이 뜨는데 하나씩 채워보자!

 

 

4.

(1) 맨위의 url 창부터 확인해보자.

- host: 나는 로컬에서 우선적으로 테스트 하기 위해서 127.0.0.1(localhost)를 사용하였다. 

- port: 포트번호는 위에와 동일하게 88번 포트를 사용하였다.

- query: handleConnection 함수가 실행될때 사용할 id값과 nickname값을 쿼리로 같이 사용하였다.

 

(2) Message 창

- 메시지창은 구성하기 나름이다. 그렇기 때문에 정해진 규격없이 팀이나 회사가 정하는 방식으로 보내면 된다.

- 본문의 메시지창은 message 함수에서 사용하기 위해 보낸다.

- 나의 경우에는 메시지 타입을 정의해 놓는것을 선호한다.

1
2
3
4
5
6
7
8
export type Message = Readonly<{
  roomId: string;
  nickname: string;
  message: string;
  profileImage?: string;
  createdAt: Date;
  level: string;
}>;
cs

- 메시지 본문의 경우 JSON으로 설정해야한다.

 

 

(3) Events 창은 소켓 서버에 발생한(emit) 이벤트 중 수신(on) 할 이벤트를 관리한다.

evnents는 커넥션 이후에 추가적으로 추가할 수 있지만, 나는 미리 설정하였다.

 

(4) Params는 쿼리스트링에 포함할 정보를 관리한다.

 

(5) Headers는 헤더에 포함할 정보를 관리한다. 나는 없기 때문에 비워두었다.

 

(6) Settings는 설정 정보를 가지고 있다.

 

(7) Ack 창

- Ack 창을 체크버튼을 눌러 체크를 해준다.

- 위의 코드를 보면 @SubscribeMessage('message')를 해주었기 때문에 공란에 message라고 채워준다.

 

 

5. 위에 같은 방식대로 창하나를 더 띄어서 룸에 접속할 client를 2명을 만들어야지 채팅 테스트가 가능하다.

나의 경우에는 'aaa' 와 'bbb'를 만들어서 사용해보겠다. 

2개의 client를 만들고 url 칸 옆의 파란색 [ Connet ] 를 눌러서 연결해주자. 그러면 연결되면 회색 [ Disconnet ] 변환되는걸 확인할 수 있다.

 

 

6. 2개의 client 모두 연결을 확인해보고 이제 [ Send ] 버튼을 눌러서 통신을 확인해보자.

 

확인 후 아이디 'aaa'로 Send 하면 밑에처럼 확인이 가능해진다.

밑에 message를 확인해보면 아래처럼 자세히 확인이 가능하다.

 

 

7. 그렇다면 client 'bbb'한테 전송이 될까? 아래처럼 'aaa'가 보낸 데이터가 도착하는것이 확인이 된다.

반응형
Comments