JPA(Java Persistence API)를 보다 쉽게 사용할 수 있도록 여러 기능을 제공하는 스프링 데이터 JPA에 대해 배워나가기 위한 시리즈를 블로깅하려 한다.
도메인 주도 개발 가능
개발 생산성이 좋으며, 데이터베이스에 독립적인 프로그래밍 가능
타입 세이프한 쿼리 작성 및 Persistent Context가 제고하는 캐시 기능으로 성능 최적화 가능
ORM과 JPA에 대한 배경 이해
예전에는 DB에서 값을 가져오거나 저장 등의 작업을 할 때 JDBC와 SQL을 통한 명렬을 통해 작업했다
SQL
SQL을 실행하는 비용이 비싸다
SQL이 데이터베이스마다 다르다
스키마를 바꿨더니 코드가 너무 많이 바뀐다
반복적인 코드가 너무 많다
당장은 필요가 없는데 언제 쓸 줄 모르니 미리 다 읽어야한는가..?
-> 그래서 나온 것이 ORM
ORM은 애플리케이션의 클래스와 SQL 데이터베이스의 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여, 자바 애플리케이션의 객체를 SQL 데이터베이스의 테이블에 자동으로 (또 깨끗하게) 영속화 해주는 기술
JDBC 사용
try(Connection connection = DriverManager.getConnection(url, username, password)) {
System.out.println("Connection created: " + connection);
String sql = "INSERT INTO ACCOUNT VALUES(1, 'ilhyun', 'pass');";
try(PreparedStatement statement = connection.prepareStatement(sql)) {
statement.execute();
}
}
도메인 모델 사용
Account account = new Account(“ilhyun”, “pass”);
accountRepository.save(account);
자바에서는 객체에 어떤 값을 저장
디비에서는 테이블에 저장
객체에 저장하고 객체에서 값을 가져오는 것처럼 디비에서도 가져올 수 없을까..?
이것이 JPA?? ORM??
참고 강의 링크 : 인프런 스프링 데이터 JPA