Skip to content

Commit e97dbdd

Browse files
authored
소켓 부하 테스트 (#199)
* fix: random name util 함수 소소한 버그 수정 - trim - 타입 명시 * feat: message 이벤트에서 name 한 번 더 검사 부하 테스트 결과, 빈 이름이 올 때가 많았습니다. * chore: 부하 테스트 툴 artillery 설치 * feat: socket 부하 테스트 yml 추가 * fix: 한 번 더 검증하는 로직 삭제
1 parent 008eb7f commit e97dbdd

File tree

4 files changed

+7163
-186
lines changed

4 files changed

+7163
-186
lines changed

Diff for: server/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"test:watch": "jest --watch",
1919
"test:cov": "jest --coverage",
2020
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
21-
"test:e2e": "jest --config ./test/jest-e2e.json"
21+
"test:e2e": "jest --config ./test/jest-e2e.json",
22+
"test:load": "artillery run socket-test.yml"
2223
},
2324
"dependencies": {
2425
"@ffmpeg-installer/ffmpeg": "^1.1.0",
@@ -38,6 +39,7 @@
3839
"@types/fluent-ffmpeg": "^2.1.27",
3940
"@types/jest": "^29.5.14",
4041
"@types/socket.io": "^3.0.2",
42+
"artillery-engine-socketio-v3": "^1.2.0",
4143
"aws-sdk": "^2.1692.0",
4244
"bcrypt": "^5.1.1",
4345
"cache-manager": "5.2.3",
@@ -74,6 +76,7 @@
7476
"@types/node": "^22.9.0",
7577
"@typescript-eslint/eslint-plugin": "^6.0.0",
7678
"@typescript-eslint/parser": "^6.0.0",
79+
"artillery": "^2.0.21",
7780
"eslint": "^8.42.0",
7881
"eslint-config-prettier": "^9.0.0",
7982
"eslint-plugin-prettier": "^5.0.0",

Diff for: server/socket-test.yml

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
config:
2+
# 일단 로컬 환경 URL
3+
target: 'http://localhost:3000'
4+
phases:
5+
# 10초 동안
6+
- duration: 10
7+
# 1초에 20명
8+
arrivalRate: 20
9+
engines:
10+
socketio-v3:
11+
transports: ['websocket']
12+
timeout: 10000
13+
variables:
14+
# 원하는 roomId 설정
15+
roomId: '7b82b46b-d705-48a5-9bc5-918ee1a124a0'
16+
scenarios:
17+
- name: 'Chat room flow'
18+
engine: socketio-v3
19+
flow:
20+
- think: 1
21+
22+
- namespace: '/rooms'
23+
connect:
24+
query: 'roomId={{ roomId }}'
25+
headers:
26+
x-forwarded-for: '{{ $randomNumber(1000000, 9999999) }}'
27+
28+
- think: 2
29+
30+
- namespace: '/rooms'
31+
emit:
32+
channel: 'message'
33+
data:
34+
message: 'Test message'
35+
roomId: '{{ roomId }}'
36+
37+
- think: 1
38+
39+
- namespace: '/rooms'
40+
emit:
41+
channel: 'vote'
42+
data:
43+
# 일단 노래 두 개가 있다고 가정하고, 랜덤 값 지정
44+
trackNumber: "{{ $randomNumber(1,2) }}"
45+
46+
- think: 30

Diff for: server/src/common/randomname/random-name.util.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class RandomNameUtil {
2424
'청결한',
2525
'상냥한',
2626
'예의바른',
27-
'높은 ',
27+
'높은',
2828
'먼',
2929
'정직한',
3030
'성실한',
@@ -49,7 +49,7 @@ export class RandomNameUtil {
4949
'고릴라',
5050
'자리',
5151
'코뿔소',
52-
'북극곰 ',
52+
'북극곰',
5353
'회색곰',
5454
'침팬지',
5555
'돌고래',
@@ -59,7 +59,7 @@ export class RandomNameUtil {
5959
'토끼',
6060
];
6161

62-
public static generate() {
62+
public static generate(): string {
6363
const adjectvieLength = RandomNameUtil.adjective.length;
6464
const animalLength = RandomNameUtil.animal.length;
6565

0 commit comments

Comments
 (0)