[๐Ÿงธ] ์˜ํ™” ํ‰/๋ฆฌ๋ทฐ ์‚ฌ์ดํŠธ : ์‹œ์ž‘ํ•˜๊ธฐ

Yunhye Parkยท2023๋…„ 11์›” 3์ผ
0
post-custom-banner

์˜ค๋Š˜๋ถ€ํ„ฐ ๊ฐ‘์ž๊ธฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ ํ† ์ด ํ”„๋กœ์ ํŠธ. ๋จธ๋ฆฟ์†์— ๊ตฌํ˜„ํ•œ ๊ฑด ๊ฝค๋‚˜ ํ”„๋กœ์ ํŠธ์ธ๋ฐ ์•„๋งˆ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋‹ค ๋ณด๋ฉด ์ž‘๊ณ  ์†Œ์ค‘ํ•œ ์žฅ๋‚œ๊ฐ ์ •๋„๊ฐ€ ์•„๋‹๊นŒ ์‹ถ๋‹ค. ์žฅ๋‚œ๊ฐ ๊ฐ€์ง€๊ณ  ๋…ธ๋Š” ๊ฑด ์žฌ๋ฐŒ์œผ๋‹ˆ๊นŒ ์˜คํžˆ๋ ค ์ข‹์•„... ๐Ÿ‘€

์•„์ด๋””์–ด

์žฅ๋‚œ๊ฐ ๋†€์ด์—” ์—ญ์‹œ ์žฌ๋ฐŒ๋Š” ๊ฒŒ ์ œ์ผ์ด๋‹ค. ํผ์ง€๋ง‰ํ•˜๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค.

  1. ์ผํ•˜๋˜ ์Œ์‹์  ์›น์‚ฌ์ดํŠธ

์—ด์‹ฌํžˆ ์ฝ”๋”ฉ ๋ฐฐ์›Œ์„œ ์‚ฌ์žฅ๋‹˜๊ป˜ ์งœ์ž” ํ•˜๊ณ  ๋ณด์—ฌ์ค„ ์ƒ๊ฐ์„ ํ•ด๋ดค๋˜์ง€๋ผ.. ์ž์—ฐํžˆ ๋– ์˜ค๋ฆ„. ํ•ด๋ณธ๋‹ค๋ฉด ์˜ˆ์•ฝ ๊ด€๋ฆฌ์™€ ๋ฐ€ํ‚คํŠธ ์ƒํ’ˆ ํŒ๋งค๋ชฐ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์•ผ์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค. ํ•˜์ง€๋งŒ ์‡ผํ•‘๋ชฐ์„ ๋น„๋กฏํ•œ ์ƒํ’ˆ ํŒ๋งค๋ชฐ์€ ์ด์ƒํ•˜๊ฒŒ ๋‚ด ๋งˆ์Œ์ด ๋ฐ˜์‘ํ•˜์งˆ ์•Š์•„. ๐Ÿ˜ง

  1. ์‘์›ํ•˜๋Š” ๋Œ„์„œํŒ€ ์Šค์ผ€์ค„ ์‚ฌ์ดํŠธ

์ด ํŒ€์˜ ์•™๊ธˆํ˜ธ๋นต(...๐Ÿคซ)์—์„œ ์–ด๋–ค ํœ€๊ฑธ์ด ๋Œ„์„œ ๋ถ„๋“ค ์Šค์ผ€์ค„ ๋ชจ์€ ์‚ฌ์ดํŠธ๋‚˜ ๊ณต์ง€๋ฐฉ์ด ๋”ฐ๋กœ ์žˆ๋ƒ๋Š” ์งˆ๋ฌธ์— ์—†๋‹ค๋Š” ๋‹ต๋ณ€์ด ๋Œ์•„์™”๋‹ค. ์ •๋ณด ๋ชจ์•„๋‹ค๊ฐ€ ๋‚ ์งœ๋ณ„/๋ฉค๋ฒ„๋ณ„ ํ™•์ธ+์‹ ์ฒญ ์‚ฌ์ดํŠธ ๋งํฌ ์—ฐ๊ฒฐ๊นŒ์ง€ ํ•˜๋ฉด ์–ด๋–จ๊นŒ ์‹ถ์—ˆ๋˜. ๊ทผ๋ฐ ๊ธฐ๋Šฅ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ์—†์„ ๊ฑฐ ๊ฐ™์•„์„œ ์‚ฌ์ดํŠธ ์œ ์ง€๊ฐ€ ํž˜๋“ค ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์ž๊ณ ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์–ด์•ผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋„ ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ.

  1. ์˜ํ™” ๋ฆฌ๋ทฐ ์‚ฌ์ดํŠธ

