๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
NestJS/typeorm

[typeorm] exists() vs existBy() ๋‘ ๋ฉ”์„œ๋“œ ํŠน์ง•๊ณผ ์ฐจ์ด

by dani0312 2025. 1. 18.

๐Ÿ“Œexists() ์™€ existBy() ์•Œ์•„๋ณด๊ธฐ

โ—พexists() , existBy()

 typeorm์—์„œ ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ์—๋Š” exists()์™€ existBy() ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋‘ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ true, false๋กœ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ booleanํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ์ง€๋งŒ, ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

์ด ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒŒ ๋œ ๊ฒƒ์€, ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ํšจ์œจ์ ์ผ๊นŒ? ์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฑธ๊นŒ? 

 

์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด ์ฐจ์ด์ ์— ๋Œ€ํ•œ ์ž๋ฃŒ๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ค์› ๋‹ค.

 

 

โ—พexists() 

 ยท ์šฉ๋„

 ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 ยท ์‚ฌ์šฉํ™˜๊ฒฝ

์ฃผ๋กœ ๋ณต์žกํ•œ ์กฐ๊ฑด์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ๋œ๋‹ค. 

 

 ยท ๋ฌธ๋ฒ•

FindManyOptions๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ํฌํ•จํ•œ ์œ ์—ฐํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

await repository.exists({
  where: { ... }, // FindManyOptions์˜ where ์กฐ๊ฑด
});

 

 

 ยท ํŠน์ง•

 1) FindManyOptions๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ํฌํ•จํ•œ ์œ ์—ฐํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. FindManyOptions๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ชจ๋“  ์˜ต์…˜(์ •๋ ฌ, ํŽ˜์ด์ง•, ๊ด€๊ณ„ ํฌํ•จ ๋“ฑ)์„ ์ง€์›ํ•œ๋‹ค

2) ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ์ ํ•ฉํ•˜๋‹ค.

 

 ยท ์˜ˆ์ œ

const isExist = await userRepository.exists(){
	where: { name: 'dani', age: 11 },
});
console.log(isExist); // true or false

 

 

 

โ—พexistsBy() 

 ยท ์šฉ๋„

 ๋‹จ์ˆœ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 ยท ์‚ฌ์šฉํ™˜๊ฒฝ

๋‹จ์ˆœ ์กฐ๊ฑด์œผ๋กœ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 ยท ๋ฌธ๋ฒ•

FindOptionsWhere๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค. 

await repository.existsBy(){
	... // FindOptionsWhere ์กฐ๊ฑด๋งŒ
});

 

 

 ยท ํŠน์ง•

 1) FindOptionsWhere๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ๋‹จ์ˆœ ์กฐ๊ฑด์„ ํ™•์ธํ•  ๋•Œ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 

2) ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋‹จ์ˆœํ•œ ์กด์žฌ ํ™•์ธ์— ์ ํ•ฉํ•˜๋‹ค. 

 

 ยท ์˜ˆ์ œ

const isExist = await userRepository.existBy({ name: 'dani' });
console.log(isExist); //true or false

 

 

 

โ—พ๊ฒฐ๋ก 

 

  exists existBy
๊ฒ€์ƒ‰์กฐ๊ฑด FindManyOptions (๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ์˜ต์…˜) FindOptionsWhere (๋‹จ์ˆœ ์กฐ๊ฑด)
ํŠน์ง• ๋ณต์žกํ•œ ์กฐ๊ฑด ๋ฐ ํŽ˜์ด์ง•, ์ •๋ ฌ ๋“ฑ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ์˜ต์…˜ ์ง€์› ๋‹จ์ˆœ ์กฐ๊ฑด์— ์ง‘์ค‘
์‚ฌ์šฉ ํ™˜๊ฒฝ ๋ณต์žกํ•œ ์กฐ๊ฑด์ด๋‚˜ ์ถ”๊ฐ€์ ์ธ ์ฟผ๋ฆฌ ์˜ต์…˜์ด ํ•„์š”ํ•  ๋•Œ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ 

 

๋‹จ์ˆœํ•œ ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋ผ๋ฉด existsBy() ๋ฉ”์„œ๋“œ๋ฅผ,

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์กฐ๊ฑด์ด๋‚˜ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ์˜ต์…˜์„ ์ ์šฉํ•ด์„œ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋ผ๋ฉด exists() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ž!

 

 

 


/* ๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ */ /* ๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ ๋๋ */