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..
๐ฉ๐ป๐ป Dev/Back-End
์๋ฐ์คํฌ๋ฆฝํธ ํ ๋ณํ (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๋ฅผ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ ๋ฐ์์๋ ์ฌ์ฉ..
[ํธ๋ฌ๋ธ์ํ
] ์ ๋ ฌ ๊ธฐ์ค์ด null๊ฐ์ด๊ฑฐ๋ ์ค๋ณต๋ ๊ฐ์ผ ๋, ์ ๋ ฌ ๋๋ค์ผ๋ก ๋ ๋
๊ฐ์ ๋ชฉ๋ก ์กฐํ๋ฅผ ํ๋๋ฐ, ์ฒซ ํ์ด์ง์ ๋์จ ์์ดํ
์ด ๋๋ฒ์งธ ํ์ด์ง์๋ ๋
ธ์ถ๋๋ ์ด์๊ฐ ์์๋ค. (๊ณ ์ ํ ์์ดํ
์ด๋ฏ๋ก ํ๋ฒ๋ง ๋ณด์ฌ์ผ ํ๋ค.) ๋ํ ์ด์๋ฅผ ์ฌํํ๋ ๊ณผ์ ์์, 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..