4๋…„ ๋„˜๊ฒŒ ํ•œ ์‚ฌ์ดํŠธ(1)์—์„œ ์—๋””ํ„ฐ๋กœ ๊ธ€์„ ์ผ๊ณ , ์ž๊ทธ๋งˆํ•œ ์˜ํ™” ๋ฆฌ๋ทฐ ์‚ฌ์ดํŠธ(2)์—์„œ ๊ธ€ ์“ด ์ง€๋Š” 2๋…„ ๋ฐ˜ ์ •๋„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‘ ํ”Œ๋žซํผ ๋ชจ๋‘ ๊ณ ์งˆ์ ์ธ ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ๊ธ€์“ฐ๊ธฐ์™€ ๊ธ€ ์ฝ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ฃผ๋œ ์ž‘์—…์ธ๋ฐ ๋ณต๋ถ™๋„ ์–ด๋ ต๊ณ  ๊ธ€์“ฐ๋Š” ๊ณต๊ฐ„์— ๊ธฐ๋Šฅ์ด ๊ณผํ•˜๊ฒŒ ๋งŽ์€ ๊ฒƒ์— ๋น„ํ•ด ์ž์ฃผ ์“ฐ๋Š” ๊ฑด ํ•œ ๋‘๊ฐ€์ง€๋ผ, ๊ทธ ์ž๊ทธ๋งˆํ•œ ์•„์ด์ฝ˜๋“ค ํ‹ˆ์—์„œ ์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ๋‹ค.

์ด๋ณด๋‹ค ๋‚˜์€ ๊ฒฝํ—˜์œผ๋กœ๋Š” ๋ธŒ๋Ÿฐ์น˜๊ฐ€ ์žˆ๋‹ค. ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ๋Š” ์•„๋ฌด๋ž˜๋„ ๊ธ€ ์ž์ฒด์— ์ง‘์ค‘ํ•œ ํ”Œ๋žซํผ์ด ์•„๋‹ˆ๋‹ค๋ณด๋‹ˆ ๋“ค์–ด๊ฐ€๋Š” ๊ณผ์ •์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ท€์ฐฎ๋‹ค. ํŽธ์ง‘๊ธฐ๊ฐ€ ์˜ˆ์ „๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์•„์ง€๊ธด ํ–ˆ์ง€๋งŒ..

๋ฆฌ๋ทฐ ํ•˜๋‚˜๋งŒ์œผ๋กœ๋Š” ์‹ฌ์‹ฌํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์™“์ฑ ํ”ผ๋””์•„๋‚˜ ํ‚ค๋…ธ๋ผ์ด์ธ ์ฒ˜๋Ÿผ ํ•œ์ค„ํ‰ ํ˜•์‹์˜
๋น„์ฆˆ๋‹ˆ์Šค๋„ ํ•จ๊ป˜ ๋ฒ„๋ฌด๋ฆฌ๋Š” ๊ฒŒ ์–ด๋–จ๊นŒ ์‹ถ์—ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ•œ (2)์˜ ๋ฉ”์ธ UI๊ฐ€ ๊ทœ๊ฒฉ๋งŒ ์ข€์”ฉ ๋‹ค๋ฅธ ์˜ํ™” ํฌ์Šคํ„ฐ์˜€๋Š”๋ฐ, ์ด๊ฒŒ ์ด์ƒํ•œ ํ”ผ๋กœ๊ฐ์„ ์œ ๋ฐœํ–ˆ๋‹ค. ์—‡๋น„์Šทํ•˜๊ฒŒ ๋‹ค ๋˜‘๊ฐ™์€ ๊ฒƒ๋งŒ ๋ฐ˜๋ณต๋˜๋‹ˆ๊นŒ ๊ทธ ๋ฌด์—‡๋„ ๊ถ๊ธˆํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ธ๋ถ€ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ๋งŽ์€๋ฐ ๋ช…์นญ์ด ์ง๊ด€์ ์ด๊ฑฐ๋‚˜ ์ž…์— ์ฐฉ ๋‹ฌ๋ผ๋ถ™์งˆ ์•Š์•„์„œ ๋ฒˆ์žก์Šค๋Ÿฝ๊ธฐ๋„ ํ–ˆ๊ณ .

