Entity, Repository 그리고 JdbcTemplate와 ORM

diense_kk·2023년 7월 8일
0

SpringBoot

목록 보기
2/10

Entity

엔티티란 데이터베이스에 쓰일 필드와 여러 엔티티간 연관관계를 정의한다
세로의 열 부분이 Column 이고, 가로의 행 부분이 엔티티 객체가 된다. 이 테이블 전체가 엔티티 이고, 각 1개의 행들이 엔티티 객체가 되는 것이라고 생각하면 된다.

필드라는 것은 엔티티의 각 Column을 의미한다.

"private int id"라고 적은 것처럼 id라는 필드를 정의하면 하나의 Column을 정의할 수 있는 것이다.
@로 시작되는 구문은 어노테이션 이라고 부르는데, 대부분은 엔티티와 데이터베이스를 매핑하는 JPA에서 사용되는 것이다.

@Entity : 클래스 위에 선언하여 이 클래스가 엔티티임을 알려준다. 이렇게 되면 JPA에서 정의된 필드들을 바탕으로 데이터베이스에 테이블을 만들어준다.

@AllArgsConstructor : 선언된 모든 필드를 파라미터로 갖는 생성자를 자동으로 만들어준다.
@NoArgsConstructor : 파라미터가 아예없는 기본생성자를 자동으로 만들어준다.

@Getter : 각 필드값을 조회할 수 있는 getter를 자동으로 생성해준다. 예를들어 다른 파일에서 UserEntity 객체의 id값을 얻고 싶다면 getId() 메서드를 정의해서 해당 객체의 id값을 얻어오게 되는데, 해당 메서드를 굳이 작성하지 않아도 자동으로 생성해주는 것이다.

변수는 보통 직접 접근 및 변경이 안되도록 private 선언자를 통해 지정한다. title 이라는 변수를 조회하기 위해서 getTitle() 이라는 메서드를 선언하고, title을 리턴하도록 해준다.

@ToString : 해당 클래스에 선언된 필드들을 모두 출력할 수 있는 toString 메서드를 자동으로 생성할 수 있도록 해준다.

@Id, @GeneratedValue : 해당 엔티티의 주요 키(Primary Key, PK)가 될 값을 지정해주는 것이 @Id 이다. @GeneratedValue는 이 PK가 자동으로 1씩 증가하는 형태로 생성될지 등을 결정해주는 어노테이션이다

//@GeneratedValue(strategy = GenerationType.IDENTITY)
기본키 생성을 데이터베이스에게 위임하는 방식으로 id값을 따로 할당하지 않아도 데이터베이스가 자동으로 AUTO_INCREMENT를 하여 기본키를 생성해준다.

@ManyToOne : 해당 엔티티와 다른 엔티티를 관계짓고 싶을 때 쓰는 어노테이션이다. ManyToOne이라고 부르는 이유는 1 : N 관계가 되기 때문이다.

Repository

Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스이다. 위에서 엔티티를 선언함으로써 데이터베이스 구조를 만들었다면, 여기에 어떤 값을 넣거나, 넣어진 값을 조회하는 등의 CRUD를 해야 쓸모가 있는데, 이것을 어떻게 할 것인지 정의해주는 계층이라고 생각하면 된다.

JdbcTemplate

jdbc+Template 즉, 직역하면 "jdbc를 위한 틀"이라는 뜻이다.

JDBC의 장점

설정이 간편함
별도의 복잡한 설정 없이 바로 사용할 수 있다.
반복문제 해결
JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 처리해준다.
개발자는 SQL을 작성하고, 전달할 파라미터 정의 + 응답 값 매핑만 하면 됨.
아래 반복 작업을 대신해줌.
커넥션 획득
statement를 준비하고 실행
결과를 반복하도록 루프를 실행
Connetion, Statement, ResultSet 종료
트랜잭션을 위한 Connection 동기화
예외 발생 시, 스프링 예외 변환기 실행

JDBC 단점

동적 SQL을 해결하기 어렵다.
동적 SQL은 MyBatis / Query DSL을 이용해서 처리할 수 있음.

ORM(JPA,Hibernnate 등)

애플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는것을 의미

ORM의 장점

SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있음
개발자가 보다 비즈니스 로직에 집중할 수 있음

재사용 및 유지보수가 편리
ORM은 독립적으로 작성되어 있어 재사용이 가능
매핑정보를 명확하게 설계하기 때문에 따로 데이터베이스를 볼 필요가 없음

DBMS에 대한 종속성이 줄어듬
DBMS를 교체하는 작업을 비교적 적은 리스크로 수행 가능

ORM의 단점

복잡성이 커질 경우 ORM만으로 구현하기 어려움
직접 쿼리를 구현하지 않아 복잡한 설계가 어려움

잘못 구현할 경우 속도 저하 발생

대형 쿼리는 별도의 튜닝이 필요할 수 있음

JPA

JPA는 Java Persistance API의 줄임말이며, ORM과 관련된 인터페이스의 모음
JAVA 진영에서 표준 ORM으로 채택되어 있음
ORM이 큰 개념이라고 하면, JPA는 더 구체화 시킨 스팩을 포함하고 있음

Hibernate

ORM Framework 중 하나
JPA의 실제 구현체 중 하나이며, 현재 JPA 그현체 중 가장 많이 사용됨
가장 많이 사용됨

Spring Data JPA

Spring Framework에서 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리

  • CRUD 처리용 인터페이스 제공
  • Repository 개발 시 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입
  • 데이터 접근 계층 개발시 인터페이스만 작성해도 됨

Hibernate에서 자주 사용되는 기능을 조금 더 쉽게 사용할 수 있게 구현

0개의 댓글