[๋ฐ๋ธŒ์ฝ”์Šค] BOOK STORE ํ”„๋กœ์ ํŠธ API ์„ค๊ณ„(1)
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/ํ”„๋กœ์ ํŠธ
์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ง„์งœ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ํ• ๋งŒํ•œ๊ฑธ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ํ”„๋ก ํŠธ ์ปค๋ฆฌํ˜๋Ÿผ์€ ์‹œ์ž‘์„ ์•ˆํ•ด์„œ API๋งŒ ์šฐ์„  ๋งŒ๋“œ๋Š” ๋“ฏ? ํ”„๋ก ํŠธ ์—†๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋‹ˆ ๋„ˆ๋ฌด ์–ด์ƒ‰ํ•˜๊ณ  ์–ด์ƒ‰ํ•จ. ์˜ค๋Š˜์€ API ์„ค๊ณ„๋ฅผ ํ•ด๋ณด์•˜๋‹ค.ํšŒ์› APIํšŒ์›๊ฐ€์ž…MethodPOSTURL/joinHTTP status code์„ฑ๊ณต: 201์‹คํŒจ: 400Request Body{ email: "user_email", password: "user_password"}Response Body ๋กœ๊ทธ์ธMethodPOSTURL/loginHTTP status code์„ฑ๊ณต: 200์‹คํŒจ: 400(์ž˜๋ชป๋œ ์š”์ฒญ) 401(๊ถŒํ•œ x)Request Body{ email: "user_email", password: "user_passw..
[๋ฐ๋ธŒ์ฝ”์Šค] ์ธ์ฆ/์ธ๊ฐ€ ์‹œ์Šคํ…œ ์ดํ•ด: ์ฟ ํ‚ค, ์„ธ์…˜, JWT์™€ ๋ณด์•ˆ ํฌ์ธํŠธ
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋‹ค๋ณด๋ฉด, ์‚ฌ์šฉ์ž ์ธ์ฆ๊ณผ ๊ถŒํ•œ ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋ฐ˜๋“œ์‹œ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฟ ํ‚ค, ์„ธ์…˜, JWT์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” ์ธ์ฆ ์ธ๊ฐ€์˜ ๊ฐœ๋…๊ณผ ์ฟ ํ‚ค, ์„ธ์…˜, JWT ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ์–ด๋–ค ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๋Š”์ง€ ์ „์ฒด์ ์œผ๋กœ ์•Œ์•„๋ณด์•˜๋‹ค.๐Ÿ”์ธ์ฆ/์ธ๊ฐ€์ธ์ฆAuthentication, ์‚ฌ์šฉ์ž๊ฐ€ "๋ˆ„๊ตฌ์ธ์ง€" ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ธ์ฆ์€ ์‹œ์Šคํ…œ์— ์ด๋ฏธ ๊ฐ€์ž…๋œ ์‚ฌ์šฉ์ž์ธ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ์ ˆ์ฐจ์ด๋‹ค. ํ”ํžˆ ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ํ†ตํ•ด ์ˆ˜ํ–‰๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ž๊ฒฉ์ฆ๋ช…(์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ธ์ฆ ํ† ํฐ, OTP ๋“ฑ)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž์ž„์„ ํ™•์ธํ•œ๋‹ค. ์˜ˆ์‹œ:์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ๋กœ๊ทธ์ธOAuth๋ฅผ ํ†ตํ•ด ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธAPI ์š”์ฒญ์— ํฌํ•จ..
[๋ฐ๋ธŒ์ฝ”์Šค] ๋ฐฑ์—”๋“œ ํŒŒํŠธ 5
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ express-validator ์‚ฌ์šฉํ•˜๊ธฐ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ž€?์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์š”๊ตฌํ•˜๋Š” ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.express-validator ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌExpress์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.์‚ฌ์šฉ ์˜ˆ์‹œ์ฑ„๋„ ๋“ฑ๋ก API์—์„œ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ตฌํ˜„:.post( [ // userId ํ•„๋“œ ๊ฒ€์ฆ body("userId") .notEmpty() .isInt() .withMessage("์ˆซ์ž ์ž…๋ ฅ ํ•„์š”"), // name ํ•„๋“œ ๊ฒ€์ฆ body("name") .notEmpty() .isString() .wi..
[๋ฐ๋ธŒ์ฝ”์Šค] GUI ํ™œ์šฉ๊ณผ API ์—ฐ๋™์œผ๋กœ ๋ฐฐ์šฐ๋Š” DB ํ™œ์šฉ ์‹ฌํ™”
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
์ง€๊ธˆ๊นŒ์ง€๋Š” Terminal ๊ธฐ๋ฐ˜ CLI๋กœ MariaDB๋ฅผ ๋‹ค๋ค„์™”๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์— ํฐ ๋ถˆํŽธ์€ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ‚ค๋งˆ๋‚˜ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ๋‹ค.์˜ค๋Š˜์€ GUI ๊ธฐ๋ฐ˜ ๋„๊ตฌ์ธ MySQL Workbench๋ฅผ ํ™œ์šฉ์„ ๋ฐฐ์› ๋Š”๋ฐ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ๊ฒช์–ด์„œ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…๋„ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. Workbench ์˜ค๋ฅ˜๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ๊ณผ, ์ƒˆ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค(DB ์—ฐ๋™, ๋ฆฌํŒฉํ† ๋ง)์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.๐ŸฌMySQL GUIMySQL Workbench MySQL Workbench๋Š” SQL ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„, ๊ทธ๋ฆฌ๊ณ  ์œ ์ง€๋ฅผ ์œ„ํ•œ ๋‹จ์ผ ๊ฐœ๋ฐœ ํ†ตํ•ฉ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๋น„์ฃผ์–ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ๋„๊ตฌ MySQL Workbench๋Š” ์ฒ˜์Œ ์จ๋ณด๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค. DB ์ „๊ณต ๊ณผ๋ชฉ์„..
[๋ฐ๋ธŒ์ฝ”์Šค] ์‚ฌ์šฉ์ž-๊ฒŒ์‹œ๊ธ€ ์˜ˆ์ œ๋กœ ๋ฐฐ์šฐ๋Š” ํ…Œ์ด๋ธ” ์„ค๊ณ„์™€ ์ปฌ๋Ÿผ ์†์„ฑ, ์ œ์•ฝ์กฐ๊ฑด
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
๐Ÿ—‚๏ธBoard ์Šคํ‚ค๋งˆ ์ƒ์„ฑCREATE DATABASE Board;USE Board๐Ÿ—‚๏ธ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ” ์ƒ์„ฑ CREATE TABLE users ( -> id INT NOT NULL AUTO_INCREMENT, // PRIMARY KEY ์ถ”๊ฐ€ -> name VARCHAR(30) NOT NULL, -> job VARCHAR(100), -> birth DATE -> ); โŒ์˜ค๋ฅ˜: Incorrect table definitionIncorrect table definition; there can be only one auto column and it must be defined as a keyAUTO_INCREMENT ์†์„ฑ์„ ๊ฐ€์ง„ ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜ ์ด์ƒ์ด๊ฑฐ๋‚˜, PRIMARY KEY ๋˜๋Š” UNI..
[๋ฐ๋ธŒ์ฝ”์Šค] 4์ฃผ์ฐจ ํšŒ๊ณ 
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/ํšŒ๊ณ 
ํšŒ๊ณ : โญโญโญ์ •๋ง์ •๋ง ๋ฐ”์œ ํ•œ์ฃผ์˜€๋‹ค. ๋†€๊ธฐ๋„ ์—ด์‹ฌํžˆ ๋†€๊ณ , ๋…ผ ๋งŒํผ ํ•  ๊ฒƒ๋„ ๋งŽ์•˜๋˜ ์ด๋ฒˆ์ฃผ. ๋ฐ๋ธŒ์ฝ”์Šค 1์ฐจ ๋‹จ์œ„๊ธฐ๊ฐ„์ด ๋๋‚˜๋Š” ์ฃผ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๋ฒŒ์จ ํ•œ๋‹ฌ์ด ์ง€๋‚ฌ๋‹ค๋‹ˆ ๋ฏฟ๊ธฐ์ง€๊ฐ€ ์•Š์Œ...๋‚˜์ด๋ฅผ ๋จน์„์ˆ˜๋ก ์‹œ๊ฐ„์€ ๋น ๋ฅด๊ฒŒ ํ๋ฅด๋Š” ๊ฒƒ ๊ฐ™๊ณ  ์–ด๋ฆด๋•Œ์ฒ˜๋Ÿผ ๋†€๋‹ค๊ฐ€๋Š” ํฐ์ผ๋‚˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์— ์ดˆ์กฐํ•ด์ง€๊ธฐ๋„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์‹œ๊ฐ„์˜ ๋ฐ€๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๊ฒŒ ์ •๋ง ๋งŽ์ด ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค. ๐Ÿ‘Liked1. 1์ฐจ ๋‹จ์œ„ ๊ธฐ๊ฐ„ ๋ฌด์‚ฌ ์ข…๋ฃŒ1์ฐจ ๋‹จ์œ„ ๊ธฐ๊ฐ„์„ ๋ฌด์‚ฌํžˆ ๋๋ƒˆ๋‹ค. ์ฃผ๋ง ์ผ์ •๋„ ๋งŽ๊ณ  ํ‰์ผ์—๋„ ํ•  ๊ฒŒ ๋งŽ์•„ ๋งˆ์ง€๋ง‰ ๊ณผ์ œ ์ œ์ถœ์„ ๊ธˆ์š”์ผ์— ํ–ˆ๋‹ค. ์ดˆ๋ฐ˜์— ๋ฏธ๋ฆฌ ๋ช‡ ๋ฒˆ ๋•ก๊ฒจ๋“ฃ๊ธฐ๋ฅผ ํ•ด์„œ ๋ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ๋๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋“ฏ. ๋‹ค์Œ ๋‹จ์œ„ ๊ธฐ๊ฐ„์—๋„ ํ˜น์‹œ ๋ชจ๋ฅผ ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•ด์„œ ํ‹ˆํ‹ˆํžˆ ์—ด์‹ฌํžˆ ๊ฐ•์˜๋ฅผ ๋“ค์–ด๋†”์•ผ๊ฒ ๋‹ค. 2. ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ์ œ๋ฅผ ๋‚ด์ฃผ์…จ..