일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JavaScript
- 프로그래밍언어
- 주식
- 자바
- 프로그래머스 알고리즘 공부
- 책알남
- 지혜를가진흑곰
- 채권
- C
- 알고리즘트레이닝
- 다독
- algorithmtraining
- 돈
- algorithmStudy
- 알고리즘공부
- 재테크
- 성분
- 알고리즘 공부
- 백준알고리즘
- 책을알려주는남자
- 서평
- 화장품
- 경제
- C++
- 투자
- algorithmTest
- 독후감
- 독서
- 자바스크립트
- Java
- Today
- Total
탁월함은 어떻게 나오는가?
[Nestjs] 네스트js 프로젝트 websocket 구축해서 postman 테스트 해보기 본문
[Nestjs] 네스트js 프로젝트 websocket 구축해서 postman 테스트 해보기
Snow-ball 2023. 10. 30. 20:10nestjs 프로젝트로 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'가 보낸 데이터가 도착하는것이 확인이 된다.
'[Snow-ball]server > NestJS' 카테고리의 다른 글
[NestJS] Winston 사용하여 남는 log 연도/월/일 폴더 구조 생성해서 남기는 방법 (0) | 2024.02.22 |
---|---|
[NestJs] must be a number conforming to the specified constraints 에러 해결 방법 (0) | 2023.09.07 |
[Nest.js] 네스트js websocket 에러 (0) | 2023.05.24 |
[Nest.js] 스웨거 사용시 순환 참조 에러(enum 사용할 경우) (0) | 2023.03.27 |
[NestJS] Cannot read properties of undefined (reading '__garde__') ERROR (0) | 2023.02.19 |