์ด๋ ‡๋“ฏ ๋ฌธ์ œ์™€ ๊ฐœ์„ ์ , ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์˜ ์ˆ˜์ตํ™” ๊ฐ€๋Šฅ์„ฑ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜๋‹ค ๋ณด๋‹ˆ ์ด๊ฑธ ํ•˜๊ณ  ์‹ถ๊ตฌ๋‚˜ ํ–ˆ๋‹ค.

๐Ÿค” ๋‚˜๋Š” ์ฐธ

๊ธฐํš์„ ์ข‹์•„ํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ํ™”๋ฉด ํœ˜๋ฆฌ๋ฆญ ๊ตฌ์ƒํ•ด์„œ ๊ตฌ๊ธ€๋งํ•˜๋ฉฐ ๋งจ๋•…์— ํ—ค๋”ฉํ•˜๋Š” ๋ฐฉ์‹์€ ์•ˆ ๋งž๋Š” ๋“ฏํ•˜๋‹ค. ๋‚ด๊ฐ€ ์žฌ๋ฐŒ์–ด ํ•˜๋Š” ๊ฑธ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒŒ ์ข‹์ง€๋งŒ, ์‚ฌ์—…ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ๊นŒ์ง€ ๊ตฌ์ฒดํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์˜์š•์ด ์ƒ๊ธด๋‹ค.

์‚ฌ์šฉํ•  ๊ธฐ์ˆ 

๋ฆฌ์•กํŠธ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ, ๋…ธ๋“œ๋กœ ์„œ๋ฒ„๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ฑฐ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” MySQl sequelize ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ!

๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์—์„œ ๋” ์ถ”๊ฐ€๋  ์˜ˆ์ •..

๋Œ€๋žต์ ์ธ ํ™”๋ฉด ๊ตฌ์ƒ

๋‚˜๋งŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ์ดˆ์•ˆ..

๋ ˆํผ๋Ÿฐ์Šค๋กœ ํ‚ค๋…ธ๋ผ์ด์ธ ์™€ ๋ธŒ๋Ÿฐ์น˜๋ฅผ ์‚ผ์•˜๋‹ค.

๋ ˆํผ๋Ÿฐ์Šค ์ด์œ 

๋ธŒ๋Ÿฐ์น˜๋Š” ์›Œ๋‚™ UI๊ฐ€ ๊น”๋”ํ•˜๋‹ค. ๊ธ€์“ฐ๋Š” ๊ณต๊ฐ„๋„ ๊ทธ๋ ‡๊ณ . ๋‹ค๋งŒ ์›น์— ์ตœ์ ํ™”๋˜์–ด์žˆ๋‹ค๋Š” ๋Š๋‚Œ์ด๋‹ค. ๋ชจ๋ฐ”์ผ ๋ฒ„์ „์€ ๋‚ด ๊ธ€์„ ํ™•์ธํ•˜๋Ÿฌ ๊ฐ€๋Š” ๊ณผ์ •์ด ์กฐ๊ธˆ ๋ฒˆ์žกํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€ ๋ชปํ•ด์„œ ์˜ค๋žซ๋งŒ์— ๋ชจ๋ฐ”์ผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋Š˜ ํ—ท๊ฐˆ๋ฆฐ๋‹ค.

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

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

