From 3f142f21847cad8bdee223e796ac5c5e54e45a58 Mon Sep 17 00:00:00 2001 From: syc0123 Date: Tue, 31 Mar 2026 09:54:49 +0900 Subject: [PATCH] =?UTF-8?q?[RAPID-fix]=20REST=20API=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=A0=84=EC=86=A1=20=EC=8B=9C=20Socket.IO=20broadc?= =?UTF-8?q?ast=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - socketManager.ts 모듈 생성 (io 전역 공유) - sendMessage 컨트롤러에서 io.to(room).emit('new_message') broadcast - 상대방 말풍선 너비 고정 수정 (items-start 추가) Co-Authored-By: Claude Sonnet 4.6 --- backend-node/src/app.ts | 2 ++ backend-node/src/controllers/messengerController.ts | 8 ++++++++ backend-node/src/socket/socketManager.ts | 11 +++++++++++ frontend/components/messenger/MessageItem.tsx | 2 +- 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 backend-node/src/socket/socketManager.ts diff --git a/backend-node/src/app.ts b/backend-node/src/app.ts index 06591522..d0532997 100644 --- a/backend-node/src/app.ts +++ b/backend-node/src/app.ts @@ -416,10 +416,12 @@ const server = app.listen(PORT, HOST, async () => { try { const { Server: SocketIOServer } = await import("socket.io"); const { initMessengerSocket } = await import("./socket/messengerSocket"); + const { setIo } = await import("./socket/socketManager"); const io = new SocketIOServer(server, { cors: { origin: "*", methods: ["GET", "POST"] }, path: "/socket.io", }); + setIo(io); initMessengerSocket(io); logger.info("💬 Socket.IO messenger initialized"); } catch (error) { diff --git a/backend-node/src/controllers/messengerController.ts b/backend-node/src/controllers/messengerController.ts index 25e1ee50..b1fe2e11 100644 --- a/backend-node/src/controllers/messengerController.ts +++ b/backend-node/src/controllers/messengerController.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import { messengerService } from '../services/messengerService'; import { AuthenticatedRequest } from '../types/auth'; +import { getIo } from '../socket/socketManager'; import path from 'path'; class MessengerController { @@ -69,6 +70,13 @@ class MessengerController { } const message = await messengerService.sendMessage(roomId, user.userId, user.companyCode!, content, messageType, parentId); + + // Broadcast to all room participants via Socket.IO + const io = getIo(); + if (io) { + io.to(`${user.companyCode}:${roomId}`).emit('new_message', message); + } + res.json({ success: true, data: message }); } catch (error) { const err = error as Error; diff --git a/backend-node/src/socket/socketManager.ts b/backend-node/src/socket/socketManager.ts new file mode 100644 index 00000000..309ef6c0 --- /dev/null +++ b/backend-node/src/socket/socketManager.ts @@ -0,0 +1,11 @@ +import { Server } from 'socket.io'; + +let _io: Server | null = null; + +export function setIo(io: Server) { + _io = io; +} + +export function getIo(): Server | null { + return _io; +} diff --git a/frontend/components/messenger/MessageItem.tsx b/frontend/components/messenger/MessageItem.tsx index e647d64a..da9074a1 100644 --- a/frontend/components/messenger/MessageItem.tsx +++ b/frontend/components/messenger/MessageItem.tsx @@ -53,7 +53,7 @@ export function MessageItem({ message, isOwn, showAvatar }: MessageItemProps) {
)} -
+
{showAvatar && !isOwn && ( {message.senderName}