JPA

Java Persistence API์˜ ์•ฝ์ž๋กœ, ์ž๋ฐ” ์ง„์˜์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€

  • ORM(Object Relational Mapping)์€ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•ด์ฃผ๋Š” ๊ฒƒ

  • ํ‘œ์ค€ ๋ช…์„ธ

    • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ

    • ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋กœ Hibernate, EclipseLink, DataNucleus ๋“ฑ ์กด์žฌ

    • ๋ณดํ†ต Hibernate ์‚ฌ์šฉ

JPA์˜ ์žฅ์ 

  • SQL ์ค‘์‹ฌ -> ๊ฐ์ฒด ์ค‘์‹ฌ

  • ์ƒ์‚ฐ์„ฑ

  • ์œ ์ง€๋ณด์ˆ˜

  • ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ

    • ์ƒ์†

    • ์—ฐ๊ด€๊ด€๊ณ„

    • ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

    • ๋น„๊ต

  • ์„ฑ๋Šฅ

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ถ”์ƒํ™”์™€ ๋ฒค๋” ๋…๋ฆฝ์„ฑ

Configuration

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


@Configuration
public class JpaConfig {

    // ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ์„ค์ •
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/jpa_basic?serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("password");

        return dataSource;
    }

    // JPA ๊ตฌํ˜„์ฒด ์„ค์ •
    @Bean
    public JpaVendorAdapter jpaVendorAdapter(JpaProperties jpaProperties) {
        HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        jpaVendorAdapter.setShowSql(jpaProperties.isShowSql());
        jpaVendorAdapter.setGenerateDdl(jpaProperties.isGenerateDdl());
        jpaVendorAdapter.setDatabasePlatform(jpaProperties.getDatabasePlatform());

        return jpaVendorAdapter;
    }

    // Entity ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” EntityManagerFactory ์„ค์ •
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter, JpaProperties jpaProperties) {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource);
        entityManagerFactoryBean.setPackagesToScan("com.example.jpa_basic.domain");
        entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);

        Properties jpaProperties = new Properties();
        jpaProperties.putAll(jpaProperties.getProperties());
        entityManagerFactoryBean.setJpaProperties(jpaProperties);

        return entityManagerFactoryBean;
    }

    // Transaction์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” TransactionManager ์„ค์ •
    @Bean
    public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory.getObject());

        return transactionManager;
    }
}

์ฐธ๊ณ ์ž๋ฃŒ

Last updated