SQL

JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis)

dddzr 2024. 9. 25. 23:22

๐Ÿ“Œ JDBC / SQL Mapper / ORM (JPA, Hibernate, MyBatis) ์ •๋ฆฌ

๐Ÿ“Œ 1. ๊ฐœ์š”

JDBC, SQL Mapper, ORM์€ ๋ชจ๋‘ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ ๊ธฐ์ˆ ์ด๋‹ค.
์ฐจ์ด๋Š” “SQL์„ ์–ผ๋งˆ๋‚˜ ์ง์ ‘ ์ž‘์„ฑํ•˜๋А๋ƒ”, “๊ฐ์ฒด-ํ…Œ์ด๋ธ” ๋งคํ•‘ ์ˆ˜์ค€์ด ์–ด๋А ์ •๋„์ธ๊ฐ€”์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋œ๋‹ค.

๊ตฌ๋ถ„ ์ถ”์ƒํ™” ์ˆ˜์ค€ SQL ์ž‘์„ฑ ๋งคํ•‘ ์ž๋™ํ™” ๋Œ€ํ‘œ ๊ธฐ์ˆ 
JDBC ๋‚ฎ์Œ โœ… ์ง์ ‘ ์ž‘์„ฑ โŒ ์—†์Œ JDBC API
SQL Mapper ์ค‘๊ฐ„ โœ… ์ง์ ‘ ์ž‘์„ฑ โœ… ๊ฒฐ๊ณผ ๋งคํ•‘ ์ง€์› MyBatis
ORM ๋†’์Œ โŒ ์ž๋™ ์ƒ์„ฑ (ํ•„์š” ์‹œ ์ง์ ‘ ๊ฐ€๋Šฅ) โœ… ์™„์ „ ์ž๋™ ๋งคํ•‘ JPA, Hibernate

๐Ÿ“Œ 2. JDBC (Java Database Connectivity)

๐Ÿ” ๊ฐœ๋…

Java์—์„œ DB์— ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•ด ์‹คํ–‰ํ•˜๋Š” ํ‘œ์ค€ API์ด๋‹ค.
Connection, PreparedStatement, ResultSet ๋“ฑ์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•œ๋‹ค.

 

โœ” ํŠน์ง•

  • ๊ฐ€์žฅ ๋กœ์šฐ๋ ˆ๋ฒจ์˜ ์ ‘๊ทผ ๋ฐฉ์‹ (ORM/JPA, MyBatis ๊ฐ™์€ ๊ธฐ์ˆ ๋“ค๋„ ๋‚ด๋ถ€์ ์œผ๋กœ JDBC๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB์— ์ ‘์†ํ•œ๋‹ค!)
  • SQL, ์ปค๋„ฅ์…˜, ์ž์› ํ•ด์ œ๋ฅผ ๋ชจ๋‘ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•ด์•ผ ํ•จ
  • ์ œ์–ด๋ ฅ๊ณผ ์œ ์—ฐ์„ฑ์ด ๋†’์ง€๋งŒ, ์ฝ”๋“œ ๋ฐ˜๋ณต์ด ๋งŽ๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€

๐Ÿ“– ์˜ˆ์‹œ

Connection conn = DriverManager.getConnection(url, user, password); // DB ์—ฐ๊ฒฐ
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); // ์ฟผ๋ฆฌ ์ž‘์„ฑ
ps.setInt(1, 1); // ์ฒซ ๋ฒˆ์งธ '?'์— 1์ด๋ผ๋Š” ๊ฐ’์„ ์„ค์ •
ResultSet rs = ps.executeQuery(); // ์ฟผ๋ฆฌ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ์ €์žฅ

while (rs.next()) { //๊ฒฐ๊ณผ ์ถœ๋ ฅ
    System.out.println("User: " + rs.getString("name"));
}

๐Ÿ“Œ 3. SQL Mapper (์˜ˆ: MyBatis)

๐Ÿ” ๊ฐœ๋…

SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Java ๊ฐ์ฒด๋กœ ์ž๋™ ๋งคํ•‘ํ•ด์ฃผ๋Š” SQL ๋งคํผ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
์ฆ‰, JDBC๋ณด๋‹ค ํŽธ๋ฆฌํ•˜์ง€๋งŒ ์™„์ „ํ•œ ORM์€ ์•„๋‹˜.

 

โœ” ํŠน์ง•

  • SQL์€ ์ง์ ‘ ์ž‘์„ฑ, ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ฒด์— ๋งคํ•‘
  • XML ๋˜๋Š” Annotation ๊ธฐ๋ฐ˜์œผ๋กœ SQL ์ •์˜
  • JDBC๋ณด๋‹ค ๊ฐ„๊ฒฐ, ORM๋ณด๋‹ค ์ œ์–ด๋ ฅ ๋†’์Œ

๐Ÿ“– ์˜ˆ์‹œ (MyBatis)

