๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ Persistence Framework

์ถœ์ฒ˜

ChatGPT

https://en.wikipedia.org/wiki/Persistence_framework

 

Persistence framework - Wikipedia

From Wikipedia, the free encyclopedia Database middleware In computing a persistence framework is middleware that assists in the storage and retrieval of information between applications and databases, especially relational databases. It acts as a layer of

en.wikipedia.org

 


์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ Persistence Framework

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(ํŠนํžˆ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ์‚ฌ์ด์—์„œ ์ •๋ณด์˜ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด. ์˜๊ตฌ์ ์„ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ €์žฅ๊ณผ ํ™œ์šฉ ์‚ฌ์ด์—์„œ ๊ฐœ๋…์ ์ด๊ณ  ๊ธฐ์ˆ ์ ์ธ ์ฐจ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต ์—ญํ• ์„ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋„๊ตฌ. 

์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ , ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

๐Ÿค”๋ฏธ๋“ค์›จ์–ด

์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์šด์˜์ฒด์ œ ๋˜๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ๊ณผ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋“ฑ์„ ์ค‘๊ฐœํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณ„์ธต

๐Ÿค”๋ฐ์ดํŠธ์˜ ์ €์žฅ๊ณผ ํ™œ์šฉ ์‚ฌ์ด์—์„œ ๊ฐœ๋…์ ์ด๊ณ  ๊ธฐ์ˆ ์ ์ด ์ฐจ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์ถ”์ƒํ™” ์—ญํ• ์ด๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ๊ฐ€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐ„์˜ ๋ณต์žกํ•œ ์ฐจ์ด๋ฅผ ๊ฐ์ถ”๊ณ , ๋” ์ง๊ด€์ ์ด๊ณ  ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ.

  • ๊ฐœ๋…์ , ๊ธฐ์ˆ ์  ์ฐจ์ด -> ๋ฐ์ดํ„ฐ ์ €์žฅ์€ ์ฃผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด๋ค„์ง€๋ฉฐ, ์ด ๋ฐ์ดํ„ฐ๋Š” ํ…Œ์ด๋ธ”๊ณผ ํ–‰ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์กฐํ™”๋œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด ๋‘˜์˜ ๊ฐœ๋…์  ์ฐจ์ด๋ฅผ ์ด์•ผ๊ธฐํ•œ๋‹ค.

์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ด๋Ÿฌํ•œ ์ฐจ์ด๋ฅผ ์ถ”์ƒํ™”ํ•ด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š”๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ๋ณต์žกํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ชฐ๋ผ๋„, ๊ฐ์ฒด ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ์กฐํšŒ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ

1. ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘ ORM Object-Relational Mapping

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๊ฐ„ ๋งคํ•‘์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ค€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Java์˜ JPA(Java Persistence API), Hibernate ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค.

ORM ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ์˜ ์ถ”์ƒํ™”

๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ์„ ์ฝ”๋“œ์—์„œ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค. ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๊ณ ์ˆ˜์ค€ API๋กœ ์ œ๊ณตํ•ด, ๊ฐœ๋ฐœ์ž๋Š” ์„ธ๋ถ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…๋ณด๋‹ค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค” ๊ณ ์ˆ˜์ค€ API๋ž€ :  ๋ณต์žกํ•œ ๋‚ด๋ถ€ ๋™์ž‘์„ ๊ฐ์ถ”๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต๋˜๋Š” ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค

Mapper ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

3. ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ

์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์–ด ์ผ๊ด€๋œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

4. ์บ์‹ฑ

๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹

1. Mapper

  • SQL Mapper๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋งคํผ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ด๋ฅผ ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ซ.
  • ์˜ˆ: MayBatis

2. ORM Objected-Relational Mapping

  • ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ๊ณ ์ˆ˜์ค€์˜ ๊ฐ์ฒด ์กฐ์ž‘์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  •  ๐Ÿค”๊ณ ์ˆ˜์ค€์˜ ๊ฐ์ฒด ์กฐ์ž‘์˜ ์˜๋ฏธ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณต์žกํ•œ SQL ๊ตฌ๋ฌธ์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹
  • ์˜ˆ : Hibernate , JPA, Entity Framework
  • ๐Ÿค” ์•ˆ๋“œ๋กœ์ด๋“œ Room ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ORM ๋ฐฉ์‹์„ ์“ฐ๋Š” ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ™์€๋ฐ
    • ๋งž๋‹ค. Room์€ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉด์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

 

์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์—๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€

์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด ์žฌ๋ถ€ํŒ…๋˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ์†์‹ค๋˜์ง€ ์•Š๊ณ  ์ง€์†์ ์œผ๋กœ ๋ณด๊ด€๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ณด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

-> ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด๊ตฌ๋‚˜

1. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ

์•ฑ์ด๋‚˜ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ •๋ณด, ์„ค์ •, ๊ธฐ๋ก ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์†Œ์…œ ๋ฏธ๋””์–ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‚จ๊ธด ๊ฒŒ์‹œ๋ฌผ์ด๋‚˜ ๋ฉ”์‹œ์ง€ ๊ฐ™์€ ์ •๋ณด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

2. ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋ก

์€ํ–‰ ์‹œ์Šคํ…œ์ด๋‚˜ ์ „์ž ์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ์˜ ๊ฒฐ์ œ ๋‚ด์—ญ, ์ฃผ๋ฌธ ๊ธฐ๋ก ๋“ฑ์€ ๋ฐ˜๋“œ์‹œ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ๋ฒ•์  ์ฆ๊ฑฐ ์ž๋ฃŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ํ›„์— ๊ณ ๊ฐ์ด๋‚˜ ์‹œ์Šคํ…œ์˜ ํ™•์ธ ๋ฐ ๊ฐ์‚ฌ ๊ณผ์ •์—์„œ ํ•„์ˆ˜์ ์ด๋‹ค.

3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ

๋งŽ์€ ์„œ๋น„์Šค๋“ค์€ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด์„œ, ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋”๋ผ๋„ ์žฌ๋ถ€ํŒ… ํ›„์— ์ค‘๋‹จ๋œ ์ง€์ ์—์„œ ๋‹ค์‹œ ์ž‘์—…์„ ์ด์–ด๊ฐ€๋ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜์˜ ๋ฌธ์„œ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ์ง‘ํ•˜๋˜ ๋ฌธ์„œ๋ฅผ ๊ณ„์† ์ €์žฅํ•ด๋‘์–ด์„œ ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ๋กœ๊ทธ ๋ฐ์ดํ„ฐ

์‹œ์Šคํ…œ ์šด์˜์ด๋‚˜ ๋ณด์•ˆ ๊ฐ์‹œ๋ฅผ ์œ„ํ•ด ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋Š” ๋ถ„์„์„ ์œ„ํ•ด ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋ณด๊ด€๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์˜ค๋ฅ˜๋‚˜ ๋ณด์•ˆ ์นจ์ž…์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜๊ตฌ์ ์ธ ์ €์žฅ์ด ์ค‘์š”ํ•˜๋‹ค.