@stream λ°μ½λ μ΄ν°λ Server-Sent Events(SSE)λ₯Ό μ¬μ©ν μ€μκ° μ€νΈλ¦¬λ° APIλ₯Ό μμ±ν©λλ€.
κΈ°λ³Έ μ¬μ©λ²
μ΅μ
type
μ€νΈλ¦¬λ° νμ μ μ§μ ν©λλ€. νμ μ΅μ WebSocketμ λ³λμ
@websocket λ°μ½λ μ΄ν°λ‘ μ§μλ©λλ€. @streamμ SSE μ μ©μ΄λ©° type μ΅μ
μ "sse"λ§ λ°μ΅λλ€.events
μ μ‘ν μ΄λ²€νΈμ νμ μ Zod μ€ν€λ§λ‘ μ μν©λλ€. νμ μ΅μ path
μ€νΈλ¦¬λ° μλν¬μΈνΈ κ²½λ‘λ₯Ό μ§μ ν©λλ€. κΈ°λ³Έκ°:/{modelName}/{methodName} (camelCase)
guards
μ κ·Ό κΆνμ μ§μ ν©λλ€.description
μ€νΈλ¦¬λ° API μ€λͺ μ μΆκ°ν©λλ€.resourceName
μμ±λλ μλΉμ€ νμΌμ 리μμ€ μ΄λ¦μ μ§μ ν©λλ€.SSE κ°μ²΄ μ¬μ©λ²
createSSE
Contextμμ SSE κ°μ²΄λ₯Ό μμ±ν©λλ€.publish
μ΄λ²€νΈλ₯Ό ν΄λΌμ΄μΈνΈλ‘ μ μ‘ν©λλ€.- μ΄λ²€νΈ μ΄λ¦μ μ€ν€λ§μ μ μλ κ²λ§ μ¬μ© κ°λ₯
- λ°μ΄ν°λ μ€ν€λ§μ λ§μΆ° μλ κ²μ¦
end
μ€νΈλ¦Ό μ°κ²°μ μ’ λ£ν©λλ€.end()λ ν΄λΌμ΄μΈνΈμ βendβ μ΄λ²€νΈλ₯Ό μ μ‘νκ³ 200ms λκΈ° ν μ°κ²°μ λ«μ΅λλ€.μ 체 μμ
λ€λ₯Έ λ°μ½λ μ΄ν°μ ν¨κ» μ¬μ©
@transactional
μ μ½μ¬ν
1. λ€λ₯Έ λΌμ°ν λ°μ½λ μ΄ν°(@api, @websocket, @upload)μ μ€λ³΅ μ¬μ© λΆκ°
κ°μ λ©μλμ@api, @stream, @websocket, @upload μ€ λ μ΄μμ ν¨κ» μ¬μ©ν μ μμ΅λλ€.
2. eventsλ νμ
3. httpMethodλ νμ GET
@streamμ μλμΌλ‘ httpMethod: "GET"μ μ€μ ν©λλ€.
ν΄λΌμ΄μΈνΈ μ¬μ© (Web)
Sonamuλ μλμΌλ‘ SSE ν΄λΌμ΄μΈνΈ μ½λλ₯Ό μμ±ν©λλ€.React μμ
λ‘κΉ
@stream λ°μ½λ μ΄ν°λ μλμΌλ‘ λ‘κ·Έλ₯Ό λ¨κΉλλ€:
μμ λͺ¨μ
- μ±ν
- μ§νλ₯ λͺ¨λν°λ§
- μ€μκ° λ°μ΄ν°
λ€μ λ¨κ³
@api
μΌλ° API μλν¬μΈνΈ λ§λ€κΈ°
@transactional
νΈλμμ
μΌλ‘ λ°μ΄ν° μΌκ΄μ± 보μ₯νκΈ°
@cache
κ²°κ³Ό μΊμ±μΌλ‘ μ±λ₯ ν₯μνκΈ°
SSE κ°μ΄λ
SSE μμΈ κ°μ΄λ 보기