Skip to main content
@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

@stream을 λ¨Όμ €, @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 상세 κ°€μ΄λ“œ 보기