실시간 데이터베이스를 활용한 웹 소켓 채팅 애플리케이션 개발

웹 소켓 채팅 애플리케이션 개발의 필요성

웹 소켓을 이용한 실시간 채팅 애플리케이션은 사용자들이 실시간으로 메시지를 주고받을 수 있는 효과적인 방법입니다. 기존의 HTTP 요청과 응답 방식은 클라이언트가 서버에 요청을 보내고, 서버가 응답을 보내는 방식으로 동작하지만, 웹 소켓을 사용하면 서버와 클라이언트는 양방향 통신을 할 수 있습니다. 이는 실시간 채팅 애플리케이션에서 매우 중요한 요구사항이며, 사용자 경험을 향상시키는 데 도움이 됩니다.

웹 소켓 채팅 애플리케이션 개발 예시 (JavaScript)


// 웹 소켓 연결
const socket = new WebSocket('ws://localhost:3000');

// 서버로부터 메시지 수신 이벤트 리스너
socket.onmessage = function(event) {
  const message = JSON.parse(event.data);
  displayMessage(message);
};

// 클라이언트에서 메시지 전송
function sendMessage(message) {
  socket.send(JSON.stringify(message));
}

// 메시지를 화면에 표시
function displayMessage(message) {
  const chatContainer = document.getElementById('chat-container');
  const messageElement = document.createElement('div');
  messageElement.innerHTML = message.content;
  chatContainer.appendChild(messageElement);
}

실시간 데이터베이스 선택 및 설정

실시간 채팅 애플리케이션에서는 사용자들이 실시간으로 메시지를 주고받기 때문에, 데이터베이스는 실시간으로 업데이트되는 데이터를 처리할 수 있어야 합니다. 아래는 실시간 채팅에 적합한 몇 가지 데이터베이스 옵션입니다.

Firebase Realtime Database

Firebase는 구글에서 제공하는 클라우드 기반 플랫폼으로, Firebase Realtime Database는 실시간 데이터베이스 역할을 수행합니다. Firebase Realtime Database는 클라이언트와 실시간으로 데이터를 동기화할 수 있는 기능을 제공하여 실시간 채팅 애플리케이션에 적합합니다.

Redis

Redis는 인메모리 데이터 구조 스토어로, 실시간 데이터 처리에 특화되어 있습니다. Redis는 높은 처리량과 낮은 지연 시간을 제공하며, pub/sub 기능을 통해 실시간 메시지 전송에 유용합니다.

Apache Kafka

Apache Kafka는 분산 스트리밍 플랫폼으로, 실시간 데이터 스트림 처리에 사용됩니다. Kafka는 대용량의 메시지를 효율적으로 처리할 수 있고, 데이터 복제 및 확장성 기능을 제공하여 안정적인 실시간 데이터 처리를 보장합니다.

MySQL with WebSocket Extension

MySQL은 대중적인 관계형 데이터베이스 시스템이며, WebSocket 확장 기능을 이용하여 실시간 데이터 처리를 지원할 수 있습니다. MySQL의 WebSocket 확장은 MySQL 서버와 클라이언트 간의 양방향 통신을 제공하여 실시간 채팅 애플리케이션에 적용할 수 있습니다.


웹 소켓 서버 구축

웹 소켓 서버를 구축하기 위해서는 클라이언트와 서버 간의 웹 소켓 연결을 처리하는 코드가 필요합니다. 아래는 웹 소켓 서버를 구축하기 위한 예시 코드입니다.

웹 소켓 서버 구축 예시 (Node.js)


const WebSocket = require('ws');

// 웹 소켓 서버 생성
const wss = new WebSocket.Server({ port: 3000 });

// 클라이언트 연결 이벤트 핸들러
wss.on('connection', function connection(ws) {
  // 클라이언트로부터 메시지 수신 이벤트 핸들러
  ws.on('message', function incoming(message) {
    // 수신한 메시지 클라이언트에게 브로드캐스팅
    wss.clients.forEach(function(client) {
      if (client !== ws) {
        client.send(message);
      }
    });
  });
});

위 코드는 Node.js와 `ws` 모듈을 사용하여 웹 소켓 서버를 구축하는 예시입니다. 예시 코드에서는 클라이언트 연결을 관리하기 위해 `WebSocket.Server`를 생성하고, 클라이언트로부터 메시지를 수신하면 다른 모든 클라이언트에게 메시지를 브로드캐스팅합니다.