ํฐ ์ฐจ์ด์ ์ด ์žˆ๋‹ค๋ฉด ์นด์นด์˜ค๋Š” ์ฃผ๋กœ ๋ฐฐ๋„ˆ ๊ด‘๊ณ ๋ฅผ ์œ„์ฃผ์ด๊ณ , ํ‚ค๋…ธ๋ผ์ด์ธ ๋Š” ํŒ์—… ๊ด‘๊ณ ๋กœ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ž๋ณธ์˜ ์ฐจ์ด๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ์–ด๋–ค ๋ฉด์—์„œ๋Š” ๋ณ„ ์ˆ˜ ์—†๋‹ค์ง€๋งŒ.. ์‚ฌ์šฉ์ž์˜ ํŽธ์˜์„ฑ์„ ์ตœ์šฐ์„  ๋ชฉํ‘œ๋กœ ๋‘๊ณ  ์‹ถ์–ด์„œ ๋ฐฐ๋„ˆ ๊ด‘๊ณ  ์œ„์ฃผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋‚˜๋Š” ์ฝœ๋ผ๋ณด๋ ˆ์ด์…˜์„ ๋งŽ์ด ํ•˜๋Š” ์ชฝ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค. ์‚ฌ์ดํŠธ์˜ ๋Œ€ํ‘œ ์ปจ์…‰์€ ์„ธ ๊ฐ€์ง€๋‹ค: ์˜ํ™”, ๊ธ€, ๋ถ„์œ„๊ธฐ. ๋ถ„์œ„๊ธฐ๋Š” ๋‹ค์–‘ํ•˜๊ฒŒ ์—ฎ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฌต์งํ•˜๊ณ  ๊ณ ๊ธ‰์Šค๋Ÿฌ์šด ์ชฝ์œผ๋กœ ๊ฐ€์ž๋ฉด ์™€์ธ์ด๋‚˜ ๋งฅ์ฃผ ๊ฐ™์€ ์ฃผ๋ฅ˜๋‚˜ ์ฑ…, ๊ฐ€๋ณ๊ณ  ํŽ‘ํ‚คํ•œ ๋Š๋‚Œ์€ ์ด๋ชจํ‹ฐ์ฝ˜. ์ •๋ฐ˜๋Œ€์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ € ๋‘˜์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ทธ๋ ‡๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๊ณ  ๋ณธ๋‹ค. ์˜ํ™”์™€ ๊ธ€์€ ์˜จ๊ฐ– ๊ฒƒ์„ ์•„์šฐ๋ฅด๋“ฏ์ด.

์˜ค๋Š˜ ํ•œ ๊ฑฐ

๋ฉ”์ธ ํ™”๋ฉด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์š”๋Ÿ‰์œผ๋กœ ๋”ฅํ•˜๊ฒŒ ๊ณ ๋ฏผํ–ˆ๋˜ ๊ฑด๋ฐ ๋ง‰์ƒ ์‹œ์ž‘ํ•ด๋ณด๋‹ˆ ์ตœ๊ทผ ๋…ธ๋“œ ๋ฐฑ์—”๋“œ ์ˆ˜์—…์„ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋‹ค๋ค„๋ณธ ํšŒ์›๊ฐ€์ž…๊ณผ ํผ์„ ๋ฆฌ์•กํŠธ์™€ ์—ฐ๊ฒฐํ•ด์„œ ๊ตฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒŒ ์ฒซ ๋‹จ์ถ” ๊ฟฐ๊ธฐ ์ข‹์„ ๋“ฏํ–ˆ๋‹ค.

1. ํ™˜๊ฒฝ ์„ธํŒ… ๋ฐ ํด๋” ๊ตฌ์กฐ

๋ฐฑ๊ณผ ํ”„๋ก ํŠธ ๋ชจ๋‘๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋‹ˆ ํด๋” ๊ตฌ์กฐ๊ฐ€ ํ•„์ˆ˜์˜€๋‹ค.

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ์ด๋ ‡๋‹ค.

