JavaScript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋ฐฐ์—ด(array) reduce ํ•จ์ˆ˜์˜ ๊ฐœ๋…๋ฐ ํ™œ์šฉ๋„ ๋†’์€ ์‚ฌ์šฉ๋ฒ•

martinooo 2024. 6. 26. 17:54

 

 

 

 

 

 

 

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œ ์ค‘์š”ํ•œ ๋ฐฐ์—ด ์‚ฌ์ „ ์ง€์‹ ๊ณต๋ถ€ํ•˜๊ธฐ


 

๋ฐฐ์—ด join() ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

https://cometruedream.tistory.com/254

 

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋ฐฐ์—ด(array)์„ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” join ํ•จ์ˆ˜ ๊ฐœ๋… ๋ฐ ์‚ฌ์šฉ๋ฒ•

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œ๋ฐฐ์—ด์€ javascript์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.๋ฐฐ์—ด์— ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์€ javascript์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ join() ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์„ ํ•ฉ

cometruedream.tistory.com

 

 

๋ฐฐ์—ด map(), forEach() ์ธ๊ธฐ์žˆ๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

https://cometruedream.tistory.com/253

 

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋ฐฐ์—ด(array)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธ๊ธฐ์žˆ๋Š” ๋ฉ”์†Œ๋“œ map(), forEach() ๊ฐœ๋…๊ณผ ์ฐจ์ด์ 

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ˜„์žฌ ์›น/์•ฑ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์•„์ดํ…œ์„ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฐ์—ด๊ณผ ์ด๋ฅผ ํŒŒ์‹ฑํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ

cometruedream.tistory.com

 

 

ํ™œ์šฉ๊ฐ€์น˜๊ฐ€ ์ข‹์€ every(), some() ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

https://cometruedream.tistory.com/250

 

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ํ™œ์šฉ๊ฐ€์น˜๊ฐ€ ์ข‹์€ ๋‚ด์žฅํ•จ์ˆ˜์™€ every(), some() ํ•จ์ˆ˜์˜ ๊ฐœ๋… ๋ฐ ํ™œ์šฉ๋ฒ•

๐Ÿคท‍โ™‚๏ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ ํ•จ์ˆ˜๋ž€?์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์ž˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋‚ด์žฅ ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฏธ๋ฆฌ ์„ ์–ธ๋œ ํ•จ์ˆ˜๋กœ, ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต

cometruedream.tistory.com

 

 

๐Ÿคท‍โ™‚๏ธ reduce ํ•จ์ˆ˜๋ž€?


javascript์˜ reduce() ๋‚ด์žฅํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ๋‹ค์Œ ์š”์†Œ์— ๋Œ€ํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ ์ „๋‹ฌ๋˜๋Š” “๋ˆ„์ ๊ฐ’”์ด ๋ฉ๋‹ˆ๋‹ค.

 

reduce() ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ดํ•ดํ•˜๋ฉด

๐Ÿ’ก reduce ๋‚ด์žฅํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์ˆซ์ž, ๋ฐฐ์—ด, ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ค„์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ฆ‰ ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋„์ถœํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 

 

 

๐Ÿคท‍โ™‚๏ธ reduce ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•


reduce() ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

arr.reduce(callback(accumulator, currentValue, index, array), initialValue);
// ๋ฐฐ์—ด.reduce(callback(๋ˆ„์ ๊ฐ’, ํ˜„์žฌ๊ฐ’, ์ธ๋ฑ์Šค, ์š”์†Œ), ์ดˆ๊ธฐ๊ฐ’);
  1. accumulator: ์ด์ „์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋œ ๋ˆ„์ ๊ฐ’ (์ตœ์ดˆ ์‹คํ–‰ ์‹œ initialValue ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค ์—†์œผ๋ฉด array[0] ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.)
  2. currentValue: ํ˜„์žฌ ์ธ๋ฐ์Šค ๋ฐฐ์—ด์˜ ์š”์†Œ
  3. currentIndex: ํ˜„๋Œ€ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค (์„ ํƒ์‚ฌํ•ญ)
  4. array: ์›๋ž˜ ๋ฐฐ์—ด (์„ ํƒ์‚ฌํ•ญ)