웹 소켓 서버 구축 예시 (Java)


import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

@ServerEndpoint("/chat")
public class WebSocketServer {
    private static final Set sessions = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
        broadcast("New user joined");
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        broadcast(message);
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
        broadcast("User left");
    }

    private void broadcast(String message) {
        for (Session session : sessions) {
            try {
                session.getBasicRemote().sendText(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

위 코드는 Java와 `javax.websocket` 패키지를 사용하여 웹 소켓 서버를 구축하는 예시입니다. `@ServerEndpoint` 어노테이션을 사용하여 `/chat` 엔드포인트를 정의하고, 클라이언트의 연결, 메시지 수신, 연결 종료에 대한 이벤트 핸들러를 구현합니다. `broadcast` 메서드는 모든 클라이언트에게 메시지를 전달합니다.


웹 소켓 클라이언트 개발

웹 소켓 클라이언트를 개발하기 위해서는 웹 소켓 서버와의 연결, 메시지 송수신을 처리하는 코드가 필요합니다. 아래는 웹 소켓 클라이언트를 개발하기 위한 예시 코드입니다.

웹 소켓 클라이언트 개발 예시 (JavaScript)


const socket = new WebSocket('ws://localhost:3000');

// 웹 소켓 연결 이벤트 핸들러
socket.onopen = function() {
  console.log('WebSocket connected');
};

// 메시지 수신 이벤트 핸들러
socket.onmessage = function(event) {
  const message = event.data;
  console.log('Received message:', message);
};

// 메시지 전송 함수
function sendMessage(message) {
  socket.send(message);
}

위 코드는 JavaScript를 사용하여 웹 소켓 클라이언트를 개발하는 예시입니다. `WebSocket` 객체를 생성하여 웹 소켓 서버에 연결하고, 연결이 성공하면 `onopen` 이벤트 핸들러가 호출됩니다. `onmessage` 이벤트 핸들러는 서버로부터 메시지를 수신할 때 호출되며, `sendMessage` 함수를 사용하여 메시지를 서버로 전송할 수 있습니다.

웹 소켓 클라이언트 개발 예시 (Java)


import javax.websocket.*;

@ClientEndpoint
public class WebSocketClient {
    private Session session;

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        System.out.println("WebSocket connected");
    }

    @OnMessage
    public void onMessage(String message) {
        System.out.println("Received message: " + message);
    }

    public void sendMessage(String message) {
        session.getAsyncRemote().sendText(message);
    }
}

위 코드는 Java와 `javax.websocket` 패키지를 사용하여 웹 소켓 클라이언트를 개발하는 예시입니다. `@ClientEndpoint` 어노테이션을 사용하여 클라이언트 엔드포인트를 정의하고, `onOpen` 메서드가 웹 소켓 연결 성공 이벤트를 처리합니다. `onMessage` 메서드는 서버로부터 메시지를 수신할 때 호출되며, `sendMessage` 메서드는 메시지를 서버로 전송합니다.


사용자 인증 및 세션 관리

웹 응용 프로그램에서 사용자 인증 및 세션 관리는 보안과 사용자 경험을 개선하기 위해 중요한 요소입니다. 아래는 사용자 인증 및 세션 관리를 구현하는 방법에 대한 예시 코드입니다.

사용자 인증 및 세션 관리 예시 (Node.js)


const express = require('express');
const session = require('express-session');

const app = express();

// 세션 설정
app.use(session({
  secret: 'secret-key',
  resave: false,
  saveUninitialized: true
}));

// 로그인 라우트
app.post('/login', function(req, res) {
  const { username, password } = req.body;

  // 사용자 인증 로직

  // 세션에 사용자 정보 저장
  req.session.username = username;

  res.send('Logged in successfully');
});

// 보호된 라우트
app.get('/protected', function(req, res) {
  // 로그인 여부 확인
  if (req.session.username) {
    res.send('Protected content');
  } else {
    res.sendStatus(401);
  }
});

app.listen(3000, function() {
  console.log('Server started on port 3000');
});

위 코드는 Node.js와 Express 프레임워크를 사용하여 사용자 인증 및 세션 관리를 구현하는 예시입니다. `express-session` 모듈을 사용하여 세션을 설정하고, `/login` 라우트에서 사용자 인증을 처리합니다. 로그인에 성공하면 세션에 사용자 정보를 저장하고, `/protected` 라우트에서는 세션을 확인하여 보호된 콘텐츠를 반환하거나 인증되지 않았다는 상태 코드를 전송합니다.

사용자 인증 및 세션 관리 예시 (Java)


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 사용자 인증 로직

        // 세션에 사용자 정보 저장
        HttpSession session = request.getSession();
        session.setAttribute("username", username);

        response.getWriter().println("Logged in successfully");
    }
}

@WebServlet("/protected")
public class ProtectedServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 로그인 여부 확인
        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("username");

        if (username != null) {
            response.getWriter().println("Protected content");
        } else {
            response.sendError(401, "Unauthorized");
        }
    }
}

