# ๐Ÿท๏ธ Git ์šด์˜ ๋ฐ ํ†ตํ•ฉ ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌ ๊ทœ์น™ ์ด ๋ฌธ์„œ๋Š” Smart IMS ํ”Œ๋žซํผ์˜ **Git ์šด์˜ ์ •์ฑ…**, **ํƒœ๊ทธ ์ž‘์„ฑ ๊ทœ์น™**, ๊ทธ๋ฆฌ๊ณ  **์šด์˜ ์„œ๋ฒ„ ์ˆ˜๋™ ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ•**์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. --- ## 1. ํƒœ๊ทธ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๊ทœ์น™ (Changelog ์ž๋™ ์ƒ์„ฑ) ํ”Œ๋žซํผ์˜ ์—…๋ฐ์ดํŠธ ์—”์ง„์€ ํƒœ๊ทธ ๋ฉ”์‹œ์ง€์˜ **๋จธ๋ฆฌ๋ง(Prefix)**๊ณผ **๋ฆฌ์ŠคํŠธ ๊ธฐํ˜ธ(`-`, `*`)**๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ด€๋ฆฌ ํŽ˜์ด์ง€์˜ ์—…๋ฐ์ดํŠธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ### ๐Ÿ“‹ ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ ```text [TYPE] ์—…๋ฐ์ดํŠธ ์ œ๋ชฉ (ํ•œ ์ค„ ์š”์•ฝ) - ์ƒ์„ธ ๋ณ€๊ฒฝ ๋‚ด์šฉ 1 - ์ƒ์„ธ ๋ณ€๊ฒฝ ๋‚ด์šฉ 2 * ์ƒ์„ธ ๋ณ€๊ฒฝ ๋‚ด์šฉ 3 ``` ### ๐Ÿท๏ธ ์—…๋ฐ์ดํŠธ ํƒ€์ž… (TYPE) ์ •์˜ | ํ‚ค์›Œ๋“œ | ์—…๋ฐ์ดํŠธ ์œ ํ˜• | ์‹œ๊ฐ์  ํ‘œ์‹œ | ๋น„๊ณ  | |:--- |:--- |:--- |:--- | | `[URGENT]` | **๊ธด๊ธ‰/๋ณด์•ˆ** | ๋นจ๊ฐ„์ƒ‰ ๋ฐฐ๋„ˆ | ์ตœ์šฐ์„  ์—…๋ฐ์ดํŠธ ๊ถŒ์žฅ | | `[HOTFIX]` | **๊ธด๊ธ‰ ์ˆ˜์ •** | ๋นจ๊ฐ„์ƒ‰ ๋ฐฐ๋„ˆ | ๋ฒ„๊ทธ ์ฆ‰์‹œ ์ˆ˜์ • ๊ฑด | | `[FEATURE]` | **๊ธฐ๋Šฅ ์ถ”๊ฐ€** | ๋‚จ์ƒ‰(Indigo) | ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋„์ž… | | `[FIX]` | **์ผ๋ฐ˜ ์ˆ˜์ •** | ํšŒ์ƒ‰(Slate) | ์ผ๋ฐ˜์ ์ธ ๋ฒ„๊ทธ ์ˆ˜์ • | | `[PATCH]` | **ํŒจ์น˜/๋ณด์ •** | ํšŒ์ƒ‰(Slate) | ๋งˆ์ด๋„ˆ ํ’ˆ์งˆ ๊ฐœ์„  | --- ## 2. ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ์ ˆ์ฐจ (๊ฐœ๋ฐœ PC) ๊ฐœ๋ฐœ ์ž‘์—… ๋ฐ ํƒœ๊ทธ ์ƒ์„ฑ์€ ์•„๋ž˜ ๊ฒฝ๋กœ์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. * **์ž‘์—… ๊ฒฝ๋กœ**: `d:\antigravity\smartims` (์œˆ๋„์šฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ธฐ๋ฐ˜) ### STEP 1: ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ปค๋ฐ‹ ๋ฐ ํ‘ธ์‹œ ```powershell # [์œ„์น˜: d:\antigravity\smartims (๋ฃจํŠธ)] git add . git commit -m "๋ฆด๋ฆฌ์ฆˆ ์ค€๋น„: v0.3.5 ํŒจ์น˜" git push origin main ``` ### STEP 2: ์–ด๋…ธํ…Œ์ดํ‹ฐ๋“œ ํƒœ๊ทธ(Annotated Tag) ์ƒ์„ฑ ```powershell # [์œ„์น˜: d:\antigravity\smartims (๋ฃจํŠธ)] git tag -a v0.3.5 -m "[PATCH] ์‹œ์Šคํ…œ ์•ˆ์ •ํ™” ํŒจ์น˜ - ์›๊ฒฉ ํƒœ๊ทธ ๋™๊ธฐํ™” ๋กœ์ง ๊ฐ•ํ™” - API ์บ์‹œ ๋ฐฉ์ง€ ํƒ€์ž„์Šคํƒฌํ”„ ๋„์ž…" ``` ### STEP 3: ์›๊ฒฉ ์ €์žฅ์†Œ์— ํƒœ๊ทธ ํ‘ธ์‹œ ```powershell # [์œ„์น˜: d:\antigravity\smartims (๋ฃจํŠธ)] git push origin v0.3.5 ``` --- ## 3. ์šด์˜ ์„œ๋ฒ„ ์ˆ˜๋™ ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ• (Production Server) ์›น UI ์—…๋ฐ์ดํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ SSH๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์„œ๋ฒ„์—์„œ ์ œ์–ดํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. * **์„œ๋น„์Šค ๊ฒฝ๋กœ**: `/volume1/web/smartims` (๋ฆฌ๋ˆ…์Šค ์šด์˜ ํ™˜๊ฒฝ ๊ธฐ๋ฐ˜) ### STEP 1: ์›๊ฒฉ ์ •๋ณด ํ™•์ธ ๋ฐ ์ฒดํฌ์•„์›ƒ ```bash # [์œ„์น˜: /volume1/web/smartims (๋ฃจํŠธ)] # 1. ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ตœ์‹  ํƒœ๊ทธ ๋ชฉ๋ก ํ™•์ธ (๋ฌด์—‡์ด ์ตœ์‹ ์ธ์ง€ ๋จผ์ € ํ™•์ธ) git ls-remote --tags origin # 2. ํƒœ๊ทธ ์ •๋ณด ๊ฐ•์ œ ์—…๋ฐ์ดํŠธ (์›๊ฒฉ ์ €์žฅ์†Œ์™€ ์™„๋ฒฝ ๋™๊ธฐํ™”) git fetch origin +refs/tags/*:refs/tags/* --force --prune --prune-tags # 3. ๋Œ€์ƒ ๋ฒ„์ „์œผ๋กœ ๊ฐ•์ œ ์ฒดํฌ์•„์›ƒ git checkout -f v0.3.5 ``` ### STEP 2: ํ”„๋ก ํŠธ์—”๋“œ ๋นŒ๋“œ ๋ฐ ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ ```bash # [์œ„์น˜: /volume1/web/smartims (๋ฃจํŠธ)] npm install npm run build ``` ### STEP 3: ๋ฐฑ์—”๋“œ ๋ฐ˜์˜ ๋ฐ ์„œ๋น„์Šค ์žฌ์‹œ์ž‘ ```bash # [์œ„์น˜: /volume1/web/smartims/server] cd server npm install pm2 reload smartims-api ``` --- ## 4. ์œ ์šฉํ•œ Git ๋ช…๋ น์–ด ๋ ˆํผ๋Ÿฐ์Šค * **ํƒœ๊ทธ ๋ชฉ๋ก ํ™•์ธ**: `git tag -l` (๋ชจ๋“  ํ™˜๊ฒฝ์˜ ๋ฃจํŠธ ํด๋”) * **์ตœ์‹  ํƒœ๊ทธ ์ •๋ณด ํ™•์ธ**: `git describe --tags --abbrev=0` * **์›๊ฒฉ ํƒœ๊ทธ ๊ฐ•์ œ ๋ฎ์–ด์“ฐ๊ธฐ (๋ฉ”์‹œ์ง€ ์ˆ˜์ • ์‹œ)**: ```powershell # [์œ„์น˜: ๊ฐœ๋ฐœ PC ๋ฃจํŠธ] git tag -a v0.3.5 -f -m "์ˆ˜์ •๋œ ๋ฉ”์‹œ์ง€..." git push origin v0.3.5 -f ``` --- ## 5. ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ์œ ์ง€๊ด€๋ฆฌ ์ ˆ์ฐจ (์‹œ๋†€๋กœ์ง€ ์šด์˜ ์„œ๋ฒ„ ๊ธฐ์ค€) ์ž๋™ ์—…๋ฐ์ดํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์ง€๋งŒ, ์„œ๋ฒ„ ์ด์ „์ด๋‚˜ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ํ™˜๊ฒฝ ๋ณ€ํ™”์— ๋Œ€๋น„ํ•˜์—ฌ ๋‹ค์Œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐฑ์—…ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ### โœ… ์ž๋™ ์—…๋ฐ์ดํŠธ ์‹œ ๋ฐ์ดํ„ฐ ์•ˆ์ „์„ฑ * **ํŒŒ์ผ ์•ˆ์ „**: ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•œ **[์ž๋™ ์—…๋ฐ์ดํŠธ]** ์‹คํ–‰ ์‹œ, `server/uploads` ํด๋”๋Š” Git ์ถ”์  ์ œ์™ธ ๋Œ€์ƒ์ด๋ฏ€๋กœ **์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์œ ์ง€**๋ฉ๋‹ˆ๋‹ค. * **DB ์•ˆ์ „**: ์—…๋ฐ์ดํŠธ ์‹œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋งŒ ์—…๋ฐ์ดํŠธ(Migration)ํ•˜๋ฉฐ, ์ด๋ฏธ ๋“ฑ๋ก๋œ ์ž์‚ฐ ๋ฐ์ดํ„ฐ๋Š” ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. ### ๐Ÿ“ฆ ์ˆ˜๋™ ๋ฐฑ์—… ์ ˆ์ฐจ (Step-by-Step) ์šด์˜ ์„œ๋ฒ„(์‹œ๋†€๋กœ์ง€) SSH ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ฐฑ์—… ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. #### 1๋‹จ๊ณ„: ์—…๋กœ๋“œ ์ด๋ฏธ์ง€ ๋ฐฑ์—… ์ž์‚ฐ ์ด๋ฏธ์ง€ ๋ฐ ๋งค๋‰ด์–ผ ํŒŒ์ผ์ด ์ €์žฅ๋œ ํด๋”๋ฅผ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. ```bash # [์œ„์น˜: /volume1/web/smartims] # uploads ํด๋”๋ฅผ backup_images_์˜ค๋Š˜๋‚ ์งœ.tar.gz๋กœ ์••์ถ• tar -czvf backup_images_$(date +%Y%m%d).tar.gz server/uploads/ ``` #### 2๋‹จ๊ณ„: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) ๋ฐฑ์—… ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ(์ž์‚ฐ ์ •๋ณด, ๊ณ„์ •, ๋กœ๊ทธ ๋“ฑ)๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ```bash # [์œ„์น˜: /volume1/web/smartims] # .env์— ์„ค์ •๋œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ DB ์ „์ฒด๋ฅผ ๋ฐฑ์—… # (๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋œจ๋ฉด DB ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ) /usr/local/mariadb10/bin/mysqldump -u root -p smartims > backup_db_$(date +%Y%m%d).sql ``` #### 3๋‹จ๊ณ„: ๋ฐฑ์—… ํŒŒ์ผ ์•ˆ์ „ ๋ณด๊ด€ ์ƒ์„ฑ๋œ `backup_images_*.tar.gz`์™€ `backup_db_*.sql` ํŒŒ์ผ์„ ์‹œ๋†€๋กœ์ง€ File Station์„ ํ†ตํ•ด ์™ธ๋ถ€ ์ €์žฅ์†Œ๋‚˜ PC๋กœ ๋‚ด๋ ค๋ฐ›์•„ ๋ณด๊ด€ํ•˜์‹ญ์‹œ์˜ค. --- ## ๐Ÿ’ก ์ตœ์ข… ์ฃผ์˜์‚ฌํ•ญ 1. **์‹คํ–‰ ์œ„์น˜ ํ™•์ธ**: ํŠนํžˆ `pm2` ๋ช…๋ น์–ด๋‚˜ `server` ๊ด€๋ จ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ `server` ํด๋” ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํžˆ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2. **๊ฒฝ๋กœ ์ด๋™ ์ฃผ์˜**: `cd server`๋ฅผ ํ†ตํ•ด ํด๋”๋ฅผ ์ด๋™ํ•˜์—ฌ ์ž‘์—…์„ ๋งˆ์นœ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ `cd ..`๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๋ฃจํŠธ ํด๋”๋กœ ๋ณต๊ท€ํ•˜์—ฌ ๋‹ค์Œ ์ž‘์—…์— ํ˜ผ์„ ์ด ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 3. **๊ถŒํ•œ ๊ด€๋ฆฌ**: ์šด์˜ ์„œ๋ฒ„์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์„œ๋น„์Šค ์‹คํ–‰ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๊ณ„์ •์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผ `PM2` ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 4. **์ˆ˜๋™ ์„ค์น˜ ์ฃผ์˜**: `git clone`์„ ์ƒˆ๋กœ ๋ฐ›์•„ ์„ค์น˜ํ•  ๋•Œ๋Š” ๊ธฐ์กด `uploads` ํด๋”๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์œ„ 1๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ๋ฐฑ์—…๋ณธ์„ ๋ณต๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.