본문 바로가기
기록해보기

문자열 SQL을 직접 사용하는 것이 너무 어렵다!!

by titlejjk 2023. 6. 11.

이번 시간에는 문자열 SQL을 직접 사용하는 것의 한계를 이해하고 해결책인 JPA, Hibernate, Spring Data JPA가 무엇인지 해하하고 다음으로 Spring Data JPA를 이용해 데이터를 생성, 조회, 수정, 삭제를 하는 방법 그리고 트랜잭션이 왜 필요한지 이해하고 스프링에서 트랜잭션을 제어하는 방법을 익힌다. 그리고 마지막으로 영속성 컨텐스트와 트랜잭션의 관계를 이해하고, 영속성 컨텍스트의 특징을 알아보겠다.

여태까지 Repository에서 SQL을 직접작성하였었다.

SQL을 직접작성하게 되면 문자열을 직접 작성하기 때문에 작성자가 실수할 수도 있고, 실수를 인지하는 시점이 느리다. 컴파일 시점에 발견이 되지 않고, 런타임 시점에 발견이된다.

두 번째로 특정 데이터베이스에 종속적이게 된다.

지금은 MySQL만 사용하고 있지만 다양한 데이터베이스들이 존재하고 있는 시점에 상황이나 정책에 따라서 다양한 데이터베이스를 쓸대가 있는데 MySQL을 사용했다가 다른 DB를 사용한다하면 DB간에 다른 문법들 때문에 직접작성했던 DB문법들을 각 DB문법에 맞게끔 다 찾아가서 수정을 해줘야 한다는 단점이있다.

세 번째로는 반복작업이 많아진다. 테이블을 하나 만들 때마다 CRUD쿼리가 항상 필요해진다.

예를 들어 필드가 세개인 쿼리도 작성하기 힘든데 이 이상으로 늘어난다면 반복작업이 누적적으로 계속 쌓인다.

네 번째로 데이터베이스의 테이블과 객체는 패러다임이 다르다.

이를 보완하기 위한 것이 JPA이다 이 JPA는 Java Persistence API라고 한다.

이는 문자열 SQL을 사용하지 않기 위해 등장했는데 자바 진영의 ORM(Object-Relational Mapping)이라 생각하면 된다.

JPA 의 Java는 지금 사용하고 있는 언어를 뜻.

Persistence는 영속성 즉 서버가 재시작되어도 데이터는 영구적으로 저장되는 속성이라는 의미이다. 영구적으로 저장되는 속성

 

API는 정해진 규칙.

이 세개를 합치면 데이터를 영구적으로 보관하기 위해 Java진영에서 정해진 규칙을 뜻한다.

 

ORM은

Object 는 객체(자바의 객체) Realational은 관계형 DB(관계형 DB의 테이블을 의미)Mapping은 객체와 테이블을 짝짓는다는 의미이다.

 

전체적으로 풀어보자면 객체와 관계형 DB의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java진영의 규칙 인 것이다.

 

이 말로 되어 있는 규칙을 코드로 구현해야한다. 마치 API규칙을 Controller로 구현하듯이.

이 때 그 구현하던 코드가 HIBERNATE이다.

즉 JPA 객체와 관계형 DB를 짝지어 데이터를 영구적으로 저장할 수 있게끔 정해진 Java규칙을 구현해서 코드로 작성하는것이 HIBERNATE이 되겠다.

Hibernate은 내부적으로 JDBC를 사용하고 있다.

강사님 ppt에서 퍼옴

다음엔 이 JPA라는 것을 활용해서 여태 만들었던 User객체와 User 테이블을 Mapping해 보도록 하겠다.

댓글