Post

๐ŸŽฑ ๊นƒํ—ˆ๋ธŒ ๋ธŒ๋žœ์น˜ ์ „๋žต์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

๐ŸŽฑ ๊นƒํ—ˆ๋ธŒ ๋ธŒ๋žœ์น˜ ์ „๋žต์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

๐Ÿ–ค Intro

์ด๋ฒˆ์— 2์ฐจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, 1์ฐจ ํ”„๋กœ์ ํŠธ๋•Œ ์Šค์Šค๋กœ ์•„์‰ฌ์› ๋˜ ๋ถ€๋ถ„์„ ๋ฉ”๊ฟ”๋ณด๊ณ ์ž ์—ฌ๋Ÿฌ ๋ฐฉ์•ˆ์„ ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.

์•„์‰ฌ์› ๋˜ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š”, ๋‚ด ์ด๋ฆ„์„ ๋”ด ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ์ž‘์—…ํ•˜๋‹ค๋ณด๋‹ˆ ๋จผ์ € ์™„์„ฑ๋œ ์ž‘์€ ๊ธฐ๋Šฅ๋ณ„๋กœ pr์„ ์˜ฌ๋ ค์„œ ํ†ตํ•ฉํ•  ์ˆ˜ ์—†์—ˆ๋˜๊ฒƒ!

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ์ข€ ๋” ๊นƒํ—ˆ๋ธŒ ์ „๋žต์„ ์„ธ๋ถ€์ ์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ธฐ๋กœํ–ˆ๋‹ค.

์ด๋ฏธ BE, ML์€ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ, FE ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊นƒํ—ˆ๋ธŒ ์ „๋žต์„ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ณ ์ž ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด์ž.

๐Ÿฉถ Start

Forkโ€ฆUpstreamโ€ฆ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐโ€ฆ

์ด๋ฒˆ์— ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ „๋žต์€, ์šฐ๋ฆฌ ๋ ˆํฌ๋ฅผ forkํ•ด์˜จ ๋‹ค์Œ์—, fork ๋ ˆํฌ๋ฅผ origin์œผ๋กœ ๋‘๊ณ  ์šฐ๋ฆฌ ์›๋ณธ ๋ ˆํฌ๋ฅผ upstream์œผ๋กœ ๋‘ฌ์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ „๋žต์ด๋‹ค

์ด์ „ ํ”„๋กœ์ ํŠธ๋•Œ๋Š” ๊ทธ๋ƒฅ ์›๋ณธ ๋ ˆํฌ ํ•˜๋‚˜๋งŒ ๋‘๊ณ  ์ž‘์—…ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์— ์ด ๋ฐฉ์‹์„ ํƒํ•˜๊ฒŒ ๋œ ๊ฒฐ์ •์  ์ด์œ ์ค‘ ํ•˜๋‚˜๋Š” ์šฐ๋ฆฌ ํŒ€์›๋“ค ์ค‘ ๋‚˜๋งŒ ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ ์ „๋žต์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ธฐ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‚˜ ํ˜ผ์ž ๋ธŒ๋žœ์น˜ ๋ช…์ด ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํŒ€์›๋“ค์ด ๋ธŒ๋žœ์น˜ ๋•ก๊ฒจ์™”์„๋•Œ ํ—ท๊ฐˆ๋ฆด ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๊ธฐ์—โ€ฆ๊ธฐ๋Šฅ๋ณ„ ์„ธ๋ถ€ ๋ธŒ๋žœ์น˜๋ช…์„ ๋‚ด fork์—๋งŒ ๋‘๊ณ , ๊ณตํ†ต ๊ทœ์น™์ธ ์šฐ๋ฆฌ โ€œ์ด๋ฆ„โ€ ๋ธŒ๋žœ์น˜๋งŒ ์›๋ณธ ๋ ˆํฌ์— ๋‚จ๊ฒจ๋‘๊ธฐ๋กœ ํ•œ ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ ์™ธ์—๋„ ์ด fork-upstream ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ๋‹ค.

1. ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ์ธก๋ฉด

  • ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ PR์„ ํ†ตํ•ด์„œ๋งŒ ์›๋ณธ์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๊ฐ•์ œ ๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.
  • ์ง์ ‘ ํ‘ธ์‹œ๋กœ ์ธํ•œ ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋˜ํ•œ, ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ๋ฐฉ์‹์„ ๋ฏธ๋ฆฌ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค.

2. ๊ฐœ์ธ ์ž‘์—… ๋ฐฑ์—… ๊ฐ€๋Šฅ

  • ํŠนํžˆ fork๋ณธ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›๋ณธ ๋ ˆํฌ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๋ฐฑ์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋˜ํ•œ, ๋ฉ€ํ‹ฐ ๋ ˆํฌ ๊ด€๋ฆฌ ๊ฒฝํ—˜์ด ์ƒ๊ฒจ ๋‚˜์ค‘์— MSA์‹œ ์œ ์šฉํ•˜๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ์€ ์–ด๋–ค ์‹์œผ๋กœ ํ•˜๋Š”๋ฐ?

์ฒ˜์Œ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜๋ฉด์„œ, ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ์„ ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

์ฒ˜์Œ ์‹œ๋„ํ–ˆ๋˜ BE, ML ๋ ˆํฌ์—์„œ๋Š” ์ด๊ฑธ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ–ˆ์—ˆ๋Š”๋ฐโ€ฆ FE๋ ˆํฌ์—์„œ๋Š” ์ œ๋Œ€๋กœ ์žก๊ณ  ๋“ค์–ด๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค.

โค๏ธโ€๐Ÿ”ฅ ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ์€ ๋ณดํ†ต โ€œpr ๊ทœ์น™/๊ฐœ๋ฐœ์ค‘์ธ ๊ธฐ๋Šฅโ€ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•œ๋‹ค.

๋‚˜๋Š” ์ฒ˜์Œ์— ๋‚ด ๊ฐœ์ธ ์ด๋ฆ„ ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐํ•œ๊ฑฐ๋‹ˆ๊นŒ ์ด๋ฆ„์„ ๋„ฃ์–ด์•ผ ํ•˜๋‚˜? ์‹ถ์—ˆ๋Š”๋ฐ, ์–ด์ฐจํ”ผ ์šฐ๋ฆฌ ํŒ€ ๋ธŒ๋žœ์น˜ ๊ทœ์น™์ƒ ์›๋ณธ ์ด๋ฆ„ ๋ธŒ๋žœ์น˜ > ๋‹ค์Œ์ด ๊ฐ๊ฐ ํŒ€ ๋ธŒ๋žœ์น˜ ์ด๊ธฐ๋„ ํ•˜๊ณ , ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์–ด์ฐจํ”ผ ์›๋ณธ ์ด๋ฆ„ ๋ธŒ๋žœ์น˜ ์•„๋ž˜์—์„œ ๋ถ„๊ธฐํ•œ๊ฑฐ๋ผ๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ์ด๋ฆ„์„ ๋„ฃ์„ ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— ๋‚ด๊ฐ€ FE ๋ ˆํฌ์—์„œ ๊ฐ€์ ธ๊ฐˆ ๋ธŒ๋žœ์น˜ ๋ฆฌ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
1. feat/chat-ui
   โ†’ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ, ์ฑ„ํŒ…์ฐฝ ํ‹€
2. feat/message-component  
   โ†’ ๋ฉ”์‹œ์ง€ ๋งํ’์„ , ์‚ฌ์šฉ์ž/๋ด‡ ๊ตฌ๋ถ„
3. feat/input-handler
   โ†’ ํ…์ŠคํŠธ ์ž…๋ ฅ, ์ „์†ก ๊ธฐ๋Šฅ
4. feat/api-integration
   โ†’ ๋ฐฑ์—”๋“œ API ์—ฐ๋™
5. feat/chat-history
   โ†’ ์ด์ „ ๋Œ€ํ™” ๋กœ๋“œ, ์Šคํฌ๋กค ๊ด€๋ฆฌ