reduce() ํ•จ์ˆ˜์˜ ์ค‘์š”ํ•œ 4๊ฐ€์ง€ ์ฝœ๋ฐฑ ์ธ์ž ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

currentIndex์™€ array ์ธ์ž ๊ฐ’์€ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ฃผ๋กœ accumulator๊ณผ currentValue ์ธ์ž ๊ฐ’์œผ๋กœ ๋‹ค์–‘ํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋„์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

 

1. reduce() ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ™œ์šฉ ์˜ˆ์‹œ?

 

์ˆซ์ž ๋ฐฐ์—ด์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

const arr = [1, 2, 3, 4, 5]
  
// accumulator, currentValue, currentIndex ์ธ์ž๊ฐ’์€ acc, cur, idx ์ค„์—ฌ์„œ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
arr.reduce(function (acc, cur, idx) {
  console.log(acc, cur, idx);
  return acc + cur;
}, 0); //์ดˆ๊ธฐ๊ฐ’ 0 ์…‹ํŒ…

// ๊ฒฐ๊ณผ๊ฐ’ 15

 

๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ์—์„œ ์œ„์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ ์ž์„ธํ•˜๊ฒŒ ์ฝ”๋“œ์˜ ๋กœ์ง์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

 

  • accumulator: ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ถ•์ ๋œ ๊ฐ’
  • currentValue: ํ˜„์žฌ ๋ฐฐ์—ด์˜ ์š”์†Œ์— ๊ฐ’
  • currentIndex: ํ˜„์žฌ ๋ฐฐ์—ด์˜ index ๊ฐ’

 

 

 

๋ฐฐ์—ด ์•ˆ์— ๊ฐ์ฒด์˜ ๋‚˜์ด์˜ ์ดํ•ฉ ๊ตฌํ•˜๊ธฐ

const users = [
  { name: "์ฒ ์ˆ˜", age: 26 },
  { name: "๋ฏผ์ง€", age: 35 },
  { name: "ํ˜„์•„", age: 10 },
  { name: "ํฌ์ˆ˜", age: 64 },
  { name: "์€์ˆ˜", age: 29 },
];

const totalAge = users.reduce((accumulator, currentValue) => {
  return accumulator + currentValue.age;
}, 0);

// ๊ฒฐ๊ณผ๊ฐ’ 164

 

๋ฐฐ์—ด ์•ˆ์— ๊ฐ์ฒด์˜ ์ดํ•ฉ์„ reduce() ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋“ค์€ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ reduce() ์‚ฌ์šฉํ•ด์„œ ์„ฑ๋Šฅ๊ณผ ๊ฐ€๋…์„ฑ๊ณผ ์ฝ”๋“œ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. reduce() ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ™œ์šฉ ์˜ˆ์‹œ2?

์ˆซ์ž ๋ฐฐ์—ด์˜ ์ตœ๋Œ€๊ฐ’ ๊ตฌํ•˜๊ธฐ

const numbers = [10, 3, 20, 15, 7, 100];
numbers.reduce((accumulator, currentValue) => {
  return Math.max(accumulator, currentValue);
}, numbers[0]); //numbers ๋ฐฐ์—ด์— ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์…‹ํŒ…

// ๊ฒฐ๊ณผ๊ฐ’ 100

 

๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด์•ˆ์— ๋ฌธ์ž์—ด์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜ ๊ตฌํ•˜๊ธฐ

const words = ["apple", "banana", "apple", "orange", "banana", "orange", "apple"];

words.reduce((accumulator, currentValue) => {
  accumulator[currentValue] = (accumulator[currentValue] || 0) + 1;
  return accumulator;
}, {}); //์ดˆ๊ธฐ๊ฐ’์€ ๋นˆ๊ฐ์ฒด๋กœ ์…‹ํŒ…

