Skip to content

๐Ÿš€ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž

Kontae edited this page Dec 3, 2024 · 1 revision

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์˜ ํ•„์š”์„ฑ

๊ณง ์ตœ์ข… ๋ฐœํ‘œ๊ฐ€ ๋‚จ์€ ์‹œ์ ์—์„œ, ์‹ค์ œ ์‚ฌ์šฉ์ž๋ฅผ ๋งŽ์ด ๋ชจ์•„์„œ ํ•˜๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ธฐ์— ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ,

๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋“ค์— ๋Œ€ํ•ด ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์™€ ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ ๋ผ๋Š” ๊ถ๊ธˆ์ฆ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ, ๋ถ€ํ•˜, ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ์˜ ์ฐจ์ด์ 

์„ฑ๋Šฅ, ๋ถ€ํ•˜, ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ ๋ฌด์—‡์ด ๋‹ค๋ฅผ๊นŒ?

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋Š” ํŠน์ • ์ƒํ™ฉ์—์„œ ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ํ…Œ์ŠคํŠธ์ด๋‹ค.

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ์ž์›์˜ ์‚ฌ์šฉ๋Ÿ‰, ํ™•์žฅ์„ฑ, ์‹ ๋ขฐ์„ฑ ๋“ฑ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.

โ‡’ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ์—์„œ์˜ API ํ‰๊ท  ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํŒŒ์•…

โ‡’ ํ™•์žฅ์„ฑ, ์‹ ๋ขฐ์„ฑ ๋ฐ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๊ณผ ๊ฐ™์€ ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ํ’ˆ์งˆ ์†์„ฑ์„ ์กฐ์‚ฌ, ์ธก์ •, ๊ฒ€์ฆ

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ž€ ์ž„๊ณ„๊ฐ’ ํ•œ๊ณ„์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ง€์†์ ์œผ๋กœ ๊พธ์ค€ํžˆ ์ฆ๊ฐ€์‹œ์ผœ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋Š” ์œ ์ €์˜ ์ˆ˜์™€ ์ดˆ๋‹น API ์š”์ฒญ ๋“ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์‹œ์Šคํ…œ์˜ ๋‚ด๊ตฌ์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•œ๊ณ„๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

โ‡’ ๋ฒ„ํผ ๋ชจ๋ฒ„ํ”Œ๋กœ์šฐ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐ ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฐํ•จ์„ ๋…ธ์ถœํ•œ๋‹ค.

โ‡’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฏธ๋ž˜์— ์˜ˆ์ƒ๋˜๋Š” ๋ถ€ํ•˜๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ•˜๋“œ์›จ์–ด, ๋„คํŠธ์›Œํฌ ๋“ฑ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ์˜ ์ƒํ•œ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ

์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ๋Š” ๊ธฐ์กด ์ž์›์— ์ดˆ๊ณผ ์ž‘์—…์œผ๋กœ ๊ณผ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ๋‹ค์–‘ํ•œ ํ™œ๋™์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์‹œ์Šคํ…œ์„ ๋ฌด๋„ˆ์กŒ์„ ๋•Œ ์–ด๋–ค ๋™์ž‘์„ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ์ด๋‹ค.

์‹œ์Šคํ…œ์ด ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์—ญํญ ์ด์ƒ์œผ๋กœ ๊ณผ๋ถ€ํ•˜๋ฅผ ์ฃผ๋ฉฐ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์ผ ๋•Œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋ณต๊ตฌ๋˜๋Š”์ง€, ์‹œ์Šคํ…œ์ด ์žฅ์•  ์กฐ์น˜๋ฅผ ํ•˜๋Š”์ง€, ๋ณด์•ˆ์ƒ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค

โ‡’ ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ์‹œ์Šคํ…œ์€ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ ค์„œ ์‹œ์Šคํ…œ์ด ๊ณ ์žฅ๋‚œ ์ดํ›„์—๋„ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ ์ƒํƒœ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒƒ

image

์ง„์งœ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž

