Active Record ํŒจํ„ด

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

Active Record ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด ORM ๊ตฌํ˜„๋“ค์— ์‚ฌ์šฉํ•œ๋‹ค.




๊ธฐ๋ณธ ์›๋ฆฌ

ORM์„ ์ž์นญํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ Active Record ํŒจํ„ด์— ๊ธฐ๋ฐ˜ํ•ด ๊ตฌํ˜„๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
Active Record๊ฐ€ ๋ญ๋ƒํ•˜๋ฉด ์ด๋Ÿฐ๊ฑฐ๋‹ค.

part = new Part()
part.name = "Sample part"
part.price = 123.45
part.save()

๊ฐ๊ฐ์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํด๋ž˜์Šค-ํƒ€์ž…์œผ๋กœ ์ •์˜ํ•˜๊ณ , ํด๋ž˜์Šค์˜ ํ•„๋“œ๋“ค์„ ํ†ตํ•ด column ๊ฐ’์„ ์ œ์–ดํ•œ๋‹ค.

๊ฐ์ฒด์˜ ๊ฐ’์„ ์ˆ˜์ • ํ›„์— ์ €์žฅ ์•ก์…˜์„ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํŠธ๋ฆฌ๊ฑฐ(save)ํ•˜๋ฉด ์ˆ˜์ •๋œ ๊ฐ’์„ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ˆ˜์ •ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ, ์‚ญ์ œ ๋“ฑ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ์ฒด์™€ ๊ฐ์ฒด ํ•„๋“œ๋“ค์„ ํ†ตํ•ด ์ œ์–ดํ•œ๋‹ค.

์‚ฌ์‹ค ๋ญ ๋ณต์žกํ•˜๊ฒŒ ์„ค๋ช…ํ•  ๊ฒƒ๋„ ๋‹ฌ๋ฆฌ ์—†๋‹ค.




๊ตฌํ˜„์ฒด

์‚ฌ์‹ค ๋Œ€๋ถ€๋ถ„์˜ ORM์ด Active Record๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ๋ด๋„ ๋œ๋‹ค.
Python - sqlalchemy
Java - JPA & @
Rust - SeaORM
Node - TypeORM, Sequelize, Prisma, Drizzle

๋“ฑ๋“ฑ...

์‚ฌ์‹ค ์ด๋Ÿฐ๊ฑธ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://www.martinfowler.com/eaaCatalog/activeRecord.html