위 코드는 Java와 Servlet을 사용하여 사용자 인증 및 세션 관리를 구현하는 예시입니다. `/login` 서블릿에서는 사용자 인증을 처리하고, 세션에 사용자 정보를 저장합니다. `/protected` 서블릿에서는 세션을 확인하여 보호된 콘텐츠를 반환하거나 인증되지 않았다는 상태 코드를 전송합니다.


채팅방 생성 및 관리 기능 추가

채팅방을 생성하고 관리하기 위해서는 사용자들이 채팅방에 참여하고 메시지를 주고받을 수 있는 기능이 필요합니다. 아래는 채팅방 생성 및 관리 기능을 추가하는 예시 코드입니다.

채팅방 생성 및 관리 예시 (Node.js)


const express = require('express');
const socket = require('socket.io');

const app = express();
const server = app.listen(3000);
const io = socket(server);

// 채팅방 목록
const chatRooms = {};

// 채팅방 생성 API
app.post('/createChatRoom', function(req, res) {
  const { roomId } = req.body;

  // 채팅방 생성
  chatRooms[roomId] = { id: roomId, participants: [] };

  res.send('Chat room created');
});

// 채팅방 참여 이벤트
io.on('connection', function(socket) {
  socket.on('joinRoom', function(roomId, username) {
    // 채팅방 참여
    socket.join(roomId);
    
    // 채팅방 참여자 목록 업데이트
    chatRooms[roomId].participants.push(username);
    
    // 채팅방 정보 전송
    io.to(roomId).emit('roomInfo', chatRooms[roomId]);
  });

  socket.on('sendMessage', function(roomId, message) {
    // 메시지 전송
    io.to(roomId).emit('newMessage', message);
  });
});

위 코드는 Node.js와 Express 프레임워크, Socket.IO 라이브러리를 사용하여 채팅방 생성 및 관리 기능을 추가하는 예시입니다. `/createChatRoom` API를 통해 채팅방을 생성하고, `joinRoom` 이벤트를 통해 사용자가 채팅방에 참여합니다. `sendMessage` 이벤트를 통해 사용자는 메시지를 전송할 수 있으며, `roomInfo`와 `newMessage` 이벤트를 통해 채팅방 정보와 새로운 메시지를 클라이언트로 전송합니다.

채팅방 생성 및 관리 예시 (Java)


import javax.websocket.*;
import javax.websocket.server.*;
import java.util.*;

@ServerEndpoint("/chat")
public class ChatEndpoint {
    private static Map> chatRooms = new HashMap<>();

    @OnOpen
    public void onOpen(Session session) {

    }

    @OnMessage
    public void onMessage(Session session, String message) {

    }

    @OnClose
    public void onClose(Session session) {

    }

    @OnError
    public void onError(Session session, Throwable throwable) {

    }
}

위 코드는 Java와 `javax.websocket` 패키지를 사용하여 채팅방 생성 및 관리 기능을 추가하는 예시입니다. `@ServerEndpoint` 어노테이션을 사용하여 채팅 엔드포인트를 정의하고, `onOpen`, `onMessage`, `onClose`, `onError` 메서드를 구현하여 연결, 메시지 송수신, 연결 종료, 오류 처리 등을 관리합니다. 실제로 채팅방 생성과 관리를 위한 로직은 메서드들 내부에 추가되어야 합니다.


실시간 채팅 기능 구현

실시간 채팅 기능을 구현하기 위해서는 클라이언트와 서버 간에 실시간으로 데이터를 전송하는 WebSocket을 사용해야 합니다. 아래는 실시간 채팅 기능을 구현하는 예시 코드입니다.

실시간 채팅 기능 구현 예시 (Node.js)


const express = require('express');
const WebSocket = require('ws');

const app = express();
const server = app.listen(3000);

// WebSocket 서버 생성
const wss = new WebSocket.Server({ server });

// 연결된 클라이언트 저장
const clients = new Set();

