๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(44)
[TypeScript] Class vs Interface vs Type ์ฐจ์ด์  ์ •๋ฆฌ JavaScript Class vs TypeScript Class 1. ์†์„ฑ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.TS Class๋Š” ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ ‘๊ทผ ์ œ์–ด์ž(+readonly)๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์†์„ฑ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋•Œ๋Š” ์†์„ฑ์ด public์ด์–ด๋„ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.// JSclass User { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; }}// TS// ์ปดํŒŒ์ผํ•˜๋ฉด ์œ„ JS ์ฝ”๋“œ์™€ ๋™์ผํ•˜๋‹คclass User { constructor(private firstName: string, private lastName: string) {}} 2. ์ ‘๊ทผ ์ œํ•œ์ž(acces..
[TypeScript] Declaration File & JSDoc Declaration FileTypeScript ์„ ์–ธ ํŒŒ์ผ์€ ์ฃผ๋กœ JavaScript๋กœ ์ž‘์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์„ TypeScript์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.์„ ์–ธ ํŒŒ์ผ์€ .d.ts ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ชจ๋“ˆ์˜ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Visual Studio Code์™€ ๊ฐ™์€ ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ(IDE)์—์„œ๋Š” ์„ ์–ธ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.TypeScript๋Š” JavaScript ์ฝ”๋“œ๋„ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์ง€๋งŒ, ํƒ€์ž… ์ •์˜๊ฐ€ ์—†๋‹ค๋ฉด ์‚ฌ์‹ค TypeScript๋ฅผ ์“ฐ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ TypeScript์—์„œ ์„ ์–ธ ํŒŒ์ผ์€ ๊ผญ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.tsconfig.json์— "strict": true ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์„ ์–ธ ํŒŒ์ผ์ด ์—†๋Š” JavaScript ํŒจํ‚ค์ง€์— ๋Œ€..
[TypeScript] TypeScript ํƒ€์ž… ์ •๋ฆฌ Object๋ณ€์ˆ˜๋ช…: { key1: ํƒ€์ž…, key2: ํƒ€์ž…, ... }๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์„ ํ™•์žฅํ•ด ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํƒ€์ž… ์ฃผ์„(type annotation)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.์˜ˆ์‹œconst player: { name: string; age: number } = { name: "kim",}; Optional๋ณ€์ˆ˜/ํ”„๋กœํผํ‹ฐ๋ช…?: ํƒ€์ž…๋ฌผ์Œํ‘œ๋ฅผ ๋ถ™์—ฌ์„œ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋‚˜ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์˜ต์…”๋„๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์˜ˆ์‹œ// ์ธํ„ฐํŽ˜์ด์Šค ํ”„๋กœํผํ‹ฐ์— ์ ์šฉinterface PaintOptions { shape: Shape; xPos?: number; yPos?: number;}// ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์— ์ ์šฉconst player: { name: string, age?: number } = { name: 'k..
[TypeScript] TypeScript ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ ๊ฐœ์š”ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์“ฐ๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„ค์ •๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์ง€๋งŒ, ๊ฐ„ํ˜น ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •์„ ๊ฑด๋“œ๋ ค์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋•Œ๋ฅผ ์œ„ํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ๋กํ•ด๋‘๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.NodeJS๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ์„ค์ • ๋ฐฉ๋ฒ•1. package.json ์ƒ์„ฑnpm init -y 2. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜npm install -D typescript 3. tsconfig.json ์ƒ์„ฑtsc -init 4. tsconfig.json ์ž‘์„ฑ{ "include": ["src"], // ์ปดํŒŒ์ผ ํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ "compilerOptions": { "outDir": "build", // ์ปดํŒŒ์ผ ํ•œ ํŒŒ์ผ์„ ์ €์žฅํ•  ์œ„์น˜ "target": "ES6", // ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ด๋–ค ๋ฒ„..
[๋„คํŠธ์›Œํฌ] HTTP Methods ์ฐจ์ด์  ์ •๋ฆฌ HTTP ๋ฉ”์„œ๋“œHTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์š”์ฒญ ๋ฉ”์„œ๋“œ๋กœ, ์ž์›์— ๋Œ€ํ•ด ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋™์ž‘์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.์ด 9๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ REST API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋Š” 5๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ๋ฉ”์„œ๋“œ 5๊ฐ€์ง€GET : ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๋™์ž‘POST : ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์—ฌ ์ž์›์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋™์ž‘PUT : ์„œ๋ฒ„์— ์ž์›์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ž์›์„ ๋Œ€์ฒดํ•˜๋Š” ๋™์ž‘PATCH : ์„œ๋ฒ„ ์ž์›์˜ ์ผ๋ถ€๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๋™์ž‘DELETE : ์„œ๋ฒ„์—์„œ ์ž์›์„ ์‚ญ์ œํ•˜๋Š” ๋™์ž‘ GET vs POST1. GET๋ชฉ์ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๋™์ž‘๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์š”์ฒญ ๋ณธ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์š”์ฒญ URI์— Path Variable ์ด๋‚˜ Query String ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.๋ณด์•ˆ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ํฌํ•จ๋˜๋ฏ€๋กœ..
[TypeORM] TypeORM์—์„œ ํŠธ๋žœ์žญ์…˜ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ• TypeORM 0.3 ์ด์ƒ ๋ฒ„์ „์„ ๊ธฐ์ค€์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. TransactionํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—… ๋‹จ์œ„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.ํŠธ๋žœ์žญ์…˜์˜ ์ค‘์š”ํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋‘ ๋ฐ˜์˜๋˜๋“ ์ง€, ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ ์ž‘์—…์ด ๋ถ€๋ถ„์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (ACID ์ค‘ Atomicity, ์›์ž์„ฑ) DataSource & EntityManager / QueryRunnerTypeORM์—์„œ๋Š” DataSource & EntityManager ๋˜๋Š” QueryRunner๋ฅผ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ธฐ์— ์•ž์„œ, TypeORM์—์„œ์˜ DataSource, EntityManager, ..
[TypeScript] TypeScript ์žฅ์ ๊ณผ ํŠน์ง• TypeScript๋ž€?Microsoft์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.JavaScript์˜ ํ™•์žฅ์œผ๋กœ, JavaScript์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋ฉด์„œ๋„ ์ •์  ํƒ€์ž…์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ TypeScript๋ฅผ ์“ฐ๋Š”๊ฐ€?1. ํƒ€์ž… ์•ˆ์ •์„ฑํƒ€์ž… ์•ˆ์ •์„ฑ(Type Safety)์€ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๋“ฑ์ด ์ •์˜๋œ ํƒ€์ž…๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.ํƒ€์ž„ ์•ˆ์ •์„ฑ์„ ํ†ตํ•ด ์–ป๋Š” ๊ฒƒ์ปดํŒŒ์ผ ํƒ€์ž„ ํƒ€์ž… ์ฒดํฌ : ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ฒฝ๊ณ ๋‚˜ ์˜ค๋ฅ˜๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ : ํƒ€์ž…์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •๋˜์–ด์•ผ ํ•˜๊ณ , ํƒ€์ž…์— ๋Œ€ํ•œ ์—„๊ฒฉํ•œ ๊ทœ์น™์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.ํƒ€์ž… ์ถ”๋ก  : ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์ค๋‹ˆ๋‹ค.ํƒ€์ž… ์•ˆ์ •์„ฑ ๋•๋ถ„์— ๋ฒ„๊ทธ์™€ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ ..
REST ์›์น™๊ณผ REST API ์„ค๊ณ„ ๋ฐฉ๋ฒ• "๊ทธ๋Ÿฐ REST API๋กœ ๊ดœ์ฐฎ์€๊ฐ€"๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.   REST๋ž€?REpresentational State Transfer์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.์›น ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ์Šคํƒ€์ผ ์ค‘ ํ•˜๋‚˜๋กœ, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.์ธํ„ฐ๋„ท์—์„œ ์–ด๋–ป๊ฒŒ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํ•ด๋‹ต์œผ๋กœ 1991๋…„ ์›น(Web)์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์›น์€ HTML์ด๋ผ๋Š” ํ˜•์‹์œผ๋กœ ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์ •๋ณด๋“ค์— ๋Œ€ํ•œ ์‹๋ณ„์ž๋กœ URI๋ฅผ ์„ ํƒํ•˜๊ณ , HTTP๋ผ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์ •๋ณด๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.2000๋…„ Roy T. Fielding์€ ๊ธฐ์กด์˜ ์›น์„ ๋ง๊ฐ€ํŠธ๋ฆฌ์ง€ ์•Š๊ณ  HTTP๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•œ ๋…ผ๋ฌธ์„ ๋ฐœํ‘œํ–ˆ๊ณ , ์ด๊ฒƒ์ด REST ์˜€์Šต๋‹ˆ๋‹ค.REST API๋ž€?REST API๋Š” REST ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋Š” API๋กœ,..