๐Ÿ–ฅ๏ธ Server Code (2) - Service, DAO

์ดํ˜„์šฐยท2023๋…„ 12์›” 11์ผ

Service ํŒจํ‚ค์ง€

  • ํ”„๋กœํ† ์ฝœ body ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์š”์ฒญ์— ๋งž๊ฒŒ CustomResponse ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • UserService, RoomService, ChatService ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค.

1. UserService ํด๋ž˜์Šค ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋กœ๊ทธ์ธ ์‹œ, userId ์™€ client์˜ OutputStream์„ ๋งคํ•‘ํ•˜์—ฌ ๋“ฑ๋กํ•œ๋‹ค.
HashMap<Long, PrintWriter> onlineUser; // userId: Key, out: Value ๋กœ ๊ด€๋ฆฌ

Socket client = new ServerSocket(8000).accept(); // ์†Œ์ผ“ ์—ฐ๊ฒฐ ํ–ˆ์„ ๋•Œ (ํด๋ผ์ด์–ธํŠธ ์ ‘์†)
out = new PrintWriter(client.getOutputStream(), true, StandardCharsets.UTF_8);

userId = login(User body).getUserId(); // DB์—์„œ ์œ ์ €์ •๋ณด ๊ฐ€์ ธ์˜ฌ ๋•Œ (๋กœ๊ทธ์ธ)

// ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ,
onlineUser.put(userId, out);
  • onlineUser ๋ฅผ ํ†ตํ•ด, ์˜จ๋ผ์ธ ์œ ์ €๊ด€๋ฆฌ.
    • ์‹ค์‹œ๊ฐ„ ํ†ต์‹  / ์•Œ๋žŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

2. RoomService ํด๋ž˜์Šค ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ฑ„ํŒ…๋ฐฉ์— ์ดˆ๋Œ€ / ํ‡ด์žฅ ์‹œ, ์ฑ„ํŒ…๋ฐฉ์— ์†ํ•ด ์žˆ๋Š” ์œ ์ € ์ค‘ onlineUser ์—๊ฒŒ๋งŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฑ„ํŒ…์„ ์ „์†กํ•œ๋‹ค.

3. ChatService ํด๋ž˜์Šค ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ฑ„ํŒ… ์ „์†ก ์‹œ, ์ฑ„ํŒ…๋ฐฉ์— ์†ํ•ด ์žˆ๋Š” ์œ ์ € ์ค‘ onlineUser ์—๊ฒŒ๋งŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฑ„ํŒ…์„ ์ „์†กํ•œ๋‹ค.

DAO ํŒจํ‚ค์ง€

  • ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐ DB ์—ฐ๋™ ํŒจํ‚ค์ง€์ด๋‹ค.

1. RoomDAO ํด๋ž˜์Šค ์ฃผ์š” ์ฟผ๋ฆฌ

  • ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก List๋ฅผ ์กฐํšŒํ•  ๋•Œ
select room.roomId, room.roomName
from ChatRooms as room
join UserRooms as ur
on room.roomId = ur.roomId
where ur.userId = ?

2. ChatDAO ํด๋ž˜์Šค ์ฃผ์š” ์ฟผ๋ฆฌ

  • ์ฑ„ํŒ…๋ฐฉ ๋ฉ”์„ธ์ง€ ์กฐํšŒ: List
select cr.roomName, users.nickname, chat.message
from Chats as chat
join Users as users on users.userId = chat.userId
join ChatRooms as cr on cr.roomId = chat.roomId
where chat.roomId = ?
  • ๋ฉ”์„ธ์ง€ ์ „์†ก
  • ์ฑ„ํŒ…๋ฐฉ ์œ ์ €๋“ค์—๊ฒŒ ๋ฉ”์„ธ์ง€ ์ „์†ก์„ ์œ„ํ•ด
  • โ€œ์ฑ„ํŒ…๋ฐฉ ์œ ์ € ID: Longโ€, โ€œ๋ฐฉ ์ด๋ฆ„โ€, โ€œ์ฑ„ํŒ… ๋ฐœ์†กํ•œ ์œ ์ € ๋‹‰๋„ค์ž„โ€ ์„ ์กฐํšŒ ํ•˜๊ณ  ์žˆ๋‹ค.

ChatProgram

profile
Back-End ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€