๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

npx express-generator ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.์ฐธ๊ณ ๋กœ, Express๋Š” Node.js๋ฅผ ์œ„ํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค!express-generator๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋งŒ ์ƒ์„ฑํ•˜๊ณ , dependencies(์˜์กด์„ฑ)๋Š” ์ž๋™์œผ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋“ค์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.npm install # ์˜์กด์„ฑ ์„ค์น˜npm start # ์„œ๋ฒ„ ์‹คํ–‰ ์ƒ์„ฑ๋œ Express ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ.โ”œโ”€โ”€ app.jsโ”œโ”€โ”€ binโ”‚ โ””โ”€โ”€ wwwโ”œโ”€โ”€ package.jsonโ”œโ”€โ”€ publicโ”‚ โ”œโ”€โ”€ imagesโ”‚ โ”œโ”€โ”€ javascriptsโ”‚ โ””โ”€โ”€ stylesheetsโ”‚ โ””โ”€โ”€ style.cssโ”œโ”€โ”€ routes..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜• ๋ณ€ํ™˜ (type conversion)์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ, ํ•จ์ˆ˜์™€ ์—ฐ์‚ฐ์ž์— ์ „๋‹ฌ๋˜๋Š” ๊ฐ’๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ ์ ˆํ•œ ์ž๋ฃŒํ˜•์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜๋œ๋‹ค. let a = "5";let b = "10";// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๋น„๊ตํ•จconsole.log(a > b); // false ("5"์™€ "10"์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ 5 > 10์„ ๋น„๊ต)alert( "6" / "2" ); // 3, ๋ฌธ์ž์—ด์ด ์ˆซ์žํ˜•์œผ๋กœ ์ž๋™๋ณ€ํ™˜๋œ ํ›„ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰let result = 5 + "10"; // "510"์ด ๋จhttps://ko.javascript.info/type-conversions ํ˜• ๋ณ€ํ™˜ ko.javascript.info    parseInt์ž๋™์œผ๋กœ ํ˜• ๋ณ€ํ™˜์„ ํ•ด์ค„ ๋•Œ๊ฐ€ ๋งŽ์ง€๋งŒ, ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™..
Express.js๋Š” Node.js ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ. ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ์„ค์ •๊ณผ API ์—”๋“œํฌ์ธํŠธ ์ •์˜๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.https://www.npmjs.com/package/express expressFast, unopinionated, minimalist web framework. Latest version: 4.19.2, last published: 5 months ago. Start using express in your project by running `npm i express`. There are 85293 other projects in the npm registry using express.www.npmjs.comnpm i express Express ์„œ๋ฒ„ ์„ค์ •con..
Node.jsNode.js์˜ ์—ญํ• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”Œ๋žซํผ.์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์ด์ƒ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•จ.Node.js์˜ ํ™œ์šฉ๋ฐฑ์—”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ:ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›ŒํฌReact์™€ Vue ๋“ฑ์€ Node.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ ๋ฐ ๊ฐœ๋ฐœ ๋„๊ตฌ ์ฒด์ธ์„ ์ œ๊ณต. Node.js๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚นI/O ๋ชจ๋ธ์„ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค! ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํŠน์„ฑ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์ž์ฒด๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ์„ค๊ณ„๋˜์–ด์žˆ๋‹ค. ์ฆ‰, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฒคํŠธ ๋ฃจํ”„Node.js๋Š” ์‹ฑ๊ธ€ ์Šค..
๋ชจ๋“ˆ(Module)ํŠน์ • ๊ธฐ๋Šฅ์„ ์บก์Šํ™”ํ•œ ์ฝ”๋“œ์˜ ๋ธ”๋ก ๋˜๋Š” ํŒŒ์ผ. ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ฝ”๋“œ์˜ ์กฐ์งํ™”๋ฅผ ๋•๋Š”๋‹ค.1. ๊ธฐ๋ณธ ๋‚ด์žฅ๋œ ๊ฒƒNode.js์—๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.setTimeout()fs, http, path ๋“ฑ.2. ์™ธ๋ถ€ ๋ชจ๋“ˆNode.js ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ธ NPM(Node Package Manager)์„ ํ†ตํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.์„ค์น˜ ํ›„ ํ”„๋กœ์ ํŠธ์—์„œ ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Node.js์—์„œ exports๋Š” ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๊ณ  ์™ธ๋ถ€๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.๋‹ค๋ฅธ ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ์—์„œ ์ •์˜๋œ ๋ชจ๋“ˆ์€ require๋กœ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์˜ ์ง‘ํ•ฉ. ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉ.์ œ์–ด๊ถŒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ๋‹ค! ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ..
API (Application Programming Interface)์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ์„œ๋กœ ํ†ต์‹ ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ทœ์น™ ์ง‘ํ•ฉ! Interface์ธํ„ฐํŽ˜์ด์Šค๋ž€? ํ•˜๋‚˜์˜ ์‚ฌ๋ฌผ์ด ๋‹ค๋ฅธ ์‚ฌ๋ฌผ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. CLI, GUI์—์„œ ์‚ฌ์šฉํ•˜๋“ฏ! ์ธํ„ฐํŽ˜์ด์Šค๋Š” '๋งค๊ฐœ์ฒด'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. REST APIREST API ๋Š” REST์›์น™์„ ๋”ฐ๋ฅด๋Š” API, HTTP ๊ทœ์•ฝ์„ ์ž˜ ๋”ฐ๋ฅธ API๋‹ค.์•„๋ž˜์˜ ๊ธ€์— REST API์™€ URI์— ๋Œ€ํ•ด ์ƒ์„ธํžˆ ์ •๋ฆฌํ•œ ๋ฐ” ์žˆ๋‹ค.https://yesolz.tistory.com/entry/REST-API-URI-%EC%84%A4%EA%B3%84-%EA%B7%9C%EC%B9%99 REST API URI ์„ค๊ณ„ ๊ทœ์น™API ๋„ค์ด๋ฐ์„ ํ•˜๋‹ค๊ฐ€ ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ๋‹ค. [PUT] ..
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (Database; DB)๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ฒด๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๋ง‰๊ณ , ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ DBMS (DataBase Management System)๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ์กฐ์ž‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ๊ด€๊ณ„ํ˜• DBMS (RDBMS): MySQL, PostgreSQL, Oracle, Microsoft SQL Server ๋“ฑ.๋น„๊ด€๊ณ„ํ˜• DBMS (NoSQL): MongoDB, Cassandra, Redis ๋“ฑ. SQL (Structured Query Language)๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ์‚ฐ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.INSERT, SELECT, ..
๋ฐฑ์—”๋“œ ๊ตฌ์กฐ   ์›น ์„œ๋ฒ„ (Web Server)์›น ์„œ๋ฒ„๋Š” ์ •์  ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ๋Œ€์‘ํ•จ๋™์  ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌ* ์ •์ ํŽ˜์ด์ง€: ํ™”๋ฉด์˜ ๋‚ด์šฉ/๋ฐ์ดํ„ฐ ๋“ฑ์˜ ๋ณ€๋™์ด ์—†๋Š” ํŽ˜์ด์ง€* ๋™์ ํŽ˜์ด์ง€: ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ/์—ฐ์‚ฐ์„ ํ†ตํ•ด ํ™”๋ฉด์˜ ๋‚ด์šฉ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•˜๋Š” ํŽ˜์ด์ง€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Web Application Server, WAS)๋Š” ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ/์ˆ˜์ •/์‚ญ์ œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์š”์ฒญ* ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ฒด-> ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ํฌ์ปค์‹ฑ ! Node.jsNode.js๋Š” JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ ๋ฐ–์—์„œ๋„ ์‚ฌ์šฉ..
๊ฐœ์š” ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ํ•˜๋Š”๋ฐ, ์ฒซ ํŽ˜์ด์ง€์— ๋‚˜์˜จ ์•„์ดํ…œ์ด ๋‘๋ฒˆ์งธ ํŽ˜์ด์ง€์—๋„ ๋…ธ์ถœ๋˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค. (๊ณ ์œ ํ•œ ์•„์ดํ…œ์ด๋ฏ€๋กœ ํ•œ๋ฒˆ๋งŒ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.) ๋˜ํ•œ ์ด์Šˆ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ, 5๊ฐœ, 10๊ฐœ, 15๊ฐœ์”ฉ ๋“ฑ ๋ณด๋„๋ก ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋…ธ์ถœ๋˜๋Š” ๋ฌธ์ œ๋„ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค. (์›๋ž˜๋Š” 5๊ฐœ -> 10๊ฐœ ์„ ํƒ ์‹œ ์œ„์— 5๊ฐœ๋Š” ๋ณ€ํ•จ์ด ์—†๊ณ  ๋ฐ‘์— 5๊ฐœ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์‹์œผ๋กœ ์ž‘๋™ํ•ด์•ผํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ด๋‹ค.) ๋ฐฑ์—”๋“œ ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, ์ •๋ ฌ ๊ธฐ์ค€์ด NULL๊ฐ’์ด๊ฑฐ๋‚˜ ์ค‘๋ณต๋œ ๊ฐ’์ผ ๋•Œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋กœ์ง์ด ์—†์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋“ค์„ ์ž„์˜์˜ ์ˆœ์„œ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์–ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๋ฌธ์ œ์˜€๋˜ MyBatis ์ฟผ๋ฆฌ B.STATUS_DATE IS NULL ASC, B.STATUS_DATE ${sortDirecti..
API ๋„ค์ด๋ฐ์„ ํ•˜๋‹ค๊ฐ€ ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ๋‹ค.[PUT] /urls/{id}/move๊ณผ [PUT] /urls/move/{id} ์ค‘ ์–ด๋–ค ๊ฒŒ ๋” ๋‚˜์€์ง€ ๋ง์ด๋‹ค.์ด๋ฅผ ์œ„ํ•ด ๊ตฌ๊ธ€๋ง์„ ํ•˜๋‹ค๊ฐ€, REST API URI๋ฅผ ๋””์ž์ธํ•˜๋Š” ๊ทœ์น™ ํ˜น์€ ์ปจ๋ฒค์…˜์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.  REST API์™€ URIREST API๋Š” Representational State Transfer (ํ‘œํ˜„ ์ƒํƒœ ์ „์†ก)์˜ ์•ฝ์ž์ด๋ฉฐ, ์›น ๊ธฐ๋ฐ˜์˜ ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๋‹ค. ์ด ๋ฐฉ์‹์€ ์ž์›(Resource)์˜ ์ƒํƒœ๋ฅผ HTTP ๋ฉ”์†Œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ๊ฐ ์ž์›์€ ํŠน์ •ํ•œ URI(Uniform Resource Identifier, ํ†ต์ผ๋œ ์ž์› ์‹๋ณ„์ž)์— ์˜ํ•ด ์‹๋ณ„๋œ๋‹ค.U..
yesolz
'๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก