๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ฐ ํ…Œ์ŠคํŠธ

๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด. Hibernate ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์‹ค์ œ ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ผ์ข…์˜ ์Šคํ…์œผ๋กœ ์ž‘์—…ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งค์šฐ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ SQL Server ํ‘œ์ค€์„ ๊ตฌํ˜„ํ•˜๋Š” ์Šคํ…์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚œ ์•„๋‹ˆ์•ผ. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ทธ ์ž์ฒด๋กœ ํƒ์›”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • @BeforeAll ๋ฉ”์„œ๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • @BeforeEach ๋ฉ”์„œ๋“œ์—์„œ ์„ธ์…˜์„ ๊ฐ€์ ธ์˜ค๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์—ฝ๋‹ˆ๋‹ค.
  • @Test ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ํ˜„์žฌ ์„ธ์…˜ ๋ฐ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  • @AfterEach ๋ฉ”์„œ๋“œ์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ AfterAll ๋ฉ”์„œ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ค€๋น„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Test
public class HelloTest {
  private static SessionFactory sessionFactory = null;
  private Session session = null;

  @BeforeAll
  static void setup(){
    try {
  	StandardServiceRegistry standardRegistry  = new StandardServiceRegistryBuilder()
      	.configure("hibernate-test.cfg.xml").build();

  	Metadata metadata = new MetadataSources(standardRegistry)
      	.addAnnotatedClass(Employee.class)
      	.getMetadataBuilder()
      	.build();

      sessionFactory = metadata.getSessionFactoryBuilder().build();

    } catch (Throwable ex) {
        throw new ExceptionInInitializerError(ex);
    }
  }

  @BeforeEach
  void setupThis(){
      session = sessionFactory.openSession();
      session.beginTransaction();
  }

  @AfterEach
  void tearThis(){
      session.getTransaction().commit();
  }

  @AfterAll
  static void tear(){
      sessionFactory.close();
  }

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ Hibernate์˜ ์ž‘์—…์—์„œ ํ…Œ์ŠคํŠธ ์ž์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์ž…๋‹ˆ๋‹ค.

@Test
public class HelloTest {

  @Test
  void createSessionFactoryWithXML() {
       Employee emp = new Employee();
       emp.setEmail("demo-user@mail.com");
       emp.setFirstName("demo");
       emp.setLastName("user");

       Assertions.assertNull(emp.getEmployeeId());
       session.persist(emp);
       Assertions.assertNotNull(emp.getEmployeeId());
  }
}

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฑ„์šธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฅผ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ SQL ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

  • schema.sql์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • test-data.sql์—๋Š” ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ด๋ธ”์„ ์ฑ„์šฐ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ž์ฒด ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน์ด ๊ฑฐ์˜ ํ•ญ์ƒ ๋‚˜ํƒ€๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

void runSqlScriptFile(String filePath){
  	String sqlScript = new String( Files.readAllBytes(Paths.get(filePath)) );
  	Session session = sessionFactory.openSession();
      Query query = session.createNativeQuery("BEGIN " + sqlScript + " END;");
      query.executeUpdate()
}

๊ทธ๋ฆฌ๊ณ  ์„ค์ • ๋ฐฉ๋ฒ•์ด ์•ฝ๊ฐ„ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

@BeforeAll
static void setup(){
  try {
	StandardServiceRegistry standardRegistry  = new StandardServiceRegistryBuilder()
    	.configure("hibernate-test.cfg.xml").build();

	Metadata metadata = new MetadataSources(standardRegistry)
    	.addAnnotatedClass(Employee.class)
    	.getMetadataBuilder()
    	.build();

	sessionFactory = metadata.getSessionFactoryBuilder().build();
	runSqlScriptFile(โ€œscema.sqlโ€);
	runSqlScriptFile(โ€œtest-data.sqlโ€);

  } catch (Throwable ex) {
      throw new ExceptionInInitializerError(ex);
  }
}