스프링데이터 JPA 개념 및 학습 이유

Aiden Shin·2020년 2월 24일
0

JPA(Java Persistence API)를 보다 쉽게 사용할 수 있도록 여러 기능을 제공하는 스프링 데이터 JPA에 대해 배워나가기 위한 시리즈를 블로깅하려 한다.

왜 JPA를 학습해야 하는가?

  • 도메인 주도 개발 가능

    • 애플리케이션 코드가 SQL 데이터베이스 관련 코드에 잠식 당하는 것을 방지하고 도메인 기반의 프로그래밍으로 비즈니스 로직을 구현하는데 집중할 수 있다.
  • 개발 생산성이 좋으며, 데이터베이스에 독립적인 프로그래밍 가능

  • 타입 세이프한 쿼리 작성 및 Persistent Context가 제고하는 캐시 기능으로 성능 최적화 가능


핵심 개념 이해

ORM과 JPA에 대한 배경 이해

예전에는 DB에서 값을 가져오거나 저장 등의 작업을 할 때 JDBC와 SQL을 통한 명렬을 통해 작업했다

JDBC

  • (관계형) 데이터베이스와 자바의 연결고리
  • DataSource / DriverManager
  • Connection
  • PreparedStatement

SQL

  • DDL
  • DML

무엇이 문제인가?

  • SQL을 실행하는 비용이 비싸다

  • SQL이 데이터베이스마다 다르다

  • 스키마를 바꿨더니 코드가 너무 많이 바뀐다

  • 반복적인 코드가 너무 많다

  • 당장은 필요가 없는데 언제 쓸 줄 모르니 미리 다 읽어야한는가..?

    -> 그래서 나온 것이 ORM


ORM: Object-Relation Mapping

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);

JDBC 대신 도메인 모델 사용하려는 이유?

  • 객체 지향 프로그램이의 장점을 활용하기 좋으니까
  • 각종 디자인 패턴
  • 코드 재사용
  • 비즈니스 로직 구현 및 테스트 편함

자바에서는 객체에 어떤 값을 저장
디비에서는 테이블에 저장

객체에 저장하고 객체에서 값을 가져오는 것처럼 디비에서도 가져올 수 없을까..?
이것이 JPA?? ORM??

참고 강의 링크 : 인프런 스프링 데이터 JPA

profile
예전 블로그: https://shinilhyun.github.io/

0개의 댓글