6. feat/typing-indicator
   โ†’ ํƒ€์ดํ•‘ ์ค‘ ํ‘œ์‹œ, UX ๊ฐœ์„ 

์ด๋ฅผ ํ”Œ๋กœ์šฐ๋กœ ๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

image.png

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋งž์ถ”๊ธฐ

1. GitHub์—์„œ ์›๋ณธ ๋ ˆํฌ๋ฅผ Fork > Forkํ•œ ๋ ˆํฌ๋ฅผ ๋กœ์ปฌ์— ํด๋ก 

1
2
3
4
5
6
7
8
9
sspur@sunj-PC MINGW64 /c/developer/GitHub
$ git clone https://github.com/sunJ0120/OhgoodpayFE.git
Cloning into 'OhgoodpayFE'...
remote: Enumerating objects: 809, done.
remote: Counting objects: 100% (131/131), done.
remote: Compressing objects: 100% (103/103), done.
remote: Total 809 (delta 30), reused 78 (delta 16), pack-reused 678 (from 1)
Receiving objects: 100% (809/809), 7.21 MiB | 9.51 MiB/s, done.
Resolving deltas: 100% (386/386), done.

2. upstream์œผ๋กœ ์›๋ณธ ๋ ˆํฌ๋ฅผ ๋“ฑ๋ก

1
2
3
4
5
6
7
8
9
10
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhGoodpayFE (main)
$ git remote add upstream https://github.com/OhGoodTeam/OhgoodpayFE.git

sspur@sunj-PC MINGW64 /c/developer/GitHub/OhGoodpayFE (main)
$ git remote -v
origin  https://github.com/sunJ0120/OhgoodpayFE.git (fetch)
origin  https://github.com/sunJ0120/OhgoodpayFE.git (push)
upstream        https://github.com/OhGoodTeam/OhgoodpayFE.git (fetch)
upstream        https://github.com/OhGoodTeam/OhgoodpayFE.git (push)

3. ์ดˆ๊ธฐ ๋ธŒ๋žœ์น˜ ๋“ฑ๋ก

1
2
3
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhGoodpayFE (sunjung)
$ git branch -d feat/sunjung/chat-ui
Deleted branch feat/sunjung/chat-ui (was b4c54c3).

๋‚˜์˜ ๊ฒฝ์šฐ๋Š”, chat-ui๋ฅผ ์งœ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ๊ณ„ํš์ด๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhgoodpayFE (feat/chat-ui)
$ git fetch upstream
From https://github.com/OhGoodTeam/OhgoodpayFE
 * [new branch]      dev        -> upstream/dev
 * [new branch]      eunhyo     -> upstream/eunhyo
 * [new branch]      gaeun      -> upstream/gaeun
 * [new branch]      gahee      -> upstream/gahee
 * [new branch]      hwajun     -> upstream/hwajun
 * [new branch]      login      -> upstream/login
 * [new branch]      main       -> upstream/main
 * [new branch]      minjung    -> upstream/minjung
 * [new branch]      mypage     -> upstream/mypage
 * [new branch]      pay        -> upstream/pay
 * [new branch]      recodash   -> upstream/recodash
 * [new branch]      shorts     -> upstream/shorts
 * [new branch]      sunjung    -> upstream/sunjung

์ผ๋‹จ ํ˜„์žฌ ๋ฐ์ดํ„ฐํŒ€ ๋ธŒ๋žœ์น˜์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” commit๋“ค์„ ๋•ก๊ฒจ์˜ค๊ธฐ ์œ„ํ•ด upstream์— ์žˆ๋Š” ํŒ€ ๋ธŒ๋žœ์น˜๋ฅผ ์ „๋ถ€ ๊ฐ€์ ธ์™”๋‹ค.

1
2
3
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhgoodpayFE (feat/chat-ui)
$ git rebase upstream/recodash
Current branch feat/chat-ui is up to date.

์ด์ „ ์ž‘์—…๋ฌผ ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๋•ก๊ฒจ์˜ค๊ธฐ~

