์ค๋๋ถํฐ ๊ฐ์๊ธฐ ์์ํ๊ฒ ๋ ํ ์ด ํ๋ก์ ํธ. ๋จธ๋ฆฟ์์ ๊ตฌํํ ๊ฑด ๊ฝค๋ ํ๋ก์ ํธ์ธ๋ฐ ์๋ง ์ค์ ๋ก ๊ตฌํํ๋ค ๋ณด๋ฉด ์๊ณ ์์คํ ์ฅ๋๊ฐ ์ ๋๊ฐ ์๋๊น ์ถ๋ค. ์ฅ๋๊ฐ ๊ฐ์ง๊ณ ๋ ธ๋ ๊ฑด ์ฌ๋ฐ์ผ๋๊น ์คํ๋ ค ์ข์... ๐
์ฅ๋๊ฐ ๋์ด์ ์ญ์ ์ฌ๋ฐ๋ ๊ฒ ์ ์ผ์ด๋ค. ํผ์ง๋งํ๊ฒ 3๊ฐ์ง๊ฐ ์๊ฐ๋ฌ๋ค.
์ด์ฌํ ์ฝ๋ฉ ๋ฐฐ์์ ์ฌ์ฅ๋๊ป ์ง์ ํ๊ณ ๋ณด์ฌ์ค ์๊ฐ์ ํด๋ดค๋์ง๋ผ.. ์์ฐํ ๋ ์ค๋ฆ. ํด๋ณธ๋ค๋ฉด ์์ฝ ๊ด๋ฆฌ์ ๋ฐํคํธ ์ํ ํ๋งค๋ชฐ์ฒ๋ผ ๋ง๋ค์ด์ผ์ง ์์๊น ์ถ๋ค. ํ์ง๋ง ์ผํ๋ชฐ์ ๋น๋กฏํ ์ํ ํ๋งค๋ชฐ์ ์ด์ํ๊ฒ ๋ด ๋ง์์ด ๋ฐ์ํ์ง ์์. ๐ง
์ด ํ์ ์๊ธํธ๋นต(...๐คซ)์์ ์ด๋ค ํ๊ฑธ์ด ๋์ ๋ถ๋ค ์ค์ผ์ค ๋ชจ์ ์ฌ์ดํธ๋ ๊ณต์ง๋ฐฉ์ด ๋ฐ๋ก ์๋๋ ์ง๋ฌธ์ ์๋ค๋ ๋ต๋ณ์ด ๋์์๋ค. ์ ๋ณด ๋ชจ์๋ค๊ฐ ๋ ์ง๋ณ/๋ฉค๋ฒ๋ณ ํ์ธ+์ ์ฒญ ์ฌ์ดํธ ๋งํฌ ์ฐ๊ฒฐ๊น์ง ํ๋ฉด ์ด๋จ๊น ์ถ์๋. ๊ทผ๋ฐ ๊ธฐ๋ฅ์ ์ผ๋ก ํ ์ ์๋ ๊ฒ ์์ ๊ฑฐ ๊ฐ์์ ์ฌ์ดํธ ์ ์ง๊ฐ ํ๋ค ๊ฒ ๊ฐ์๋ค. ์๊ณ ๋ก ์ฌ์ฉํ๋ ์ฌ๋์ด ์์ด์ผ ๋ง๋๋ ์ฌ๋์๊ฒ๋ ์๋ฏธ๊ฐ ์์ผ๋๊น.
4๋ ๋๊ฒ ํ ์ฌ์ดํธ(1)์์ ์๋ํฐ๋ก ๊ธ์ ์ผ๊ณ , ์๊ทธ๋งํ ์ํ ๋ฆฌ๋ทฐ ์ฌ์ดํธ(2)์์ ๊ธ ์ด ์ง๋ 2๋ ๋ฐ ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ ํ๋ซํผ ๋ชจ๋ ๊ณ ์ง์ ์ธ ๋ถํธํจ์ด ์์๋ค. ์ฌ์ฉ์ ์ ์ฅ์์๋ ๊ธ์ฐ๊ธฐ์ ๊ธ ์ฝ๊ธฐ๊ฐ ๊ฐ์ฅ ์ฃผ๋ ์์ ์ธ๋ฐ ๋ณต๋ถ๋ ์ด๋ ต๊ณ ๊ธ์ฐ๋ ๊ณต๊ฐ์ ๊ธฐ๋ฅ์ด ๊ณผํ๊ฒ ๋ง์ ๊ฒ์ ๋นํด ์์ฃผ ์ฐ๋ ๊ฑด ํ ๋๊ฐ์ง๋ผ, ๊ทธ ์๊ทธ๋งํ ์์ด์ฝ๋ค ํ์์ ์ฐพ๊ธฐ๊ฐ ํ๋ค์๋ค.
์ด๋ณด๋ค ๋์ ๊ฒฝํ์ผ๋ก๋ ๋ธ๋ฐ์น๊ฐ ์๋ค. ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ๋ ์๋ฌด๋๋ ๊ธ ์์ฒด์ ์ง์คํ ํ๋ซํผ์ด ์๋๋ค๋ณด๋ ๋ค์ด๊ฐ๋ ๊ณผ์ ์ด ์๊ฐ๋ณด๋ค ๊ท์ฐฎ๋ค. ํธ์ง๊ธฐ๊ฐ ์์ ๋ณด๋ค ํจ์ฌ ์ข์์ง๊ธด ํ์ง๋ง..
๋ฆฌ๋ทฐ ํ๋๋ง์ผ๋ก๋ ์ฌ์ฌํ ๊ฒ ๊ฐ์์ ์์ฑ ํผ๋์๋ ํค๋
ธ๋ผ์ด์ธ ์ฒ๋ผ ํ์คํ ํ์์
๋น์ฆ๋์ค๋ ํจ๊ป ๋ฒ๋ฌด๋ฆฌ๋ ๊ฒ ์ด๋จ๊น ์ถ์๋ค. ์์ ์ธ๊ธํ (2)์ ๋ฉ์ธ UI๊ฐ ๊ท๊ฒฉ๋ง ์ข์ฉ ๋ค๋ฅธ ์ํ ํฌ์คํฐ์๋๋ฐ, ์ด๊ฒ ์ด์ํ ํผ๋ก๊ฐ์ ์ ๋ฐํ๋ค. ์๋น์ทํ๊ฒ ๋ค ๋๊ฐ์ ๊ฒ๋ง ๋ฐ๋ณต๋๋๊น ๊ทธ ๋ฌด์๋ ๊ถ๊ธํ์ง ์์๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ง์๋ฐ ๋ช
์นญ์ด ์ง๊ด์ ์ด๊ฑฐ๋ ์
์ ์ฐฉ ๋ฌ๋ผ๋ถ์ง ์์์ ๋ฒ์ก์ค๋ฝ๊ธฐ๋ ํ๊ณ .
์ด๋ ๋ฏ ๋ฌธ์ ์ ๊ฐ์ ์ , ๋น์ฆ๋์ค ๋ชจ๋ธ์ ์์ตํ ๊ฐ๋ฅ์ฑ ๋ฑ์ ์ข ํฉ์ ์ผ๋ก ๊ณ ๋ คํ๋ค ๋ณด๋ ์ด๊ฑธ ํ๊ณ ์ถ๊ตฌ๋ ํ๋ค.
๊ธฐํ์ ์ข์ํด์ ๊ทธ๋ฐ๊ฐ ํ๋ฉด ํ๋ฆฌ๋ฆญ ๊ตฌ์ํด์ ๊ตฌ๊ธ๋งํ๋ฉฐ ๋งจ๋ ์ ํค๋ฉํ๋ ๋ฐฉ์์ ์ ๋ง๋ ๋ฏํ๋ค. ๋ด๊ฐ ์ฌ๋ฐ์ด ํ๋ ๊ฑธ ๊ฐ๋ฐํ๋ ๊ฒ ์ข์ง๋ง, ์ฌ์ ํ ํ ์ ์๋ ๋ด์ฉ์ผ๋ก๊น์ง ๊ตฌ์ฒดํํ ์ ์์ด์ผ ์์์ด ์๊ธด๋ค.
๋ฆฌ์กํธ๋ก ํ๋ก ํธ์๋๋ฅผ, ๋ ธ๋๋ก ์๋ฒ๋ฅผ ์ฒ๋ฆฌํ ๊ฑฐ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ MySQl sequelize ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ!
๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ๋ฅผ ํด๋๊ฐ๋ ๊ณผ์ ์์ ๋ ์ถ๊ฐ๋ ์์ ..
๋๋ง ์์๋ณผ ์ ์๋ ์ด์..
๋ ํผ๋ฐ์ค๋ก ํค๋ ธ๋ผ์ด์ธ ์ ๋ธ๋ฐ์น๋ฅผ ์ผ์๋ค.
๋ธ๋ฐ์น๋ ์๋ UI๊ฐ ๊น๋ํ๋ค. ๊ธ์ฐ๋ ๊ณต๊ฐ๋ ๊ทธ๋ ๊ณ . ๋ค๋ง ์น์ ์ต์ ํ๋์ด์๋ค๋ ๋๋์ด๋ค. ๋ชจ๋ฐ์ผ ๋ฒ์ ์ ๋ด ๊ธ์ ํ์ธํ๋ฌ ๊ฐ๋ ๊ณผ์ ์ด ์กฐ๊ธ ๋ฒ์กํ๊ณ ์ง๊ด์ ์ด์ง ๋ชปํด์ ์ค๋ซ๋ง์ ๋ชจ๋ฐ์ผ๋ก ๋ค์ด๊ฐ๋ฉด ๋ ํท๊ฐ๋ฆฐ๋ค.
์ฌ๊ธฐ์ ๋ฐฉํฅ์ฑ์ด ์กํ๋ค. ์ฌ์ฉ์์ ์ฌ์ดํธ ์ด์ฉ ๋ชฉ์ ์ด ๊ธ์ฐ๊ธฐ๋ผ๋ ์ ์ ์ง์คํด ๊ธ ์ฐ๋ฌ ๋ค์ด์ค๊ณ ๋ฐํํ๊ธฐ๊น์ง์ ์ ๊ณผ์ ์ ์ต๋ํ ์ฝ๊ฒ ๊ตฌํํ๋ ๊ฒ ๋ชฉํ๋ค. ๊ธ์ฐ๋ ๊ณต๊ฐ์ด ์ฝ๊ณ ๊ฐ๋จํ ๋ฟ๋ง ์๋๋ผ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๋ฌผ๋ก , ๋ด๊ฐ ์ด ๊ธ์ ํ์ธํ๋ ๊ฒ๋ ์ฌ์์ผ ํ๋ค.
ํค๋ ธ๋ผ์ด์ธ ๋ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ด ๊ฐ๋จํ๋ค๊ณ ๋๊ผ๋ค. ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๋ณ๋์ ๋งํฌ๋ก ๊ตฌ๋ถํ์ง ์๊ณ , ๋ง์ดํ์ด์ง๋ผ๋ ๊ณณ์์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ค. ์์ ํ์๊ฐ์ /๋ก๊ทธ์ธ์ด ์ ์ผ ๊ฐ๋จํ๋๊น ๋ํ ์์ (์นด์นด์คํก, ๋ค์ด๋ฒ, ํ์ด์ค๋ถ, ๊ตฌ๊ธ)๋ก ์ ๋ํ๋ ์ด๋ฉ์ผ ์ ํ์ง๋ฅผ ์ตํ๋ก ๋จ๊ฒจ๋๋ค.
ํฐ ์ฐจ์ด์ ์ด ์๋ค๋ฉด ์นด์นด์ค๋ ์ฃผ๋ก ๋ฐฐ๋ ๊ด๊ณ ๋ฅผ ์์ฃผ์ด๊ณ , ํค๋ ธ๋ผ์ด์ธ ๋ ํ์ ๊ด๊ณ ๋ก ์์ํ๋ค๋ ์ ์ด๋ค. ์๋ณธ์ ์ฐจ์ด๋ฅผ ์๊ฐํ๋ฉด ์ด๋ค ๋ฉด์์๋ ๋ณ ์ ์๋ค์ง๋ง.. ์ฌ์ฉ์์ ํธ์์ฑ์ ์ต์ฐ์ ๋ชฉํ๋ก ๋๊ณ ์ถ์ด์ ๋ฐฐ๋ ๊ด๊ณ ์์ฃผ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ค.
๋๋ ์ฝ๋ผ๋ณด๋ ์ด์ ์ ๋ง์ด ํ๋ ์ชฝ์ผ๋ก ๊ตฌํํ๊ณ ์ถ๋ค. ์ฌ์ดํธ์ ๋ํ ์ปจ์ ์ ์ธ ๊ฐ์ง๋ค: ์ํ, ๊ธ, ๋ถ์๊ธฐ. ๋ถ์๊ธฐ๋ ๋ค์ํ๊ฒ ์ฎ์ ์ ์๋ค. ๋ฌต์งํ๊ณ ๊ณ ๊ธ์ค๋ฌ์ด ์ชฝ์ผ๋ก ๊ฐ์๋ฉด ์์ธ์ด๋ ๋งฅ์ฃผ ๊ฐ์ ์ฃผ๋ฅ๋ ์ฑ , ๊ฐ๋ณ๊ณ ํํคํ ๋๋์ ์ด๋ชจํฐ์ฝ. ์ ๋ฐ๋์ฒ๋ผ ๋ณด์ด์ง๋ง ์ ๋์ ์๊ฐ๋ณด๋ค ๊ทธ๋ ๊ฒ ๋ค๋ฅด์ง ์๋ค๊ณ ๋ณธ๋ค. ์ํ์ ๊ธ์ ์จ๊ฐ ๊ฒ์ ์์ฐ๋ฅด๋ฏ์ด.
๋ฉ์ธ ํ๋ฉด๋ถํฐ ์์ํ ์๋์ผ๋ก ๋ฅํ๊ฒ ๊ณ ๋ฏผํ๋ ๊ฑด๋ฐ ๋ง์ ์์ํด๋ณด๋ ์ต๊ทผ ๋ ธ๋ ๋ฐฑ์๋ ์์ ์ ํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๋ค๋ค๋ณธ ํ์๊ฐ์ ๊ณผ ํผ์ ๋ฆฌ์กํธ์ ์ฐ๊ฒฐํด์ ๊ตฌํํด ๋ณด๋ ๊ฒ ์ฒซ ๋จ์ถ ๊ฟฐ๊ธฐ ์ข์ ๋ฏํ๋ค.
๋ฐฑ๊ณผ ํ๋ก ํธ ๋ชจ๋๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ ํด๋ ๊ตฌ์กฐ๊ฐ ํ์์๋ค.
์ ๋ฆฌํด๋ณด์๋ฉด ์ด๋ ๋ค.
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๊น์ง ํ๋์ง๋ผ ๊ฐ์ ์ฒ์ง๋ผ๋ฉด ์ด ํฌ์คํ ์ ์ฐธ๊ณ ํ๊ธธ.
๐ธ ํ๊ธ๊ณผ ์ด๋ชจ์ง ๋ชจ๋ ํฌํจ๋ ์ต์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
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
);
PK์ฒ๋ผ ์ค๋ณต๋์ง ์๋ ๊ฐ์ ๊ฐ์ง๋ค. ๊ทธ๋ฐ๋ฐ null ๊ฐ ํ์ฉํ๊ณ ํ ํ ์ด๋ธ์ ์ฌ๋ฌ ๊ฐ ๊ฐ์ง ์ ์์. ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฉ์ดํ๋๊น ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ, ๋๋ค์ ๋ชจ๋ ์ ๋ํฌ ํค๋ก ์ถ๊ฐ ์ค์ ํด ๋์๋ค.
์ ํ๋์ ์ถ๊ฐํ๋ค๋ฉด modify ๋์ add! ๊ฒธ์ฌ๊ฒธ์ฌ ๋ฐ์ดํฐํ์ ์ ํฌ๊ธฐ๋ ํต์ผํ๋ค.
-- ๊ธฐ์กด ํ๋์ ์ ๋ํฌ ํค ์ค์
alter table member modify column nickname varchar(30) not null unique;
๊ทธ๋ฆฌ๊ณ sequelize ๊ฐ์ฒด๋ฅผ ์ด์ฉํด mysql๊ณผ Node๋ฅผ ์ฐ๊ฒฐํ๋ ์์ ๊น์ง ํด์คฌ๋ค.
์ด์ ๋ฆฌ์กํธ๋ก ๋์ด๊ฐ์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ์. input์ ์ง์ ๋ง๋ค๊น ํ๋ค๊ฐ ํ๋ก์ ํธ ํ๋ฉด์ ๊ธฐ์ ์ต์ํด์ง๋ ๊ฒ ์ข์ผ๋๊น ๋ถํธ์คํธ๋ฉ์ ์ฐ๊ธฐ๋ก ํ๋ค.
npm i react react-router-dom
์ผ๋ก ๋ผ์ฐํฐ ์ค์ ๋ ํด์ฃผ์. ๋ฆฌ์กํธ๋ ํ์ด์ง๋ฅผ ์ปดํฌ๋ํธ๋ก ๋ง๋ค์ด์ ๋ผ์ฐํฐ๋ฅผ ํตํด ๋งค๋๋ฌ์ด ํ์ด์ง ์ด๋์ ๊ตฌํํ๋ค. ๋ฌผ๋ก ๊ฐ์ ๋์ด ์๋ณธ ๋๊ณผ ๋น๊ตํด ๋ฌ๋ผ์ง ์ ๋ง ์ฌ๋ ๋๋งํ๋ ๋์ ์๋ฆฌ๋ฅผ ๊ฐ์ถ์๊ธฐ์ ๊ฐ๋ฅํ ๊ฒ์ด๊ธฐ๋ ํ๋ค.
๋ถ๋ช
npm install react-bootstrap bootstrap
๋ ํ๊ณ , import '์๋๊ฒฝ๋ก'
๋ ํด์คฌ๊ฑด๋ง ์ ์ฉ์ด ๋์ง ์๋๋ค.
์๋จ์ import 'bootstrap/dist/css/bootstrap.css';
๋ฅผ ์ถ๊ฐ๊ธฐ์
ํ์ ํด๊ฒฐ๋์๋ค.
์ฝ์งํ๋๋ผ ์ฝ 5์๊ฐ ๊ฑธ๋ ธ๋ค. ํคํฅ... ๋ ธ๋์์ ejs๋ก ํ๋ค๊ฐ ๋ฆฌ์กํธ๋ก ๋ง๋ค๋ ค๋๊น ์๊ทผ ํท๊ฐ๋ฆฐ๋ค. ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํผ ์ ํจ์ฑ๊ฒ์ฌ์ ๋๋น ์ฐ๊ฒฐ์ ํด๋ณด์!