<!-- UserMapper.xml -->
<select id="getUser" resultType="User">
  SELECT id, name FROM users WHERE id = #{id}
</select>

User user = userMapper.getUser(1);
System.out.println(user.getName());

๐Ÿ“Œ 4. ORM (Object-Relational Mapping)

๐Ÿ” ๊ฐœ๋…

๊ฐ์ฒด(Object) ์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Relational DB) ๊ฐ„์˜ ๋งคํ•‘์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„, ๊ฐ์ฒด ์กฐ์ž‘๋งŒ์œผ๋กœ DB ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โœ” ํŠน์ง•

  • ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ์ž๋™ ๋งคํ•‘ (@Entity, @Id, @Column ๋“ฑ)
  • SQL ์ž๋™ ์ƒ์„ฑ (INSERT, SELECT, UPDATE, DELETE)
  • ์บ์‹œ(1์ฐจ, 2์ฐจ) ๋ฐ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์ž๋™
  • ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด: Hibernate, EclipseLink, ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค: JPA

โœ…4-1. JPA (Java Persistence API)

๐Ÿ” ๊ฐœ๋…

ORM์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ **Java ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค(๋ช…์„ธ)**์ด๋‹ค.
์ง์ ‘ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉฐ, Hibernate๋‚˜ EclipseLink ๊ฐ™์€ ๊ตฌํ˜„์ฒด๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค.

 

โœ” ํŠน์ง•

  • “์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ORM์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค”๋Š” ํ‘œ์ค€ ๊ทœ์น™ ์ •์˜
  • ๊ตฌํ˜„์ฒด ๊ต์ฒด ์šฉ์ด → JPA ์ฝ”๋“œ๋Š” Hibernate๋กœ, ๋˜๋Š” EclipseLink๋กœ ์‰ฝ๊ฒŒ ๋Œ€์ฒด ๊ฐ€๋Šฅ

๐Ÿ“– ์˜ˆ์‹œ

@Entity
public class User {
    @Id
    private Long id;
    private String name;

}

EntityManager em = emf.createEntityManager();
User user = em.find(User.class, 1L);
System.out.println(user.getName());

 

โœ…4-2. Hibernate

๐Ÿ” ๊ฐœ๋…

JPA์˜ ๋Œ€ํ‘œ ๊ตฌํ˜„์ฒด์ด์ž ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ORM ํ”„๋ ˆ์ž„์›Œํฌ
(์ฆ‰, Hibernate๋Š” “ORM ํ”„๋ ˆ์ž„์›Œํฌ”์ด์ž “JPA ๊ตฌํ˜„์ฒด”)

 

โœ” ํŠน์ง•

  • SQL ์ž๋™ ์ƒ์„ฑ
  • ์บ์‹ฑ(1์ฐจ, 2์ฐจ ์บ์‹œ)์œผ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ๋‹ค์–‘ํ•œ DB ์ง€์› (Oracle, MySQL, PostgreSQL ๋“ฑ)
  • JPA ๊ธฐ๋ฐ˜ API ์™„์ „ ์ง€์›


๐Ÿš€ 5. ๊ฒฐ๋ก 

์ƒํ™ฉ ์ถ”์ฒœ ๊ธฐ์ˆ  ์ด์œ 
SQL ์ œ์–ด์™€ ์„ฑ๋Šฅ์ด ์ค‘์š” JDBC ์„ธ๋ฐ€ํ•œ ์ œ์–ด ๊ฐ€๋Šฅ
SQL์„ ์ง์ ‘ ์“ฐ๋˜ ๊ฐ์ฒด ๋งคํ•‘ ํŽธ์˜๋„ ์›ํ•จ MyBatis SQL + ๊ฐ์ฒด ๋งคํ•‘ ์ ˆ์ถฉํ˜•
SQL ์—†์ด ๊ฐ์ฒด ์ค‘์‹ฌ ๊ฐœ๋ฐœ ์›ํ•จ JPA/Hibernate ORM ๊ธฐ๋ฐ˜, ์ƒ์‚ฐ์„ฑ ๋†’์Œ

 

โญ ์ •๋ฆฌ ํ•œ ์ค„ ์š”์•ฝ

JDBC๋Š” “์ง์ ‘ SQL์„ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋ณธ API”,
MyBatis๋Š” “SQL ์ค‘์‹ฌ + ๊ฐ์ฒด ๋งคํ•‘ ์ง€์› ํ”„๋ ˆ์ž„์›Œํฌ”,
JPA/Hibernate๋Š” “SQL์„ ์ˆจ๊ธฐ๊ณ  ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ์ž๋™ ๋งคํ•‘ํ•˜๋Š” ORM ๊ธฐ์ˆ ”์ด๋‹ค. ๐Ÿš€

 

'SQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

CTE(Common Table Expression)๋ž€?  (0) 2025.11.29