๊ฐ€์žฅ ๋จผ์ €, ์ตํžˆ ์•Œ๊ณ  ์žˆ์—ˆ๊ณ , node์™€ ํ˜ธํ™˜์„ฑ์ด ์ข‹์€ k6 ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

k6๋Š” jsํŒŒ์ผ๋กœ ์ž‘์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ํˆด๋งŒ ์„ค์น˜ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‹ค๋งŒ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ k6๋Š” [socket.io](http://socket.io/) ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋งˆ์นจ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ํ•ญ๋ชฉ์ด ์‚ฌ์šฉ์ž ๋ณ„ ์ฑ„ํŒ… ๋ฐฉ ์ž…์žฅ๊ณผ ์ฑ„ํŒ… broadcasting์ด๋‹ค ๋ณด๋‹ˆ, ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋‹ค์Œ์œผ๋กœ ์ฐพ์•„๋ณธ ๊ฒƒ์€ artillery ์˜€๋‹ค.

artillery์˜ ํŠน์ง•์€ yml ํŒŒ์ผ๋กœ ์‹คํ–‰์„ ํ•ด์•ผ ํ•œ๋‹ค.

์ฝ”๋“œ๋Š” socket.io ๊ณต์‹ ๋ฌธ์„œ์˜ load testing ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ–ˆ๋‹ค.

https://socket.io/docs/v4/load-testing/

์—”์ง„์€ socketio๊ฐ€ ์•„๋‹Œ, socketio-v3์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด artillery ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅธ ์ ์ด์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ฑ„ํŒ… ๋ฐฉ ์ž…์žฅ์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” roomId๋ฅผ ์—ฐ๊ฒฐ์—์„œ๋Š” query๋กœ, ์ฑ„ํŒ…์—์„œ๋Š” data๋กœ ๋ฐ›์•„์˜ค๋Š”๋ฐ, ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

4์‹œ๊ฐ„์˜ ์šฐ์—ฌ๊ณก์ ˆ ๋์— ์™„์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

์ตœ์ข… ์ฝ”๋“œ

์ผ๋‹จ artillery - socket v3 ๊ด€ํ•ด์„œ ์„ค์น˜๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

yarn add artillery-engine-socketio-v3 artillery

๊ทธ๋ฆฌ๊ณ , socket-test.yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ๋‹ค.

config:
  target: 'http://localhost:3000'
  phases:
    - duration: 10
      arrivalRate: 20
  engines:
    socketio-v3:
      transports: ['websocket']
      timeout: 10000
  variables:
    roomId: '7b82b46b-d705-48a5-9bc5-918ee1a124a0'
scenarios:
  - name: 'Chat room flow'
    engine: socketio-v3
    flow:
      - think: 1

      - namespace: '/rooms'
        connect:
          query: 'roomId={{ roomId }}'
          headers:
            x-forwarded-for: '{{ $randomNumber(1000000, 9999999) }}'
        emit:
          channel: 'message'
          data:
            message: 'Test message'
            roomId: '{{ roomId }}'

      - think: 1

      - namespace: '/rooms'
        emit:
          channel: 'vote'
          data:
            trackNumber: "{{ $randomNumber(1,2) }}"

      - think: 30

์‹คํ–‰์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

yarn artillery run -e development socket-test.yml

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๊ณผ์ •

๋ฐฉ ์ž…์žฅ

๊ธฐ์กด ์˜ˆ์‹œ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด, ๋ฐฉ ์ž…์žฅ ๊ด€๋ จ ์„œ๋ฒ„ ์ฝ”๋“œ์—์„œ, SubscribeMessage()๋กœ ์ฒ˜๋ฆฌํ•ด์ค˜์„œ ๋ชจ๋‘ emit์„ ์ ์œผ๋ผ๊ณ  ๋‚˜์™€์žˆ๋‹ค.

๋‹ค๋งŒ, ์šฐ๋ฆฌ ์ฝ”๋“œ์—์„œ๋Š” handleConnection์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, emit ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , connect ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ๋‹ค.

๋‹ค๋งŒ ์—ฌ๊ธฐ์„œ, query: {{roomId}} ๋กœ๋งŒ ์ ์—ˆ๋‹ค๊ฐ€, 1์‹œ๊ฐ„ ์ •๋„๋ฅผ ์†Œ์š”ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ, ํ’€ ๋„ค์ž„์„ ์ ์–ด์ค˜์•ผํ–ˆ๋‹ค..

query:roomId={{ roomId }} ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

๋˜ํ•œ, namespace ๊ด€๋ จ emit๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ connect๋Š” ์‹คํ–‰ ์ „์— ์„ ์–ธ์„ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

image

์ž…์žฅ ๋กœ๊ทธ๊ฐ€ ์ž˜ ์ฐํžˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ฑ„ํŒ…

๊ธฐ์กด์—๋Š” namespace๊ฐ€ ๋ฐฉ ์ž…์žฅ ๋กœ์ง์—์„œ ์ž˜ ์ ํ˜€์žˆ์œผ๋‹ˆ, ์ž˜ ๋˜๊ฒ ์ง€ ๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ณ„์† ์‹œ๋„ํ•ด๋ดค๋Š”๋ฐ,

message ์ด๋ฒคํŠธ ๋กœ๊ทธ๊ฐ€ ์•„์˜ˆ ๋ฐœ์ƒํ•˜์ง€๋„ ์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ, ์›์ธ์€ namespace ์„ค์ • ํ•˜๋‚˜๋ฐ–์— ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.

- namespace: '/rooms'
        connect:
          query: 'roomId={{ roomId }}'
          headers:
            x-forwarded-for: '{{ $randomNumber(1000000, 9999999) }}'
      - think: 2
      - emit:
          namespace: '/rooms'
          channel: "message"
          data:
	          message: "Test message"
	          roomId: "{{ roomId }}"
      - think: 8

์•„๋ฌด๋ฆฌ namespace ์„ค์ •์„ ํ•ด๋ด๋„ ์ ์šฉ์ด ๋˜์ง€ ์•Š์•˜๋‹ค.

๋ญ๊ฐ€ ๋ฌธ์ œ์ธ๊ฐ€ ํ•˜๋‹ค๊ฐ€, ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ด, ์ค‘๊ฐ„์— think: 2 ๋•Œ๋ฌธ์— emit์— - ๊ฐ€ ๋ถ™์–ด์„œ, connect์™€ ๋ณ„๊ฐœ๋กœ ์„ค์ •๋˜์–ด ์ ์šฉ์ด ๋˜์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋ž˜์„œ think๋ฌธ์„ ์ง€์šฐ๊ณ , connect์™€ emit์„ ํ•˜๋‚˜์˜ ๋‹จ๊ณ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.

- namespace: '/rooms'
        connect:
          query: 'roomId={{ roomId }}'
          headers:
            x-forwarded-for: '{{ $randomNumber(1000000, 9999999) }}'
      
        emit:
          channel: 'message'
          data:
            message: 'Test message'
            roomId: '{{ roomId }}'
      - think: 30

์ด๋Ÿฌ๋ฉด emit์˜ ๊ฒฝ์šฐ์—๋„ namespace๋ฅผ ์ž˜ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

ํˆฌํ‘œ

๊ทธ๋ƒฅ ๋ฐ‘์— emit์œผ๋กœ ํˆฌํ‘œ ๊ด€๋ จ ๋‚ด์šฉ ์ ์œผ๋ฉด ๋˜๊ฒ ์ง€ ํ–ˆ๋Š”๋ฐ, ์•„๋‹ˆ์—ˆ๋‹ค.

์ƒˆ๋กœ์šด emit์— ๋Œ€ํ•ด์„œ๋Š” ๋˜ namespace๋ฅผ ๋ช…์‹œํ•ด์ค˜์•ผํ•œ๋‹ค.

		 flow:
      - think: 1

      - namespace: '/rooms'
        connect:
          query: 'roomId={{ roomId }}'
          headers:
            x-forwarded-for: '{{ $randomNumber(1000000, 9999999) }}'
        emit:
          channel: 'message'
          data:
            message: 'Test message'
            roomId: '{{ roomId }}'

      - think: 1

      - namespace: '/rooms'
        emit:
          channel: 'vote'
          data:
            trackNumber: "{{ $randomNumber(1,2) }}"

๊ทœ๊ฒฉ

yml ํŒŒ์ผ์ด๋ผ ๊ทœ๊ฒฉ์ด ๋„ˆ๋ฌด ์—„ํ•˜๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ, ์ŠคํŽ˜์ด์Šค ๋ฐ” ํ•˜๋‚˜๋งŒ ์ž˜๋ชป ๋ˆŒ๋Ÿฌ๋„ ๋ฌด์กฐ๊ฑด ์ธ์‹์กฐ์ฐจ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ •๋ง ์œ ์˜ํ•ด์„œ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

์†Œ์ผ“ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋กœ ์–ป์€ ๊ฒƒ

  • HLS ํ”„๋กœํ† ์ฝœ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. โ‡’ ์†Œ์ผ“์— ๋งŽ์€ ์ ‘์†์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ๋‹ค์Œ ์Œ์•…์ด ์ž˜ ์‹คํ–‰๋œ๋‹ค.
  • ์ฑ„ํŒ…์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก, ๋ ‰์ด ๊ฑธ๋ฆฌ๋Š”๋ฐ, ์œ ์‹ค๋˜๋Š” ์ฑ„ํŒ…์€ ์—†๋‹ค.
  • ํˆฌํ‘œ๋Š” ์ฑ„ํŒ…๋ณด๋‹ค๋Š” ๋œ ๋Š๋ฆฌ๊ณ , ๋‚˜๋ฆ„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ž˜ ์ž‘๋™๋œ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ๋žœ๋ค ์•„์ด๋”” ๋ถ€์—ฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. โ‡’ ์ด์ „ ์‚ฌ์šฉ์ž์˜ ๋žœ๋ค ์•„์ด๋””๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
    • message Evnet ์ฒ˜๋ฆฌํ•  ๋•Œ, randomId๊ฐ€ ํŠธ๋ž˜ํ”ฝ ๋ชฐ๋ฆผ์œผ๋กœ ์ธํ•˜์—ฌ ์ž˜ ์ €์žฅ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ด์œ ์ธ ์ค„ ์•Œ์•˜์œผ๋‚˜,
      connect ํ•œ ์ดํ›„ ๋ฐ”๋กœ message Event๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, ์ค‘๊ฐ„์— ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋„ฃ์–ด์ฃผ์—ˆ๋”๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

=> ๋‚˜๋ฆ„ ์ž˜ ์ž‘๋™ํ•œ๋‹ค?

๋ฆฌํฌํŠธ๋„ ๋ณผ ์ˆ˜ ์žˆ๋„ค?

artillery๋Š” HTML ๋ฆฌํฌํŠธ๋„ ์ง€์›ํ•œ๋‹ค.

์ด๊ฑธ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋จผ์ € ๊ฒฐ๊ณผ๋ฅผ JSON ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.

yarn artillery run -e development socket-test.yml -o report.json

๋˜ ์ด json ํŒŒ์ผ์„ html๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

yarn artillery report report.json

๋“ค์–ด๊ฐ€๋ณด๋ฉด,

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ˆˆ์— ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค..!!!

inear

๊ธฐ์ˆ  ๊ณต์œ 

๐Ÿš€ ffmpeg๋Š” stderr๋กœ ๋””๋ฒ„๊น…์„ ํ•˜๋Š” ์ด์œ 
๐Ÿš€ HLS ํ”„๋กœํ† ์ฝœ์— ๊ด€ํ•œ ์ •๋ฆฌ ๋ฐ FFmpeg ์‚ฌ์šฉ๊ธฐ
๐Ÿš€ ๋น„ํŠธ๋Š” tsconfig.json์ด ์„ธ ๊ฐœ?
๐Ÿš€ NestJS ๊ธฐ๋ณธ ๊ฐœ๋… - Modules
๐Ÿš€ Socket.io ์ตœ(๊ฐ•)์ ํ™”
๐Ÿš€ ๋„์ปค์™€ nginx์˜ ์‚ฌ์šฉ๊ธฐ
๐Ÿš€ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž

๊ฐœ๋ฐœ ์ผ์ง€

๐Ÿš€ FSD ์‚ฌ์šฉ๊ธฐ, ๊ทผ๋ฐ ์ด์ œ ๋‚˜๋งŒ์˜ ๊ทœ์น™์„ ๊ณ๋“ค์ธ
๐Ÿš€ CICD ๊ตฌ์กฐ ์ˆ˜์ •
๐Ÿš€ ์•จ๋ฒ” ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•˜๊ธฐ (with HLS)
๐Ÿš€ HLS๋กœ ์Œ์•… ์ฃผ๊ณ ๋ฐ›๊ธฐ
๐Ÿš€ vite + react + typescript ํ™˜๊ฒฝ์—์„œ path alias ์„ค์ •
๐Ÿš€ React Scan์ด ๋ญ์ฃ ?
๐Ÿš€ ๋กœ์ปฌ ํ™˜๊ฒฝ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋ฐฐํฌ
๐Ÿš€ ์•จ๋ฒ” ์ „์ฒด๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•œ๋‹ค๊ณ ? (with HLS)
๐Ÿš€ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

๐Ÿš€ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ HLS ERROR
๐Ÿš€ input ํƒœ๊ทธ์— ํ•œ๊ธ€ ์ž…๋ ฅ ํ›„, Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋‘๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์˜ค๋ฅ˜
๐Ÿš€ nginx proxy pass๋ฅผ ๋ฐ”๊ฟจ๋”๋‹ˆ ์ƒ๊ธด ์—๋Ÿฌ - ์Šค์›จ๊ฑฐ ์ธ์‹ ๋ฌธ์ œ
๐Ÿš€ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ WS handshake
๐Ÿš€ ๋ Œ๋”๋ง ๋ฒ”์ธ์€ ํ•˜๋‚˜!

ํ˜‘์—… ๊ทœ์น™

๐ŸŒˆ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ
๐Ÿฅ” ํŒ€์› ์†Œ๊ฐœ
๐Ÿ”Ž ์ฝ”๋“œ & ๊นƒ ์ปจ๋ฒค์…˜
๐ŸŒณ ๊นƒ branch ์ „๋žต
๐Ÿ“Œ ๋…ธ์…˜ ๋ฌธ์„œ ์ €์žฅ์†Œ

ํ”„๋กœ์ ํŠธ ๊ธฐํš

๐ŸŽจ ํ”ผ๊ทธ๋งˆ
๐Ÿง‘โ€๐Ÿ’ป ๊ธฐํš ๊ณต์œ  ๋ฐœํ‘œ ์ž๋ฃŒ
๐ŸŽค 2์ฃผ์ฐจ ๋ฐœํ‘œ ์ž๋ฃŒ
๐Ÿ˜Ž ๋ฐฑ๋กœ๊ทธ

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

๐Ÿ“ 1์ฃผ์ฐจ
๐Ÿ“ 2์ฃผ์ฐจ
๐Ÿ“ 3์ฃผ์ฐจ
๐Ÿ“ 4์ฃผ์ฐจ
๐Ÿ“ 5์ฃผ์ฐจ

์ฃผ๊ฐ„ ๊ณ„ํš์„œ

๐Ÿ—“๏ธ 1์ฃผ์ฐจ
๐Ÿ—“๏ธ 2์ฃผ์ฐจ
๐Ÿ—“๏ธ 3์ฃผ์ฐจ
๐Ÿ—“๏ธ 4์ฃผ์ฐจ
๐Ÿ—“๏ธ 5์ฃผ์ฐจ

๊ทธ๋ฃน ํšŒ๊ณ 

โœจ 1์ฃผ์ฐจ
โœจ 2์ฃผ์ฐจ
โœจ 3์ฃผ์ฐจ
โœจ 4์ฃผ์ฐจ


view

Clone this wiki locally