Project
โ”—โ”€โ”€client
  โ”—โ”€โ”€โ”€public
  โ”—โ”€โ”€โ”€src
	โ”—โ”€โ”€โ”€assets
    โ”—โ”€โ”€โ”€components
โ”—โ”€โ”€server
  โ”—โ”€โ”€โ”€config
  โ”—โ”€โ”€โ”€controllers
  โ”—โ”€โ”€โ”€models
  โ”—โ”€โ”€โ”€routes

๐Ÿ”ธ ์„œ๋ฒ„

mkdir -> cd ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ -> npm init -y -> npm i express sequelize sequelize-cli mysql2 nodemon-> ์„œ๋ฒ„ ์—ด์–ด์ฃผ๊ธฐ -> nodemon์œผ๋กœ ํ™•์ธ

๐Ÿ”ธ ํด๋ผ์ด์–ธํŠธ

mkdir -> cd ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ -> npm create-react-app -> rm -rf .git -> package.json scripts์—์„œ start์™€ build๋งŒ ๋‚จ๊ธฐ๊ธฐ -> ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ณธ ์†Œ์Šค๋“ค(๋กœ๊ณ  ๋“ฑ) ์ •๋ฆฌ -> npm start๋กœ ํ™•์ธ

๐Ÿ’ก ๋ฆฌ์•กํŠธ ์•ฑ ์ƒ์„ฑ ์‹œ ์ฃผ์˜์ 

create-react-app์„ ์ด์šฉํ•ด ์ƒ์„ฑํ•  ๊ฒฝ์šฐ, ์ž๋™์ ์œผ๋กœ .git ํŒŒ์ผ์ด ๋‚ด๋ถ€์— ์ถ”๊ฐ€๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ ์ด๋ฏธ git clone์„ ํ•˜์ง€ ์•Š์•˜๋Š”๊ฐ€? ์ด๋Ÿฌ๋ฉด ํ•œ ํด๋” ์•ˆ์— 2๊ฐœ์˜ .git์ด ์กด์žฌํ•˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ์œ„์น˜์˜ .git์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” rm -rf .git์„ ์ž…๋ ฅํ•ด์ฃผ์—ˆ๋‹ค.

๊ณผ๊ฑฐ์˜ ๋‚˜๋Š” ๋ชฐ๋ž์œผ๋ฏ€๋กœ.. git add๊นŒ์ง€ ํ–ˆ๋˜์ง€๋ผ ๊ฐ™์€ ์ฒ˜์ง€๋ผ๋ฉด ์ด ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๊ธธ.

2. mysql DB & table ์ƒ์„ฑ

๐Ÿ”ธ ํ•œ๊ธ€๊ณผ ์ด๋ชจ์ง€ ๋ชจ๋‘ ํฌํ•จ๋œ ์˜ต์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ

create database ์ƒ์„ฑํ•  db ์ด๋ฆ„
default character set utf8mb4 default collate utf8mb4_unicode_ci;

๐Ÿ”ธ

create table ํ…Œ์ด๋ธ”๋ช… (
	-- ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ทธ์™ธ ์˜ต์…˜
    idx int not null primary key auto_increment,
    email varchar(30) not null,
    pw varchar(20) not null,
    nickname varchar(20) not null
);

๐Ÿ’ก uniqe key

PK์ฒ˜๋Ÿผ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ null ๊ฐ’ ํ—ˆ์šฉํ•˜๊ณ  ํ•œ ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์šฉ์ดํ•˜๋‹ˆ๊นŒ ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋‹‰๋„ค์ž„ ๋ชจ๋‘ ์œ ๋‹ˆํฌ ํ‚ค๋กœ ์ถ”๊ฐ€ ์„ค์ •ํ•ด ๋‘์—ˆ๋‹ค.

์ƒˆ ํ•„๋“œ์— ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด modify ๋Œ€์‹  add! ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ๋ฐ์ดํ„ฐํƒ€์ž…์˜ ํฌ๊ธฐ๋„ ํ†ต์ผํ–ˆ๋‹ค.