//๊ฒฐ๊ณผ๊ฐ’ {apple: 3, banana: 2, orange: 2}

 

๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฐฐ์—ด์•ˆ์— ๋ฌธ์ž์—ด์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿคท‍โ™‚๏ธ ๋งˆ์ง€๋ง‰์œผ๋กœ


๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ reduce() ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ๋ฒ•์„ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ €๋Š” ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์—ˆ์ง€๋งŒ ์ตœ์‹  ๋ฌธ๋ฒ• ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋” ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

reduce() ๋‚ด์žฅํ•จ์ˆ˜์˜ 4๊ฐ€์ง€ ์ธ์ž ๊ฐ’์„ ํ™œ์šฉํ•ด์„œ ๋‹ค์–‘ํ•œ ์ž‘์—…์€ ํšจ์œจ์ ์ด๊ณ  ์ฝ”๋“œ๋ฅผ ๊ฐ„์†Œํ™”ํ•ด์„œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ด ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•˜๋Š”๋ฐ ์•„์ฃผ ์œ ์šฉํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

 

 


 

์žฌ๋ฐŒ๋Š” ์˜ค๋Š˜์˜ ๋ ๋ณ„ ์šด์„ธ ๋ณด๊ณ  ๊ฐ€์„ธ์š”! 

 

 

https://cometruedream.tistory.com/247

 

[React] Tailwind ํ•œ์ค„, ๋‘์ค„, ์„ธ์ค„ ํšจ๊ณผ className ์ปค์Šคํ…€

๐Ÿคท‍โ™‚๏ธ Tailwind ํ•œ์ค„, ๋‘์ค„, ์„ธ์ค„ ํšจ๊ณผํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘ ๋ฐฐ๋„ˆ ๋งํฌ์— URL ๊ธธ์ด๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์„œ 3์ค„ ํšจ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. React + Tailwind CSS ์…‹ํŒ…๋œ ํ”„๋กœ์ ํŠธ ์—ฌ์„œ CSS ํŒŒ์ผ & style ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜

cometruedream.tistory.com

 

 

https://cometruedream.tistory.com/243

 

NestJS Lifecycle (์ƒ๋ช…์ฃผ๊ธฐ) ๊ฐœ๋…

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œ Nest JS ๊ฐœ๋…?Nest JS๋Š” Node JS ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ƒ๋‹นํžˆ ์˜ค๋žซ๋™์•ˆ Express ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ์••๋„์ ์ธ ์ 

cometruedream.tistory.com

 

 

https://cometruedream.tistory.com/242

 

๋ฆฌ์•กํŠธ Vite Proxy ํ™œ์šฉํ•œ CORS ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œํ”„๋ก ํŠธ์—”๋“œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ต์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ๊ธ€์„ ๋ณด์‹œ๋ฉด ๋” ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค^^ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ตhttps://comet

cometruedream.tistory.com

 

 

https://cometruedream.tistory.com/241

 

React ํด๋”๊ตฌ์กฐ FSD ๊ธฐ๋Šฅ ๋ถ„ํ™œ ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ํด๋” ๊ตฌ์กฐ, ์„ค๊ณ„์— ๋Œ€ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— React FSD ํด๋”๊ตฌ์กฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ์˜ˆ์ •์ด๋ผ์„œ FSD ์•„ํ‚คํ…

cometruedream.tistory.com

 

 

https://cometruedream.tistory.com/244

 

์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” Prisma ๋ช…๋ น์–ด ์ •๋ฆฌ

๐Ÿคท‍โ™‚๏ธ Prisma ๋ช…๋ น์–ด ๋ณธ๋ก ์— ์•ž์„œ Prisma๋ž€?Nest JS ํ”„๋ ˆ์ž„์›Œํฌ์™€ Prisma ORM์„ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Prisma๋Š” Node JS ๊ธฐ๋ฐ˜์— ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ž˜๋˜๋ฉฐ Prisma + DB ์—ฐ๋™์œผ

cometruedream.tistory.com