์™ธ๋กœ์šด 1์ธ ์ฑ„ํŒ… . . . ๐Ÿฅฒ

๊นƒํ—ˆ๋ธŒ ์ฝ”๋“œ๋ณด๊ธฐ
์œ„ ๋งํฌ์—์„œ ์ฝ”๋“œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜€


์ž‘์—…๊ณ„๊ธฐ

noSQL ์„ ์ ‘ํ•ด๋ณผ ๊ธฐํšŒ๊ฐ€ ์—†์–ด ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์จ๋ณผ ์ˆ˜ ์žˆ์„๊นŒโ€ฆ ๊ณ ๋ฏผํ•˜๋˜ ๋์— ์ฑ„ํŒ…์ด ๋– ์˜ฌ๋ž๋‹ค. ์ตœ๊ทผ์— ์ž๋ฐ”๋กœ ์‚ฌ์ดํŠธ ํ•˜๋‚˜ ๊ตฌํ˜„ํ–ˆ์œผ๋‹ˆ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๋ฆฌ์•กํŠธ๋กœ ์ž‘์—… ํ•˜์˜€๋‹ค. ๋ฆฌ์•กํŠธ์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜์ธ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๊ด€๋ฆฌ์—๋„ ์‹ ๊ฒฝ์„ ์“ฐ๋ฉฐ ์ž‘์—…ํ–ˆ๋‹ค โ€ผ๏ธ ์„œ๋ฒ„๋Š” node.js ๊ธฐ๋ฐ˜ express ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ SQL ์ž‘์—…ํ•˜๋ฉด์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ๋ฐ”๋€” ์ˆ˜๋„ ์žˆ๋‹ค. ๐Ÿ˜ฎ


ํ™˜๊ฒฝ ๊ตฌ์„ฑ

  • Front:
    1. React.js
  • Server:
    1. Node.js
    2. express
    3. socket.io

โญ๏ธ ์ฒดํฌ ํฌ์ธํŠธ โญ๏ธ

const socket = io.connect("http://localhost:4000");

/src/ChatContext.js
์ปค๋„ฅ์…˜ ์ƒ์ˆ˜๋Š” ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ๊ด€๋ฆฌ ์ฝ”๋“œ ์ชฝ์— ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

useEffect(() => {
        socket.on("receive chat", (message) => {
            setChatList((chatList) => chatList.concat(message));
            dispatch({
                type: "CHANGE_NAME",
                name: message.name
            });
        });
    }, []);

ChatContext.js
์ฑ„ํŒ… ์ž…๋ ฅ ํ›„ ์ดˆ๊ธฐํ™” ๋˜๋Š” name ๊ฐ’์„ ์ฝœ๋ฐฑ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์‹œ ์ฑ„์›Œ์ฃผ์—ˆ๋‹ค.

function ChatContentBox(){

    const messageBoxRef = useRef();
    const chatList = useChatList();
    
    const scrollToBottom = () => {
        if (messageBoxRef.current) {
          messageBoxRef.current.scrollTop = messageBoxRef.current.scrollHeight;
        }
      };

      useEffect(() => {
        scrollToBottom();
      }, [chatList]);

    return(
        <div className="chat-wrap">
            <div className="container">
                <div className="chat-content-box" ref={messageBoxRef}>
                    { chatList.map((el, index) => (
                        <div className="chat" key={index}>
                            <div className="chat-name">{el.name}</div>
                            <div className="chat-message">{el.message}</div>
                        </div>
                    ))
                    }
                </div>
            </div>
        </div>
    )
}

/src/Components/ChatContentBox.js
์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ ๋งˆ๋‹ค ์Šคํฌ๋กค์ด ๋งจ ์•„๋ž˜์— ์œ„์น˜ํ•˜๊ธฐ ์œ„ํ•ด useRef ๋กœ DOM์„ ์ปจํŠธ๋กค ํ•˜์˜€๋‹ค.