[TypeORM] Data Mapper ํŒจํ„ด

[์›๋ณธ ๋งํฌ]

Data Mapper ํŒจํ„ด์€ typeORM์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋‹ค.
Active Record ํŒจํ„ด์— ๋น„ํ•˜๋ฉด, ์ข€๋” ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

typeORM์—์„œ ์ž์ฒด ์ œ๊ณตํ•˜๋Š” Repository๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด Repository์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ๊ธฐ๋ณธ๊ตฌํ˜„๋˜์–ด ์ œ๊ณต๋œ๋‹ค.
์ž˜ ๊ฐ–๋‹ค ์“ฐ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•œ ํ…Œ์ด๋ธ” ์—”ํ‹ฐํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—”ํ‹ฐํ‹ฐ์— ๋Œ€์‘๋˜๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
EntityRepository ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ฌ๊ณ , Respository<์—”ํ‹ฐํ‹ฐ>๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ํ•„์š”ํ•˜๋‹ค๋ฉด Active Record์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค.
์ด๋ ‡๊ฒŒ๋งŒ ํ•ด๋‘ฌ๋„ Repository์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ฃผ๋Š” ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ด ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ๋“ค๋งŒ ๋ช‡๊ฐ€์ง€ ๊ณจ๋ผ์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.
์ž์„ธํ•œ ๊ฒƒ์€ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์นœ์ ˆํ•˜์ง„ ์•Š๋‹ค๋งŒ.
https://typeorm.delightful.studio/classes/repository_repository.repository.html




save

์‚ฝ์ž…์€ save ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๊ทธ๋ƒฅ insert๋งŒ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, PK๊ฐ€ ์ถฉ๋Œํ•œ๋‹ค๋ฉด update๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š”๊ฒŒ ํŠน์ง•์ด๋‹ค.

์œ„์ฒ˜๋Ÿผ ๊ทธ๋ƒฅ ์ƒˆ ๊ฐ’์ผ ๊ฒฝ์šฐ์—” ํŠธ๋žœ์žญ์…˜๋งŒ ๊ฑธ๊ณ  insert๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

PK๊ฐ€ ๊ฑธ๋ฆฌ๋ฉด select๋กœ ์ค‘๋ณต์„ ์ฒดํฌํ•œ ํ›„ update๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค๋ฉด ์—”ํ‹ฐํ‹ฐ์˜ ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์‚ฝ์ž…ํ•  ๊ฒƒ๊ณผ ์ˆ˜์ •ํ•  ๊ฒƒ์ด ๋’ค์„ž์—ฌ๋„ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.




find ํ•จ์ˆ˜๋“ค

ํƒ์ƒ‰ ํ•จ์ˆ˜๋กœ๋Š” find, findOne ๋“ฑ์˜ ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋œ๋‹ค. find๋Š” ๋‹ค์ค‘ ํ–‰, findOne์€ ๋‹จ์ผ ํ–‰์„ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๊ฒƒ์„ ๋นผ๋ฉด ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ค๋ธŒ์ ํŠธ๋กœ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์ค„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
๊ฐ€์žฅ ์ž์ฃผ ์“ธ๋งŒํ•œ ์˜ต์…˜์€ ์—ญ์‹œ where๋‹ค.

์œ„์ฒ˜๋Ÿผ ์กฐ๊ฑด์œผ๋กœ ๋น„๊ตํ•  ์ปฌ๋Ÿผ๊ณผ, ๊ฐ’์„ ์Œ์œผ๋กœ ์ฃผ๋ฉด ๋™๋“ฑ ๋น„๊ต๋ฅผ ํ•ด์ค€๋‹ค.

์—ฐ์‚ฐ์ž๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. LessThan ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋œ๋‹ค.

์ง€์›๋˜๋Š” ์—ฐ์‚ฐ์ž ๋ชฉ๋ก์€ ์•„๋ž˜ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.
https://github.com/typeorm/typeorm/blob/master/docs/find-options.md

์ด์™ธ์— ์ •๋ ฌ์€ order๋กœ

offset&limit๋Š” skip&take๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ์ปฌ๋Ÿผ๋งŒ ๊ณจ๋ผ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด select ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์ปฌ๋Ÿผ๋ช…์„ ๋ฌธ์ž์—ด๋กœ ๋„ฃ์–ด์ค€๋‹ค.




update

update๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ˆ˜์ •๋งŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค.
์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์กฐ๊ฑด์ ˆ์— ๋Œ€ํ•œ ์˜ค๋ธŒ์ ํŠธ, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์ˆ˜์ •ํ•  ๊ฐ’์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

์ฒซ๋ฒˆ์งธ ์ธ์ž์˜ ์กฐ๊ฑด์ ˆ์€ select์—์„œ where์— ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ์ฃผ๋ฉด ๋œ๋‹ค.




insert

insert๋Š” ๋‹จ์ˆœํžˆ ์‚ฝ์ž…๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.
๊ทธ๋ƒฅ ์‚ฝ์ž…ํ•  ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.



์ฐธ์กฐ
https://orkhan.gitbook.io/typeorm/docs/active-record-data-mapper
https://velog.io/@josworks27/typeORM-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
https://typeorm.delightful.studio/classes/repository_repository.repository.html
https://github.com/typeorm/typeorm/blob/master/docs/find-options.md