๊ฐœ๋ฐœ๊ตฌ๋ฆฌ๐Ÿธ

๋…ธ๋“œ ํ•™์Šต 15์ผ์ฐจ

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿธ ๊ด€๊ณ„ ์ฟผ๋ฆฌ SQL์˜ JOIN์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‹œํ€„๋ผ์ด์ฆˆ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. include ์‹œํ€„๋ผ์ด์ฆˆ์˜ ์กฐํšŒ ๊ธฐ๋Šฅ์— include ๋ฅผ ํ†ตํ•ด JOIN ๊ณผ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. const user = await User.findOne({ include:[ { ...

๋…ธ๋“œ ํ•™์Šต 14์ผ์ฐจ

์‹œํ€„๋ผ์ด์ฆˆ ์ฟผ๋ฆฌ ํ•จ์ˆ˜ ์ •๋ฆฌ ์ƒ์„ฑ Model.create() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ. await ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€์ˆ˜๋กœ ์ €์žฅ ๊ฐ€๋Šฅ. ์˜ˆ์‹œ) const user = await User.create( { username: 'alice123', isAdmin: true, }, { fields: ['username'] }, )...

๋…ธ๋“œ ํ•™์Šต 13์ผ์ฐจ

๋ชฉ์ฐจ ์‹œํ€„๋ผ์ด์ฆˆ ์„ค์น˜๋ฐฉ๋ฒ• ์‹คํ–‰ ํ™˜๊ฒฝ ์„ค์ • ๊ด€๊ณ„ ์ •์˜ ์‹œํ€„๋ผ์ด์ฆˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์œผ๋กœ DB ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋•๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ORM(Object-Relational Mapping) ์„ค์น˜ ๋ฐฉ๋ฒ• npm i sequelize sequelize-cli ์—ฌ๊ธฐ์„œ sequelize ๋Š” ์‹œํ€„๋ผ์ด์ฆˆ ๋ชจ๋“ˆ์˜ ๋ณธ์ฒด๊ณ  sequeliz...

๋…ธ๋“œ ํ•™์Šต 12์ผ์ฐจ

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿธ ํ…œํ”Œ๋ฆฟ ์—”์ง„ ๋„Œ์ ์Šค (nunjucks) ๋„Œ์ ์Šค ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ์„ธํŒ… ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. npm i nun nunjucks ์„ค์น˜ํ•œ ๋„Œ์ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด app.js ์—์„œ ๋ช…์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ... const express = require('express'); const nunjucks = require('...

Input ํŒŒ์ผ ํƒ€์ž… ์ œํ•œํ•˜๊ธฐ

ํŒŒ์ผ ์—…๋กœ๋“œ์˜ ํ™•์žฅ์ž๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ๋Š” HTML์—์„œ ๋ถ€ํ„ฐ ํ™•์žฅ์ž๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŠน์ •ํ•œ ํ™•์žฅ์ž๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ๋•Œ๋กœ๋Š” ํŠน์ • ์œ ํ˜•์˜ ํƒ€์ž…์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ™•์žฅ์ž ์ •๋ณด๋Š” IANA ์—์„œ ์ •ํ•œ MIME ํƒ€์ž…์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ : https://www.iana.o...

Burp Suite ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿธ ๋ช‡ ๋‹ฌ ํ›„ ๋ณด์•ˆ ์ทจ์•ฝ์  ์—…๋ฌด์—์„œ ํ—ˆ๋•์ผ ์ €์™€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ ๋ถ„๋“ค์„ ์œ„ํ•ด ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ์ฐจ ์„ค์น˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์‹œ์ž‘ ํ”„๋ก์‹œ ํ™˜๊ฒฝ ์„ค์ • ์ „์šฉ ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์šฉํ•˜๊ธฐ ์œˆ๋„์šฐ ํ”„๋ก์‹œ ์‚ฌ์šฉํ•˜๊ธฐ ํฌ๋กฌ ํ™•์žฅํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉํ•˜๊ธฐ(์ถ”์ฒœ) ...

Next.js ๊ณต๋ถ€ํ•˜๊ธฐ 7์ผ์ฐจ

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿธ ์š”์ฆ˜ ๋‹ค์‹œ ๋ฐ”์œ ์—…๋ฌด์™€ ํ—ค์ดํ•ด์ง„ ์ •์‹ ๋ ฅ์œผ๋กœ ์ธํ•ด ๊ฒŒ์œผ๋ฅธ ์ œ๊ฐ€ ๋˜ ๊ณต๋ถ€๋ฅผ ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Dynamic metadata ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ์‹œ๊ธ€์˜ ์ƒ์„ธ๋ณด๊ธฐ, ์˜ํ™” ์ •๋ณด ํŽ˜์ด์ง€ ๋“ฑ๊ณผ ๊ฐ™์ด ์–ด๋– ํ•œ ์ •๋ณด์˜ ์ƒ์„ธ ํŽ˜์ด์ง€์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋Œ€...

ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ ์‹œ ํ…Œ์ด๋ธ” ํ™•์ธ์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค

๋ชฉ์ฐจ ์š”์•ฝ ์ƒํ™ฉ ์›์ธ ์š”์•ฝ ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ ์‹œ์—๋Š” ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์˜ ์œ ํšจ์„ฑ๋งŒ์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ƒํ™ฉ ์ต์ผ ์—…๋ฌด๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœDB์—์„œ ํ…Œ์ŠคํŠธ ํ–ˆ๋˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์šด์˜DB์—๋„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ ํ•˜์ง€๋งŒ SELECT ํ•˜๋Š” ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํ”„๋กœ์‹œ์ €๋ฅผ ์ƒ์„ฑ ํ–ˆ๊ณ  ์—๋Ÿฌ ์—†์ด ์ •์ƒ ์ƒ์„ฑ๋จ์—์„œ ์˜์•„ํ•จ์„ ๋А๋‚Œ ์›...

์ž๋ฐ”์˜ ์˜ˆ์™ธ ๊ตฌ์กฐ์™€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๋ชฉ์ฐจ Throwable ์˜ ์ƒ์† ๊ตฌ์กฐ ์˜ˆ์™ธ(Exception) ์™€ ์—๋Ÿฌ(Error) ์ฒดํฌ ์˜ˆ์™ธ(Checked Exception) ์™€ ์–ธ์ฒดํฌ ์˜ˆ์™ธ(Unchecked Exception) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• Throwable ์˜ ์ƒ์† ๊ตฌ์กฐ ์˜ˆ์™ธ์™€ ์—๋Ÿฌ์˜ ์ƒ์† ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://programmers.io/...

์ธ๊ธฐ ํƒœ๊ทธ