๐ŸŒฑ Spring Boot ์‹œ์ž‘ํ•˜๊ธฐ 16 - JPA์™€ Spring Data JPA ์ดํ•ด

๊น€์„ธํ˜„ยท2025๋…„ 10์›” 23์ผ

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
16/19

๋‚ ์งœ:2025-10-23


ํ•™์Šต๋ชฉํ‘œ

  • JPA ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ํ•„์š”์„ฑ ์ดํ•ด
  • Spring Data JPA์™€ Hibernate์˜ ๊ด€๊ณ„ ๋ฐ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด

๐Ÿ”น JPA ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ ๋ฐ ํ•„์š”์„ฑ

๐Ÿ’ก ์˜ˆ์‹œ: SQL ์กฐํšŒ ์‹œ ์ž๋ฐ” ์ฝ”๋“œ ๋น„๊ต

SELECT * FROM user WHERE name = ?

1๏ธโƒฃ ๋ณต์žกํ•œ JDBC ์‚ฌ์šฉ ์‹œ

// JDBC ์˜ˆ์ œ
public class UserDaoJdbc {
public User findByName(String name) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    User user = null;

    try {
        conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/hello", "user", "password");

        String sql = "SELECT id, name, email, age FROM users WHERE name = ?";
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        rs = pstmt.executeQuery();

        if (rs.next()) {
            user = new User();
            user.setId(rs.getLong("id"));
            user.setName(rs.getString("name"));
            user.setEmail(rs.getString("email"));
            user.setAge(rs.getInt("age"));
        }

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (rs != null) rs.close();
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return user;
}

}

โš ๏ธ ํฌ์ธํŠธ: JDBC ์‚ฌ์šฉ ์‹œ ์ฝ”๋“œ๊ฐ€ ๊ธธ๊ณ  ๋ณต์žกํ•จ


2๏ธโƒฃ JPA ์‚ฌ์šฉ ์‹œ

public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByName(String name);
}

๐Ÿ’ฌ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SQL ์ž‘์„ฑ ์—†์ด ์ž๋ฐ” ์ฝ”๋“œ๋งŒ์œผ๋กœ DB ์กฐ์ž‘ ๊ฐ€๋Šฅ


๐Ÿ”น JPA

๐Ÿ“Œ JPA(Java Persistence API)

-์ž๋ฐ” ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ ํ•ด๊ฒฐ
-SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด ์กฐ์ž‘์œผ๋กœ DB ์ž‘์—… ๊ฐ€๋Šฅ
-ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต


โœ… JPA ์‚ฌ์šฉ ์˜ˆ์‹œ

// ๋ฐ์ดํ„ฐ ์ €์žฅ
userRepository.save(user);

// ํŠน์ • ID ์กฐํšŒ
userRepository.findById(userId);

๐Ÿ”น Hibernate์™€ Spring Data JPA

๊ด€๊ณ„ ์ •๋ฆฌ

์šฉ์–ด์„ค๋ช…
JDBC์ž๋ฐ”์™€ DB๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋ณธ ํ†ต์‹  ๊ธฐ์ˆ (API)
JPAORM์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค, ์„ค๊ณ„ ๊ทœ์น™ ์ œ๊ณต
HibernateJPA ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์‹ค์ œ ๊ตฌํ˜„์ฒด (๋‚ด๋ถ€์ ์œผ๋กœ JDBC ์‚ฌ์šฉ, DB ๋ฐฉ์–ธ ์ง€์›)
Spring Data JPAJPA๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Spring ๊ธฐ๋ฐ˜ ํ™•์žฅ

-JPA๋Š” ์„ค๊ณ„๋„
-Hibernate๋Š” ์„ค๊ณ„๋„๋ฅผ ๊ตฌํ˜„ํ•œ ์ œํ’ˆ
-Spring Data JPA๋Š” JPA๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ

์ •๋ฆฌ:
-์ผ๋ฐ˜์ ์œผ๋กœ JPA๋ผ๊ณ  ํ•˜๋ฉด Spring Data JPA๋ฅผ ์˜๋ฏธ
-๋งˆ์น˜ Spring์ด๋ผ๊ณ  ํ•˜๋ฉด Spring Boot๋ฅผ ๋œปํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌ


๐Ÿงฉ ์ •๋ฆฌ

-JDBC๋Š” ๋ณต์žกํ•˜์ง€๋งŒ JPA๋Š” ๋‹จ์ˆœํ™”๋œ ORM ์ธํ„ฐํŽ˜์ด์Šค
-Hibernate๋Š” JPA์˜ ๊ตฌํ˜„์ฒด
-Spring Data JPA๋ฅผ ํ†ตํ•ด JPA๋ฅผ ๋” ์‰ฝ๊ณ  ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
-JPA ์‚ฌ์šฉ ์‹œ ๊ฐœ๋ฐœ์ž๋Š” SQL ์ž‘์„ฑ ๋ถ€๋‹ด ์—†์ด ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ DB ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

profile
๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•œ ๊ฑธ์Œ

0๊ฐœ์˜ ๋Œ“๊ธ€