1
2
3
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhgoodpayFE (feat/chat-ui)
$ git rebase upstream/dev
Current branch feat/chat-ui is up to date.

ํ˜น์‹œ ๋ชฐ๋ผ์„œ dev์— ์žˆ๋Š”๊ฒƒ๋„ ๋•ก๊ฒผ๋Š”๋ฐ ์•„์ง dev์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์—ˆ๋‹ค.

4. ์ž‘์—… ํ›„ PUSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhGoodpayFE (feat/chat-ui)
$ git commit -m "[sunjung] feat: ์ฑ—๋ด‡ 1์ฐจ ui ๊ตฌ์„ฑ ์™„๋ฃŒ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ ์™„๋ฃŒ"
[feat/chat-ui 246668f] [sunjung] feat: ์ฑ—๋ด‡ 1์ฐจ ui ๊ตฌ์„ฑ ์™„๋ฃŒ ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ ์™„๋ฃŒ
 16 files changed, 455 insertions(+), 10 deletions(-)
 delete mode 100644 src/features/recommend/.gitkeep
 delete mode 100644 src/features/recommend/component/.gitkeep
 create mode 100644 src/features/recommend/component/chat/ChatInput.css
 create mode 100644 src/features/recommend/component/chat/ChatInput.jsx
 create mode 100644 src/features/recommend/component/chat/ChatToggle.css
 create mode 100644 src/features/recommend/component/chat/ChatToggle.jsx
 create mode 100644 src/features/recommend/component/chat/MessageBubble.css
 create mode 100644 src/features/recommend/component/chat/MessageBubble.jsx
 create mode 100644 src/features/recommend/component/chat/ProfileAvatar.css
 create mode 100644 src/features/recommend/component/chat/ProfileAvatar.jsx
 create mode 100644 src/features/recommend/layout/chat/ChatLayout.css
 create mode 100644 src/features/recommend/layout/chat/ChatLayout.jsx
 create mode 100644 src/pages/recommend/chat/Chat.css
 create mode 100644 src/pages/recommend/chat/Chat.jsx
 create mode 100644 src/shared/assets/img/chat_profile.png

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ์ž‘์—… ํ›„์— push๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด์ž. ์šฐ์„  add commit์€ ๋„ˆ๋ฌด ๋‹น์—ฐํ•˜๋‹ˆ๊นŒโ€ฆ์ผ๋‹จ commit์œผ๋กœ ์˜ฌ๋ ค์ค€๋‹ค.

1
2
3
4
5
6
sspur@sunj-PC MINGW64 /c/developer/GitHub/OhGoodpayFE (feat/chat-ui)
$ git remote -v
origin  https://github.com/sunJ0120/OhgoodpayFE.git (fetch)
origin  https://github.com/sunJ0120/OhgoodpayFE.git (push)
upstream        https://github.com/OhGoodTeam/OhgoodpayFE.git (fetch)
upstream        https://github.com/OhGoodTeam/OhgoodpayFE.git (push)

๊ทธ ๋‹ค์Œ์— remote๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, origin์ด ๋‚ด fork ๋ ˆํฌ๋กœ ๋˜์–ด ์žˆ๊ณ  upstream์ด ์›๋ณธ ๋ ˆํฌ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด ์ƒํ™ฉ์—์„œ ์šฐ์„  ์šฐ๋ฆฌ fork ๋ ˆํฌ์— push๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

1
git push origin feat/chat-ui

์ด๋ ‡๊ฒŒ ํ•ด์ค€ ๋‹ค์Œ์— ์ด์ œ ์›๋ณธ ๋ ˆํฌ์— PR์„ ๋‚ ๋ ค์ฃผ๋ฉด ๋œ๋‹ค.

image.png

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ์†์‰ฝ๊ฒŒ ์ž‘์€ ๋‹จ์œ„ ๊ธฐ๋Šฅ๋ณ„ ๋ฆฌ๋ทฐ ๋ฐ ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅ~

This post is licensed under CC BY 4.0 by the author.