-- ๊ธฐ์กด ํ•„๋“œ์— ์œ ๋‹ˆํฌ ํ‚ค ์„ค์ •
alter table member modify column nickname varchar(30) not null unique;

๊ทธ๋ฆฌ๊ณ  sequelize ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด mysql๊ณผ Node๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…๊นŒ์ง€ ํ•ด์คฌ๋‹ค.

3. ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ

์ด์ œ ๋ฆฌ์•กํŠธ๋กœ ๋„˜์–ด๊ฐ€์„œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ์ž. input์„ ์ง์ ‘ ๋งŒ๋“ค๊นŒ ํ•˜๋‹ค๊ฐ€ ํ”„๋กœ์ ํŠธ ํ•˜๋ฉด์„œ ๊ธฐ์ˆ  ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒŒ ์ข‹์œผ๋‹ˆ๊นŒ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์„ ์“ฐ๊ธฐ๋กœ ํ–ˆ๋‹ค.

npm i react react-router-dom์œผ๋กœ ๋ผ์šฐํ„ฐ ์„ค์ •๋„ ํ•ด์ฃผ์ž. ๋ฆฌ์•กํŠธ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ผ์šฐํ„ฐ๋ฅผ ํ†ตํ•ด ๋งค๋„๋Ÿฌ์šด ํŽ˜์ด์ง€ ์ด๋™์„ ๊ตฌํ˜„ํ•œ๋‹ค. ๋ฌผ๋ก  ๊ฐ€์ƒ ๋”์ด ์›๋ณธ ๋”๊ณผ ๋น„๊ตํ•ด ๋‹ฌ๋ผ์ง„ ์ ๋งŒ ์žฌ๋ Œ๋”๋งํ•˜๋Š” ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๊ฐ–์ถ”์—ˆ๊ธฐ์— ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๊ธฐ๋„ ํ•˜๋‹ค.

๐Ÿ’ก react์—์„œ css import ์ ์šฉ ์•ˆ ๋จ

๋ถ„๋ช… npm install react-bootstrap bootstrap๋„ ํ•˜๊ณ , import '์ƒ๋Œ€๊ฒฝ๋กœ'๋„ ํ•ด์คฌ๊ฑด๋งŒ ์ ์šฉ์ด ๋˜์งˆ ์•Š๋Š”๋‹ค.

์ƒ๋‹จ์— import 'bootstrap/dist/css/bootstrap.css';๋ฅผ ์ถ”๊ฐ€๊ธฐ์ž…ํ•˜์ž ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€

์‚ฝ์งˆํ•˜๋Š๋ผ ์•ฝ 5์‹œ๊ฐ„ ๊ฑธ๋ ธ๋‹ค. ํ‚คํ‚ฅ... ๋…ธ๋“œ์—์„œ ejs๋กœ ํ•˜๋‹ค๊ฐ€ ๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“ค๋ ค๋‹ˆ๊นŒ ์€๊ทผ ํ—ท๊ฐˆ๋ฆฐ๋‹ค. ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํผ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ์™€ ๋””๋น„ ์—ฐ๊ฒฐ์„ ํ•ด๋ณด์ž!

๐Ÿฅž saved

  • ํผ ํฌ๊ธฐ๊ฐ€ ์˜น์กธ ๋งž๋‹ค. body width๋ฅผ 100vw๋กœ ํ‚ค์›Œ๋„ ๋ณด๊ณ , form์„ ๊ฐ์‹ผ container width๋ฅผ ๋ฐ”๊ฟ”๋ณด๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ ๊ฟˆ์ฉ ์•Š๋Š”๋‹ค.
  • ๋ฒ„ํŠผ ๊ฐ€์šด๋ฐ ์ •๋ ฌ๋„.. ํ•˜์ง€๋งŒ ์ด ๋ชจ๋“  css๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋‹ค์Œ์— ํ•˜๊ธฐ๋กœ!
profile
์ผ๋‹จ ํ•ด๋ณด๋Š” ํŽธ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€