2025. 5. 14. 03:17ใCS ๊ณต๋ถ, ๊ธฐํ
๐ง ORM ์ด๋?
๊ฐ์ฒด(Object) ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Relational Database) ๋ฅผ ์๋์ผ๋ก ๋งคํํด์ฃผ์ด RDB ํ ์ด๋ธ์ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ด๋ค.
๐ฏ ์ ORM์ด ํ์ํ ๊น?
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋๋ถ๋ถ ๊ฐ์ฒด(Object) ๊ธฐ๋ฐ์ด์ง๋ง,
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ํ์์ด ๋ค๋ฅด๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ค.
๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ ๊ฐ์๋ ๋ถ์ผ์น๊ฐ ์กด์ฌํ๋๋ฐ, ORM์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋์ผ๋ก ์์ฑํ์ฌ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ๋ค.
๊ฐ๋จํ ๋งํด:
๐ฆ ํด๋์ค <–> ํ ์ด๋ธ
๐งฉ ๊ฐ์ฒด(Object) <–> ๋ ์ฝ๋(Row)
์๋ฅผ ๋ค์ด Python์์๋ ์ด๋ ๊ฒ ์ด๋ค:
user.name
user.age
๊ทธ๋ฐ๋ฐ SQL์์๋ ์ด๋ ๊ฒ ์จ์ผ ํ๋ค:
SELECT name, age FROM users WHERE id=1;
→ ๋ ์ธ๊ณ ๊ฐ์ ๊ฐ๊ทน์ ORM์ด ๋ฉ์์ค๋ค.
๐ ORM์ ํต์ฌ ์ญํ
ORM ์์ด (SQL ์ง์ ) | ORM ์ฌ์ฉ ์ |
SELECT * FROM users; | User.objects.all() |
INSERT INTO users ... | User(name="ํ๊ธธ๋").save() |
UPDATE users SET ... | user.name = "ํ๊ธธ๋"; user.save() |
DELETE FROM users ... | user.delete() |
๐ ์ฃผ์ ORM ํ๋ ์์ํฌ
์ธ์ด | ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
Python | SQLAlchemy, Django ORM |
JavaScript | Sequelize (Node.js), TypeORM |
Java | Hibernate |
C# | Entity Framework |
Kotlin | Exposed |
โ ์ฅ์
1. ์ง๊ด์ ์ด๊ณ ๊ฐ๋ ์ฑ ์ข์ ์ฝ๋
- Query์ ๊ฐ์ด ํ์ํ ์ ์ธ๋ฌธ, ํ ๋น ๋ฑ์ ๋ถ์์ ์ธ ์ฝ๋๊ฐ ์ค์ด๋ค๊ณ , ๊ฐ์ข ๊ฐ์ฒด์ ๋ํ ์ฝ๋๋ฅผ ๋ณ๋๋ก ์์ฑํ์ฌ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
2. ๊ฐ์ฒด ์งํฅ์ ์ ๊ทผ์ผ๋ก ์์ฐ์ฑ ์ฆ๊ฐ
- SQL๋ฌธ์ด ์๋ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ๋ชจ๋ธ๋ง ์ด์ฉํด์ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ฐ ์ง์คํ ์ ์๋ค.
3. ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์์ ์ฉ์ด์ฑ ์ฆ๊ฐ
- ORM์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋์ด์๊ณ , ํด๋น ๊ฐ์ฒด๋ค์ ์ฌํ์ฉํ ์ ์๋ค.
- ๋งคํ ์ ๋ณด๊ฐ ๋ช ํํ์ฌ, ERD๋ฅผ ๋ณด๋ ๊ฒ์ ๋ํ ์์กด๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
4. DBMS์ ๋ํ ์ข ์์ฑ ๊ฐ์
- ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ RDBMS์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ Java์ ๊ฐ์ฒด์งํฅ ๋ชจ๋ธ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ขํ ์ ์๋ค.
- ORM์ ํน์ DB์ ์ข ์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ DBMS๋ฅผ ๊ต์ฒดํ๋ ํฐ ์์ ์๋ ๋น๊ต์ ์ ์ ๋ฆฌ์คํฌ์ ์๊ฐ์ด ์์๋๋ค.
โ ๏ธ ๋จ์
- โ ๋ณต์กํ ์ฟผ๋ฆฌ์์ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์
- โ ORM์ด ์ถ์ํํ ๋์์ ์์ ํ ์ดํดํ์ง ์์ผ๋ฉด ๋๋ฒ๊น ์ด ์ด๋ ค์
- โ DB ๊ณ ์ ๊ธฐ๋ฅ ํ์ฉ์ด ์ ํ์ ์ผ ์ ์์
๐ ์์ (Python / Django ORM)
# models.py
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
# user ์์ฑ
new_user = User(name="ํ๊ธธ๋", age=25)
new_user.save()
# user ์กฐํ
user = User.objects.get(id=1)
print(user.name)
# ์์
user.age = 26
user.save()
# ์ญ์
user.delete()
'CS ๊ณต๋ถ, ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JWT (Json Web Token) (0) | 2025.05.13 |
---|---|
์ธ์คํด์ค(instance) ์ฉ์ด ์ฌ์ฉ ์ฌ๋ก ์ ๋ฆฌ (0) | 2025.05.08 |
ํด๋์ค, ๊ฐ์ฒด, ์ธ์คํด์ค (0) | 2025.05.08 |
์ค๋ ๋ ์ธ์ดํ(thread safe) (0) | 2025.03.13 |
Lighthouse (1) | 2024.12.13 |