Skip to content

logan-dev-notes/chat_example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

  • ν”„λ‘œμ νŠΈ 개발 ν™˜κ²½

    • Server : back-end κ°œλ°œμ„ μœ„ν•˜μ—¬ node.js + socket.io λ₯Ό μ‚¬μš©ν•˜μ˜€μœΌλ©°, unit testλ₯Ό μœ„ν•˜μ—¬ mocha λ₯Ό μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    • client : font-end κ°œλ°œμ„ μœ„ν•˜μ—¬ react + redux λ₯Ό μ‚¬μš©ν•˜μ˜€μœΌλ©°, UI testλ₯Ό μœ„ν•˜μ—¬ storybook 을 μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œμ νŠΈ μ‹€ν–‰ ν™˜κ²½

    λ¨Όμ € ν”„λ‘œμ νŠΈ 싀행을 μœ„ν•΄μ„œλŠ” λ‹€μŒ ν•­λͺ©μ΄ μ„€μΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

    1. node.js : https://nodejs.org/ko/
    2. yarn : https://yarnpkg.com/en/

    μœ„ ν•­λͺ©λ“€ μ„€μΉ˜ν›„ μ•„λž˜ github μ£Όμ†Œμ—μ„œ μ†ŒμŠ€λ₯Ό λ‹€μš΄ λ°›μŠ΅λ‹ˆλ‹€. (zip νŒŒμΌμ„ 직접 받아도 되며, git 도ꡬλ₯Ό μ΄μš©ν•˜μ—¬ clone을 ν•˜μ—¬λ„ λ©λ‹ˆλ‹€.)

    μ†ŒμŠ€λ₯Ό 보면 λ‹€μŒκ³Ό 같이 2개의 폴더가 μžˆλŠ” 것을 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • chat_server
    • chat_client

    이제 터미널을 μ—΄μ–΄μ„œ chat_server, chat_client λ””λ ‰ν† λ¦¬λ‘œ 이동을 ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μœ„μΉ˜μ— package.json 파일이 μžˆλŠ” 것을 확인 ν›„, λ‹€μŒκ³Ό 같이 yarn λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ ν•©λ‹ˆλ‹€.

    1. yarn install
    2. yarn start

    (chat_serverλ₯Ό λ¨Όμ € μ‹€ν–‰ ν›„, chat_clientλ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.)

    chat_client μ—μ„œ 'yarn start' λͺ…령을 μ‹€ν–‰ν•˜λ©΄ κΈ°λ³Έ λΈŒλΌμš°μ Έμ—μ„œ [http://localhost:3000/] μ‚¬μ΄νŠΈκ°€ μ‹€ν–‰ λ©λ‹ˆλ‹€.

    • μ£Όμ˜μ‚¬ν•­ : μ„œλ²„κ°€ 4001 포트, ν΄λΌμ΄μ–ΈνŠΈκ°€ 3000 포트λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμœΌλ‹ˆ ν•΄λ‹Ή 포트λ₯Ό μ‚¬μš©ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μžˆλŠ” 경우 쀑지 ν›„ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ„ΈλΆ€ κ΅¬ν˜„ 사항 [μ„œλ²„]

    μ„œλ²„μ˜ 경우 websocket을 ν†΅ν•˜μ—¬ μ •ν•΄μ§„ messageλ₯Ό λ°›μ•„μ„œ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„μ„ ν•˜μ˜€μœΌλ©°, μ•„λž˜μ™€ 같은 messageλ₯Ό μ •μ˜ν•˜μ—¬ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    • enter user (username을 μž…λ ₯ν•˜μ—¬ μ±„νŒ…μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘)
      • response : room list [to : request socket] (μž…μž₯ν•œ μ‚¬μš©μžμ—κ²Œ ν˜„μž¬ μ„œλ²„μ—μ„œ μ œκ³΅ν•˜λŠ” μ±„νŒ…λ°©μ˜ 리슀트λ₯Ό 전달)
    • join room (μ‚¬μš©μžκ°€ νŠΉμ • μ±„νŒ…λ°©μ— λ“€μ–΄κ°€λŠ” κΈ°λŠ₯)
      • response : announce about join msg [to : broadcast in room] (μ±„νŒ…λ°©μ— μžˆλŠ” μ‚¬μš©μžλ“€μ—κ²Œ λ“€μ–΄μ˜€λŠ” μ‚¬μš©μžκ°€ μžˆλ‹€λŠ” 곡지λ₯Ό 전달)
    • leave room (μ‚¬μš©μžκ°€ νŠΉμ • μ±„νŒ…λ°©μ—μ„œ λ‚˜κ°€λŠ” κΈ°λŠ₯)
      • response : announce leave join msg [to : broadcast in room] (μ±„νŒ…λ°©μ— μžˆλŠ” μ‚¬μš©μžλ“€μ—κ²Œ λ‚˜κ°€λŠ” μ‚¬μš©μžκ°€ μžˆλ‹€λŠ” 곡지λ₯Ό 전달)
    • message (μ±„νŒ… λ©”μ„Έμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” κΈ°λŠ₯)
      • response : send message [to : broadcast in room] (μ±„νŒ…λ°©μ— μžˆλŠ” μ‚¬μš©μžλ“€μ—κ²Œ μ±„νŒ… λ©”μ„Έμ§€λ₯Ό 전달)
    • image (μ±„νŒ… 이미지λ₯Ό μ „λ‹¬ν•˜λŠ” κΈ°λŠ₯)
      • response : send image [to : broadcast in room] (μ±„νŒ…λ°©μ— μžˆλŠ” μ‚¬μš©μžλ“€μ—κ²Œ μ±„νŒ… 이미지λ₯Ό 전달)
    • request userlist (μ΄ˆλŒ€ κ°€λŠ₯ν•œ μ‚¬μš©μž λͺ©λ‘μ„ μš”μ²­ν•˜λŠ” κΈ°λŠ₯ - μ±„νŒ…μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘ν•˜μ˜€μœΌλ‚˜ 같은 방에 μžˆμ§€ μ•Šμ€ μ‚¬μš©μž)
      • response : user list [to : request socket] (μš”μ²­ν•œ μ‚¬μš©μžμ—κ²Œ μ΄ˆλŒ€ κ°€λŠ₯자 λͺ©λ‘μ„ 전달)
    • invite user (νŠΉμ • μ‚¬μš©μžλ₯Ό μ±„νŒ…λ°© μ΄ˆλŒ€ν•˜λŠ” κΈ°λŠ₯)
      • response : send invite event [to : inviting socket] (νŠΉμ • μ‚¬μš©μžμ—κ²Œ μ΄ˆλŒ€ λ©”μ„Έμ§€λ₯Ό 전달)
    • accept invite (μ΄ˆλŒ€λœ μ±„νŒ…λ°©μ— λ“€μ–΄κ°€λŠ” κΈ°λŠ₯)
      • response : announce leave join msg [to : broadcast in room] (λ‚˜κ°€λŠ” μ±„νŒ…λ°©μ— μžˆλŠ” μ‚¬μš©μžλ“€μ—κ²Œ 곡지 전달)
      • response : announce about join msg [to : broadcast in room] (λ“€μ–΄κ°€λŠ” μ±„νŒ…λ°©μ— μžˆλŠ” μ‚¬μš©μžλ“€μ—κ²Œ 곡지 전달)

    ν•΄λ‹Ή κΈ°λŠ₯λ“€μ˜ 경우 messageλ₯Ό μš”μ²­ν•œ μ‚¬μš©μžκ°€ μ‹€μ œ username을 μž…λ ₯ν•˜κ³  μž…μž₯ν•œ μ‚¬λžŒμΈμ§€ 체크λ₯Ό ν•˜μ—¬, μž…μž₯ν•œ μ‚¬λžŒμ΄ μ•„λ‹Œ κ²½μš°μ—λŠ” μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • μ„ΈλΆ€ κ΅¬ν˜„ 사항 [ν΄λΌμ΄μ–ΈνŠΈ]

    ν΄λΌμ΄μ–ΈνŠΈμ˜ 경우 총 3개의 ν™”λ©΄(μ±„νŒ… μ„œλΉ„μŠ€ 둜그인 ν™”λ©΄, μ±„νŒ…λ°© 리슀트 ν™”λ©΄, μ±„νŒ…λ°© ν™”λ©΄)으둜 ꡬ성 ν•˜μ˜€μœΌλ©°, μ„œλ²„ ν†΅μ‹ μœΌλ‘œ λ°›κ²Œ λ˜λŠ” 정보듀은 reduxλ₯Ό μ΄μš©ν•˜μ—¬ μ €μž₯을 ν•˜κ³  각 μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ½μ–΄μ˜€λŠ” ν˜•νƒœλ‘œ κ΅¬ν˜„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    μ„œλ²„μ—μ„œ μ˜ˆμ™Έμ²˜λ¦¬ messageλ₯Ό λ°›μœΌλ©΄ 'μ±„νŒ… μ„œλΉ„μŠ€ 둜그인 ν™”λ©΄'으둜 μ΄λ™ν•˜λ„λ‘ κ΅¬ν˜„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    μΆ”κ°€λ‘œ λ‹€μŒκ³Ό 같은 μ œμ•½ 쑰건을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    1. username의 경우 μ΅œλŒ€ 10자 κΉŒμ§€ μ‚¬μš© κ°€λŠ₯
    2. μ±„νŒ… λ©”μ„Έμ§€λŠ” μ΅œλŒ€ 200μžκΉŒμ§€ 전솑 κ°€λŠ₯
    3. μ±„νŒ… μ΄λ―Έμ§€λŠ” μ΅œλŒ€ 2M 크기의 μ΄λ―Έμ§€κΉŒμ§€ 전솑 κ°€λŠ₯
    4. λ‹‰λ„€μž„ μž…λ ₯에 λŒ€ν•œ μ„Έμ…˜μ€ ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό λ¦¬ν”„λ ˆμ‹œ ν•˜μ§€ μ•ŠλŠ” μƒνƒœμ—μ„œλ§Œ μœ μ§€

    ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” url μ£Όμ†ŒλŠ” λ‹€μŒ 3κ°€μ§€ μž…λ‹ˆλ‹€.

    (κ·Έ μ™Έμ˜ μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜λ©΄ 'NoMatch' 화면이 μ‹€ν–‰λ˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.)

  • Unit Test μ‹€ν–‰

    unit test 싀행을 μœ„ν•΄μ„œλŠ” ν„°λ―Έλ„μ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ mochaλ₯Ό global둜 μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    • yarn global add mocha

    κ·Έ λ‹€μŒμ— 터미널을 2개 μ‹€ν–‰ν•˜μ—¬ chat_server λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό 각 터미널에 μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

    1. yarn start
    2. yarn test

    Unit Test의 경우 μ•žμ—μ„œ μ„€λͺ…ν•œ μ„œλ²„μ˜ message μ •μ˜ κ΅¬ν˜„ λ³„λ‘œ test case μž‘μ„±ν•˜μ—¬ κ°„λ‹¨ν•œ κ²°κ³Ό ν™•μΈλ§Œ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    (μ„œλ²„ μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” κ²½μš°μ—λŠ” chat_clientλŠ” μ‹€ν–‰ν•˜μ§€ μ•Šμ€ μƒνƒœλ‘œ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.)

  • UI Test μ‹€ν–‰

    storybook κ΄€λ ¨ λͺ¨λ“ˆμ€ μœ„μ˜ chat_client μ—μ„œ 'yarn install' λͺ…λ Ήμ–΄λ‘œ 같이 μ„€μΉ˜κ°€ λ©λ‹ˆλ‹€. λ”°λΌμ„œ chat_client λ””λ ‰ν† λ¦¬μ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ ν›„ [http://localhost:9001/] 에 μ ‘μ†ν•˜μ—¬ κ΄€λ ¨ 화면을 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • yarn storybook

    UI Test의 경우 ν•΄λ‹Ή UI μ»΄ν¬λ„ŒνŠΈμ˜ κΈ°λ³Έ λ ˆμ΄μ•„μ›ƒ κ°œλ°œμ„ μœ„ν•˜μ—¬ μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    reduxλ₯Ό μ‚¬μš©ν•˜μ˜€κΈ° λ•Œλ¬Έμ—, 데이터가 μ—†μ–΄μ„œ 보이지 μ•ŠλŠ” κ²½μš°λŠ” src/reducer/index.js νŒŒμΌμ—μ„œ default 값을 ν…ŒμŠ€νŠΈ 용으둜 λ³€κ²½ν•˜μ—¬ ν™•μΈν•˜λ©΄μ„œ μž‘μ—…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors