Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
DB 연동
ORM
-
클래스와 RDB의 테이블은 어쩔 수 없는 불일치가 존재한다. ➝ ORM은 이를 해결하는 역할을 하여 쿼리문 작성이 아닌 code로 데이터를 조작할 수 있다.
- 장점
- 데이터베이스 쿼리를 객체지향적으로 조작할 수 있어 쿼리문 작성 양이 줄어 개발비용이 줄어들고 코드의 가독성을 높인다.
- 매핑된 모든 객체들은 독립적으로 작성되어있어 재사용 및 유지보수가 수월하다.
- 객체를 기반으로 DB 테이블을 관리하므로 데이터베이스에 종속적이지 않아 DB 교체 상황에서의 리스크가 적다.
- 단점
- 복잡한 서비스의 경우 ORM만으로 구성하게 되면 속도 저하 등의 성능 문제가 발생한다.
JPA
- 자바의 ORM 기술 표준
- JPA 기반의 구현체: Hibernate / EclipseLink / DataNucleus
Hibernate
- 자바의 ORM Framework
- Spring Data JPA를 활용하여 이 기능을 더욱 편하게 사용할 수 있다.
- CRUD 처리에 필요한 인터페이스를 제공한다.
- 엔티티 매니저를 직접 다루지 않고 리포지토리를 정의하여 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스를 조작
- 영속성 컨텍스트
- 애플리케이션과 DB 사이 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능및 객체 보관 기능
- 엔티티가 Context에 들어오면 JPA는 엔티티 객체의 매핑 정보를 DB에 반영하는 작업 수행
Entity
데이터 베이스의 테이블에 대응하는 클래스
- 데이터베이스에 쓰일 테이블과 칼럼을 정의
- 엔티티에 어노테이션을 사용해 테이블 간 연관관계를 정의할 수 있음
엔티티 어노테이션
- @Entity: 클래스가 엔티티임을 명시하기 위한 어노테이션
- @Table: 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우 사용
- @Id: 테이블의 기본값임을 명시하는 어노테이션. 모든 엔티티에 반드시 필요한 값
- @GeneratedValue: 일반적으로 @Id와 함께 사용되는 값. 어떤 방식으로 필드값을 생성할 지 결정하는데 사용
사용하지 않는 경우:애플리케이션에서 자체적으로 고유한 기본값을 생성하는 경우 사용
AUTO: 기본 설정값. 기본값을 사용하는 DB에 맞게 자동 생성
IDENTITY: 기본값 생성을 데이터베이스에 위임
SEQUENCE: 식별자 생성기를 설정한 후 값을 주입받는 방식
TABLE: 어떤 DBMS를 사용하더라도 동일하게 동작하기 원할 경우 사용 - @Column: 별 다른 설정을 하지 않을 거면 사용 X
name: 데이터베이스의 칼럼명을 설정하는 속성
nullable: null값이 가능한지 설정할 경우
length: 데이터의 최대 길이 설정
unique: 해당 칼럼을 유니크로 설정할 경우 사용 - @Transient: 엔티티 클래스에는 선언되어 있는 필드이지만 데이터베이스에는 필요 없을 경우 사용
repository
엔티티가 생성한 데이터베이스에 접근하는데 사용
- 접근하려는 테이블과 매핑되는 엔티티에 대한 인터페이스 생성 후 JpaRepository를 상속 받음
DAO
데이터베이스에 접근하기 위한 로직을 관리하는 객체
- 비즈니스 로직 동작 과정 중 데이터를 조작하는 기능 수행
Service
DAO에서 구현한 기능을 호출해서 결괏값을 가져오는 작업 수행