// WebSocket 연결 이벤트
wss.on('connection', function(ws) {
  // 클라이언트 저장
  clients.add(ws);
  
  // 연결 종료 이벤트
  ws.on('close', function() {
    // 클라이언트 제거
    clients.delete(ws);
  });
  
  // 메시지 수신 이벤트
  ws.on('message', function(message) {
    // 모든 클라이언트에게 메시지 전송
    clients.forEach(function(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

위 코드는 Node.js와 Express 프레임워크, WebSocket 라이브러리를 사용하여 실시간 채팅 기능을 구현하는 예시입니다. `WebSocket.Server`를 생성하고 클라이언트와의 연결, 연결 종료, 메시지 수신 이벤트를 처리합니다. 연결된 클라이언트는 `Set`을 사용하여 저장하고, 받은 메시지를 다른 모든 클라이언트에게 전송합니다.

실시간 채팅 기능 구현 예시 (Java)


import javax.websocket.*;
import javax.websocket.server.*;
import java.io.IOException;
import java.util.*;

@ServerEndpoint("/chat")
public class ChatEndpoint {
    private static Set clients = Collections.synchronizedSet(new HashSet<>());

    @OnOpen
    public void onOpen(Session session) {
        clients.add(session);
    }

    @OnMessage
    public void onMessage(Session session, String message) throws IOException {
        for (Session client : clients) {
            if (client.isOpen()) {
                client.getBasicRemote().sendText(message);
            }
        }
    }

    @OnClose
    public void onClose(Session session) {
        clients.remove(session);
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        throwable.printStackTrace();
    }
}

위 코드는 Java와 `javax.websocket` 패키지를 사용하여 실시간 채팅 기능을 구현하는 예시입니다. `@ServerEndpoint` 어노테이션을 사용하여 채팅 엔드포인트를 정의하고, 클라이언트와의 연결, 연결 종료, 메시지 수신 이벤트를 처리합니다. 연결된 클라이언트는 `HashSet`을 사용하여 저장하고, 받은 메시지를 다른 모든 클라이언트에게 전송합니다.


사용자 목록 표시 기능 구현

사용자 목록을 표시하기 위해서는 서버 측에 사용자 정보를 저장하고, 클라이언트 측에는 사용자 목록을 받아와서 표시하는 기능이 필요합니다. 아래는 사용자 목록 표시 기능을 구현하는 예시 코드입니다.

사용자 목록 표시 기능 구현 예시 (Node.js)


const express = require('express');
const socket = require('socket.io');

const app = express();
const server = app.listen(3000);
const io = socket(server);

// 전역 사용자 목록
const users = {};

// 사용자 접속 이벤트
io.on('connection', function(socket) {
  socket.on('joinRoom', function(roomId, username) {
    // 소켓과 사용자 정보 매칭
    users[socket.id] = { username: username, roomId: roomId };
    
    // 사용자 목록 전송
    io.to(roomId).emit('userList', getUserList(roomId));
  });

  socket.on('disconnect', function() {
    const user = users[socket.id];
    
    if (user) {
      const roomId = user.roomId;
      delete users[socket.id];
      
      // 사용자 목록 전송
      io.to(roomId).emit('userList', getUserList(roomId));
    }
  });
});

// 특정 채팅방의 사용자 목록을 가져오는 함수
function getUserList(roomId) {
  const userList = [];
  for (const id in users) {
    if (users[id].roomId === roomId) {
      userList.push(users[id].username);
    }
  }
  return userList;
}

위 코드는 Node.js와 Express 프레임워크, Socket.IO 라이브러리를 사용하여 사용자 목록 표시 기능을 구현하는 예시입니다. 사용자가 채팅방에 참여하면 해당 소켓과 사용자 정보를 매칭시키고, 소켓 연결이 끊어지면 사용자 정보를 삭제합니다. 사용자 목록은 `getUserList` 함수를 통해 특정 채팅방의 사용자들만 가져올 수 있습니다. 사용자 목록이 업데이트될 때마다 해당 채팅방에 있는 모든 클라이언트에게 `userList` 이벤트를 전송하여 사용자 목록을 업데이트합니다.

사용자 목록 표시 기능 구현 예시 (Java)


import javax.websocket.*;
import javax.websocket.server.*;
import java.util.*;

@ServerEndpoint("/chat")
public class ChatEndpoint {
    private static Map users = new HashMap<>();

    @OnOpen
    public void onOpen(Session session) {

    }

    @OnMessage
    public void onMessage(Session session, String message) {

    }

    @OnClose
    public void onClose(Session session) {
        String username = users.get(session);
        users.remove(session);

        // 사용자 목록 전송
        broadcastUserList(username);
    }

    @OnError
    public void onError(Session session, Throwable throwable) {

    }

    // 사용자 목록 전송 메서드
    private void broadcastUserList(String excludedUser) {
        Set userList = new HashSet<>();
        for (Map.Entry entry : users.entrySet()) {
            String username = entry.getValue();
            if (!username.equals(excludedUser)) {
                userList.add(username);
            }
        }

        // 모든 클라이언트에게 사용자 목록 전송
        for (Session session : users.keySet()) {
            session.getAsyncRemote().sendObject(userList);
        }
    }
}

위 코드는 Java와 `javax.websocket` 패키지를 사용하여 사용자 목록 표시 기능을 구현하는 예시입니다. 클라이언트와의 연결, 연결 종료 시에 사용자 정보를 저장하고 삭제합니다. `broadcastUserList` 메서드를 통해 사용자 목록을 가져온 다음, 연결된 모든 클라이언트에게 사용자 목록을 전송하여 업데이트합니다.


채팅 기록 조회 및 저장 기능 추가

채팅 기록을 조회하고 저장하기 위해서는 채팅 내용을 서버나 데이터베이스에 저장하고, 필요한 경우에 조회 기능을 구현해야 합니다. 아래는 채팅 기록 조회 및 저장 기능을 추가하는 예시 코드입니다.

채팅 기록 조회 및 저장 기능 추가 예시 (Node.js)


const express = require('express');
const socket = require('socket.io');

const app = express();
const server = app.listen(3000);
const io = socket(server);

// 전역 변수
const chatHistory = [];

// 사용자 접속 이벤트
io.on('connection', function(socket) {
  socket.on('joinRoom', function(roomId, username) {
    // 이전 채팅 기록 전송
    socket.emit('chatHistory', getChatHistory(roomId));
    
    // 소켓과 사용자 정보 매칭
    users[socket.id] = { username: username, roomId: roomId };
  });

  socket.on('sendMessage', function(roomId, message) {
    // 채팅 기록 저장
    chatHistory.push({ roomId: roomId, message: message });
    
    // 채팅 메시지 전송
    io.to(roomId).emit('message', message);
  });
});

// 특정 채팅방의 기록을 가져오는 함수
function getChatHistory(roomId) {
  return chatHistory.filter(chat => chat.roomId === roomId);
}

위 코드는 Node.js와 Express 프레임워크, Socket.IO 라이브러리를 사용하여 채팅 기록 조회 및 저장 기능을 추가하는 예시입니다. 채팅방에 처음 접속할 때 이전 채팅 기록을 전송하고, `sendMessage` 이벤트가 발생할 때 채팅 기록을 저장합니다. `getChatHistory` 함수를 통해 특정 채팅방의 채팅 기록을 가져올 수 있습니다. `chatHistory` 배열에 기록된 채팅은 메모리에 저장되므로, 필요에 따라 데이터베이스에 저장하도록 수정할 수 있습니다.

채팅 기록 조회 및 저장 기능 추가 예시 (Java)


import javax.websocket.*;
import javax.websocket.server.*;
import java.util.*;

@ServerEndpoint("/chat")
public class ChatEndpoint {
    private static Map users = new HashMap<>();
    private static List chatHistory = new ArrayList<>();

    @OnOpen
    public void onOpen(Session session) {
        session.getAsyncRemote().sendText(String.join("\n", chatHistory));
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        String username = users.get(session);

        // 채팅 기록 저장
        chatHistory.add(username + ": " + message);

        // 모든 클라이언트에게 채팅이 전송됨을 알림
        broadcastMessage(username + ": " + message);
    }

    @OnClose
    public void onClose(Session session) {
        String username = users.get(session);
        users.remove(session);

        // 모든 클라이언트에게 사용자 목록 전송
        broadcastUserList(username);
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        throwable.printStackTrace();
    }

    // 모든 클라이언트에게 채팅 메시지 전송
    private void broadcastMessage(String message) {
        for (Session session : users.keySet()) {
            session.getAsyncRemote().sendText(message);
        }
    }

    // 모든 클라이언트에게 사용자 목록 전송
    private void broadcastUserList(String excludedUser) {
        Set userList = new HashSet<>();
        for (Map.Entry entry : users.entrySet()) {
            String username = entry.getValue();
            if (!username.equals(excludedUser)) {
                userList.add(username);
            }
        }

        // 모든 클라이언트에게 사용자 목록 전송
        for (Session session : users.keySet()) {
            session.getAsyncRemote().sendObject(userList);
        }
    }
}

위 코드는 Java와 `javax.websocket` 패키지를 사용하여 채팅 기록 조회 및 저장 기능을 추가하는 예시입니다. 클라이언트와의 연결이 맺어질 때 이전 채팅 기록을 전송하고, `onMessage` 메서드에서 채팅 기록을 저장합니다. 저장된 채팅은 `List`를 사용하여 메모리에 저장되므로, 필요에 따라 데이터베이스에 저장하도록 수정할 수 있습니다.


UI/UX 개선 및 추가 기능 구현

UI/UX를 개선하고 사용성을 향상시키기 위해서는 다양한 방법을 고려해야 합니다. 대표적인 방법으로는 사용자 인터페이스 디자인 개선, 애니메이션 및 효과 추가, 반응형 디자인 적용, 키보드 단축키 지원 등이 있습니다. 또한, 필요한 추가 기능을 구현하여 사용자들에게 다양한 기능을 제공할 수 있습니다. 아래는 UI/UX 개선 및 추가 기능 구현에 관한 예시입니다.

UI/UX 개선 및 추가 기능 구현 예시 (HTML/CSS/JavaScript)


<!-- HTML -->
<div id="chatContainer">
  <div id="chatContent"></div>
  <div id="userList"></div>
  <input id="messageInput" type="text" placeholder="메시지 입력...">
</div>

<!-- CSS -->
<style>
#chatContainer {
  display: flex;
  flex-direction: column;
  height: 400px;
  max-width: 600px;
  border: 1px solid #ccc;
  padding: 10px;
}

#chatContent {
  flex: 1;
  overflow-y: scroll;
  background-color: #f5f5f5;
  padding: 10px;
}

#userList {
  margin-top: 10px;
  padding: 10px;
  background-color: #f5f5f5;
}

#messageInput {
  margin-top: 10px;
  padding: 5px;
  width: 100%;
}
</style>

<!-- JavaScript -->
<script>
const chatContent = document.getElementById('chatContent');
const userList = document.getElementById('userList');
const messageInput = document.getElementById('messageInput');

// 메시지 전송 이벤트 핸들러
messageInput.addEventListener('keydown', function(event) {
  if (event.key === 'Enter' && messageInput.value.trim() !== '') {
    const message = messageInput.value;
    // 메시지 전송 로직 추가
    
    messageInput.value = '';
  }
});

// 메시지 출력 함수
function displayMessage(message) {
  const messageElement = document.createElement('div');
  messageElement.textContent = message;
  chatContent.appendChild(messageElement);
}

// 사용자 목록 출력 함수
function displayUserList(users) {
  userList.innerHTML = '';
  users.forEach(function(user) {
    const userElement = document.createElement('div');
    userElement.textContent = user;
    userList.appendChild(userElement);
  });
}
</script>

위 코드는 HTML, CSS, JavaScript를 사용하여 UI/UX 개선 및 추가 기능을 구현하는 예시입니다. HTML과 CSS를 조합하여 간단한 채팅창을 구성하고, JavaScript를 통해 메시지 전송 및 출력, 사용자 목록 출력 기능을 추가합니다. 메시지를 입력하고 Enter 키를 누르면 메시지가 전송되고, 전송된 메시지는 화면에 출력됩니다. 사용자 목록은 배열 형태로 받아와서 동적으로 출력합니다.

UI/UX 개선 및 추가 기능 구현 예시 (React)


import React, { useState } from 'react';

function ChatApp() {
const [messages, setMessages] = useState([]);
const [userList, setUserList] = useState([]);
const [inputValue, setInputValue] = useState('');

// 메시지 전송 이벤트 핸들러
const handleSendMessage = () => {
if (inputValue.trim() !== '') {
const message = inputValue;
// 메시지 전송 로직 추가

setInputValue('');
}
};

// 메시지 출력 함수
const displayMessage = (message) => {
setMessages([...messages, message]);
};

// 사용자 목록 출력 함수
const displayUserList = (users) => {
setUserList(users);
};

return (

{messages.map((message, index) => (

{message}

))}

{userList.map((user, index) => (

{user}

))}

<

Leave a Comment