MapleStory Finger Point

๐ŸŸค JAVA/๐ŸŸค ORM & DB

Persistence Framework - SQL Mapper, ORM ๊ฐœ๋…

HYEJU01 2025. 4. 3. 03:30

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ˜๋ฉด์— JAVA ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ์—๋Š” ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋งคํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

Persistence Framework (ํผ์‹œ์Šคํ„ด์Šค ํ”„๋ ˆ์ž„์›Œํฌ)  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋ฐ ๋งคํ•‘์„ ๋•๋Š” ํ”„๋ ˆ์ž„์›Œํฌ (์˜์†์„ฑ ๊ณ„์ธต)

 

๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ MyBatis ์™€ JPA ๊ฐ€ ์žˆ๋Š”๋ฐ

 

MyBatis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ, SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ DTO ๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋งคํ•‘ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค.

 

JPA ๋ฅผ ํ™œ์šฉํ•˜๋ฉด HIbenate ์™€ ๊ฐ™์€ ORM ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” <-> ์ž๋ฐ” ๊ฐ์ฒด (์—”ํ‹ฐํ‹ฐ) ๊ฐ„์˜ ์ž๋™ ํŒจํŒ…์ด ๋˜์–ด, ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด(์—”ํ‹ฐํ‹ฐ) ์ค‘์‹ฌ์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. (๊ฐ์ฒด ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ž๋™ํ™”)

 

 

์•„๋ž˜๋Š” ๋งคํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…๋ฅ˜๋ณ„๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

 


 

 

๐Ÿ”Ž  SQL ๊ธฐ๋ฐ˜ ๋งคํ•‘ : SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉฐ, ์ž‘์„ฑ๋œ SQL๊ณผ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘. (Mybatis, JDBC)

  • JDBC: ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๊ธฐ์ˆ ๋กœ, SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹. ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋งŽ์•„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€
  • MyBatis: SQL ์ค‘์‹ฌ์˜ ๋ฐ์ดํ„ฐ ๋งคํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ. (์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ ๋ถˆ๊ฐ€, ์ˆ˜๋™์ฒ˜๋ฆฌ + ๊ด€๋ฆฌ ์–ด๋ ค์›€)

 

 

๐Ÿ”Ž ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘(ORM) : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ๋งคํ•‘ (Hibernate, JPA)

 

  • JPA (Java Persistence API): ์ž๋ฐ”์˜ ํ‘œ์ค€ ORM (JPQL ์ง์ ‘ ์ž‘์„ฑ , EntityManager ์ง์ ‘ ๊ด€๋ฆฌ)
  • JPA > Hibernate: JPA์˜ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌํ˜„์ฒด๋กœ, ORM ๊ธฐ๋Šฅ ์ œ๊ณต. (๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘)
    ๊ณต์‹๋ฌธ์„œ : https://hibernate.org/orm/

 

  • JPA >  JPQL : JPA ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฟผ๋ฆฌ์–ธ์–ด, ๊ฐ์ฒด ์ค‘์‹ฌ์ , SQL ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ• (๋ฌธ์ž์—ด๊ธฐ๋ฐ˜ → ๋Ÿฐํƒ€์ž„์‹œ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ๊ฐ€๋Šฅ) , ์ •์  ์ฟผ๋ฆฌ์— ์œ ๋ฆฌํ•จ
    ๊ณต์‹๋ฌธ์„œ : https://docs.oracle.com/html/E13946_01/ejb3_langref.html#ejb3_langref_stmnttypes
  • JPA >  Spring Data JPA : Spring ํ”„๋ ˆ์ž„์›Œํฌ ํ™•์žฅ ๋ชจ๋“ˆ , ์ž๋™ํ™”๋œ ๊ธฐ๋Šฅ์ด ๋งŽ์Œ, JPA๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (๋ฉ”์„œ๋“œ ๊ธฐ๋ฐ˜ ์ž๋™ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋“ฑ)
    ๊ณต์‹๋ฌธ์„œ :https://spring.io/projects/spring-data-jpa

 

 

 

(+) QueryDSL : ํƒ€์ž…์•ˆ์ •์„ฑ, ๋™์  SQL ์ฟผ๋ฆฌ ์ƒ์„ฑ ์ง€์› , JAVA ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ (์ฝ”๋“œ๊ธฐ๋ฐ˜ → ์ปดํŒŒ์ผ์‹œ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ ๊ฐ€๋Šฅ), ๊ฐ์ฒด ์ค‘์‹ฌ์  ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์œ ๋ฆฌ
๊ณต์‹ ๋ฌธ์„œ :http://querydsl.com/static/querydsl/3.6.3/reference/ko-KR/html_single/#d0e81

 

 

๐Ÿ”Ž  NoSQL ๋ฐ์ดํ„ฐ ๋งคํ•‘ : NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MongoDB..)์™€์˜ ๋ฐ์ดํ„ฐ ๋งคํ•‘ ์ง€์› (Mongoose (Node.js) / Morphia (MongoDB์™€ Java))