[๋ฐ๋ธŒ์ฝ”์Šค] ํ˜‘์—… ํˆด๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•๋ก 
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
ํ”„๋กœ์ ํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋„๊ตฌ์™€ ๋ฐฉ๋ฒ•๋ก ์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€ํ‘œ ํ˜‘์—… ํˆด์ธ Trello, Jira, Notion์˜ ํŠน์ง•์„ ๋น„๊ตํ•˜๊ณ , ํŒ€ ๋‹จ์œ„ ํ˜‘์—…์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋ž˜๋‹ ๋ฐ ํƒœ์Šคํฌ ๊ด€๋ฆฌ ๋ฐฉ์‹, ๋งˆ์ง€๋ง‰์œผ๋กœ ํšจ๊ณผ์ ์ธ ํšŒ๊ณ  ๋ฐฉ๋ฒ•๋ก ๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ •๋ฆฌํ•œ๋‹ค!๐Ÿค ํ˜‘์—… ํˆด TrelloTrello๋Š” ์ง๊ด€์ ์ธ ์นธ๋ฐ˜(Kanban) ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ˜‘์—… ํˆด์ด๋‹ค. ๋ฆฌ์ŠคํŠธ์™€ ์นด๋“œ ๋‹จ์œ„๋กœ ์ž‘์—…์„ ๋ถ„๋ฅ˜ํ•˜๋ฉฐ, ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์„ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋‚˜ ๋น„๊ฐœ๋ฐœ ์กฐ์ง์—์„œ ๋น ๋ฅด๊ฒŒ ์ ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.JiraJira๋Š” Atlassian์—์„œ ๊ฐœ๋ฐœํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋‹ค. ์Šคํ”„๋ฆฐํŠธ, ๋ฐฑ๋กœ๊ทธ, ๋ฒ„๊ทธ ํŠธ๋ž˜ํ‚น, ์• ์ž์ผ ๋ณด๋“œ ๋“ฑ ๊ฐœ๋ฐœ ์ค‘์‹ฌ ๊ธฐ๋Šฅ์ด ๊ฐ•๋ ฅํ•˜๋ฉฐ, Jira ..
[๋ฐ๋ธŒ์ฝ”์Šค] ์ธ์ฆ/์ธ๊ฐ€ ์‹œ์Šคํ…œ ์ดํ•ด: ์ฟ ํ‚ค, ์„ธ์…˜, 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..
[๋ฐ๋ธŒ์ฝ”์Šค] RDBMS ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์ •๊ทœํ™” ์ดํ•ด(RDBMS vs NoSQL, PK, FK)
ยท
๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL
1์ฐจ ๋‹จ์œ„๊ธฐ๊ฐ„ ๊ฐ•์˜๋ฅผ ๋ชจ๋‘ ์ˆ˜๊ฐ•ํ–ˆ๋‹ค.๐Ÿ‘๐Ÿ‘๐Ÿ‘๐Ÿ‘๐Ÿ’ฝ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒ, ์ˆ˜์ •, ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์‹œ์Šคํ…œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ •ํ˜•ํ™”๋œ ํ‹€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ณ  ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ •๋ณด์˜ ๊ตฌ์กฐํ™”๋œ ์ง‘ํ•ฉ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์˜ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. DBMSDatabase Management System, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์šด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์‚ฌ์šฉ์ž๋Š” ์ง์ ‘ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ๋Š” ๋Œ€์‹ , DBMS์—์„œ SQL์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, DBMS๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๋œ ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ด€๋ฆฌ์ž ์—ญํ• ..