-
νλ‘μ νΈ κ°λ° νκ²½
- Server : back-end κ°λ°μ μνμ¬ node.js + socket.io λ₯Ό μ¬μ©νμμΌλ©°, unit testλ₯Ό μνμ¬ mocha λ₯Ό μ¬μ©νμμ΅λλ€.
- client : font-end κ°λ°μ μνμ¬ react + redux λ₯Ό μ¬μ©νμμΌλ©°, UI testλ₯Ό μνμ¬ storybook μ μ¬μ©νμμ΅λλ€.
-
νλ‘μ νΈ μ€ν νκ²½
λ¨Όμ νλ‘μ νΈ μ€νμ μν΄μλ λ€μ νλͺ©μ΄ μ€μΉλμ΄μΌ ν©λλ€.
- node.js : https://nodejs.org/ko/
- yarn : https://yarnpkg.com/en/
μ νλͺ©λ€ μ€μΉν μλ github μ£Όμμμ μμ€λ₯Ό λ€μ΄ λ°μ΅λλ€. (zip νμΌμ μ§μ λ°μλ λλ©°, git λꡬλ₯Ό μ΄μ©νμ¬ cloneμ νμ¬λ λ©λλ€.)
μμ€λ₯Ό 보면 λ€μκ³Ό κ°μ΄ 2κ°μ ν΄λκ° μλ κ²μ νμΈ ν μ μμ΅λλ€.
- chat_server
- chat_client
μ΄μ ν°λ―Έλμ μ΄μ΄μ chat_server, chat_client λλ ν λ¦¬λ‘ μ΄λμ ν©λλ€. ν΄λΉ μμΉμ package.json νμΌμ΄ μλ κ²μ νμΈ ν, λ€μκ³Ό κ°μ΄ yarn λͺ λ Ήμ΄λ₯Ό μ€ν ν©λλ€.
- yarn install
- 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μ μ λ ₯νκ³ μ μ₯ν μ¬λμΈμ§ 체ν¬λ₯Ό νμ¬, μ μ₯ν μ¬λμ΄ μλ κ²½μ°μλ μμΈμ²λ¦¬λ₯Ό νλλ‘ νμμ΅λλ€.
- enter user (usernameμ μ
λ ₯νμ¬ μ±ν
μλΉμ€λ₯Ό μμ)
-
μΈλΆ ꡬν μ¬ν [ν΄λΌμ΄μΈνΈ]
ν΄λΌμ΄μΈνΈμ κ²½μ° μ΄ 3κ°μ νλ©΄(μ±ν μλΉμ€ λ‘κ·ΈμΈ νλ©΄, μ±ν λ°© 리μ€νΈ νλ©΄, μ±ν λ°© νλ©΄)μΌλ‘ κ΅¬μ± νμμΌλ©°, μλ² ν΅μ μΌλ‘ λ°κ² λλ μ 보λ€μ reduxλ₯Ό μ΄μ©νμ¬ μ μ₯μ νκ³ κ° μ»΄ν¬λνΈμμ μ½μ΄μ€λ ννλ‘ κ΅¬ν νμμ΅λλ€.
μλ²μμ μμΈμ²λ¦¬ messageλ₯Ό λ°μΌλ©΄ 'μ±ν μλΉμ€ λ‘κ·ΈμΈ νλ©΄'μΌλ‘ μ΄λνλλ‘ κ΅¬ν νμμ΅λλ€.
μΆκ°λ‘ λ€μκ³Ό κ°μ μ μ½ μ‘°κ±΄μ ꡬννμμ΅λλ€.
- usernameμ κ²½μ° μ΅λ 10μ κΉμ§ μ¬μ© κ°λ₯
- μ±ν λ©μΈμ§λ μ΅λ 200μκΉμ§ μ μ‘ κ°λ₯
- μ±ν μ΄λ―Έμ§λ μ΅λ 2M ν¬κΈ°μ μ΄λ―Έμ§κΉμ§ μ μ‘ κ°λ₯
- λλ€μ μ λ ₯μ λν μΈμ μ ν΄λΉ νμ΄μ§λ₯Ό 리νλ μ νμ§ μλ μνμμλ§ μ μ§
ν΄λΌμ΄μΈνΈμμ μ¬μ©νλ url μ£Όμλ λ€μ 3κ°μ§ μ λλ€.
(κ·Έ μΈμ μ£Όμλ₯Ό μ λ ₯νλ©΄ 'NoMatch' νλ©΄μ΄ μ€νλλλ‘ νμμ΅λλ€.)
-
Unit Test μ€ν
unit test μ€νμ μν΄μλ ν°λ―Έλμμ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ mochaλ₯Ό globalλ‘ μ€μΉν΄μΌ ν©λλ€.
- yarn global add mocha
κ·Έ λ€μμ ν°λ―Έλμ 2κ° μ€ννμ¬ chat_server λλ ν λ¦¬λ‘ μ΄λνμ¬ λ€μ λͺ λ Ήμ΄λ₯Ό κ° ν°λ―Έλμ μμλλ‘ μ€ννλ©΄ λ©λλ€.
- yarn start
- 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 κ°μ ν μ€νΈ μ©μΌλ‘ λ³κ²½νμ¬ νμΈνλ©΄μ μμ νμμ΅λλ€.
logan-dev-notes/chat_example
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Β | Β | |||
Β | Β | |||
Β | Β | |||
Β | Β | |||