GW LABS

스프링 부트 핵심 가이드 (4) - 데이터베이스 연동 본문

Book-Review/Programing

스프링 부트 핵심 가이드 (4) - 데이터베이스 연동

GeonWoo Kim 2022. 8. 13. 16:59

6.2 ORM

  • 객체 관계 매핑: 객체와 RBD 테이블을 자동으로 매핑
  • 장점
    • ORM을 사용하면서 쿼리를 객체지향적으로 조작할 수 있다.
    • 재사용 및 유지보수가 편리하다.
    • 데이터베이스에 대한 종속성이 줄어든다.
  • 단점
    • ORM만으로 온전한 서비스를 구현하기에는 한계가 있다.
    • 애플리케이션 객체 관점과 데이터베이스 관계 관점의 불일치가 발생한다.
      • 세분성: ORM의 자동 설계 바업에 따라 데이터베이스에 있는 테이블의 수와 애플리케이션의 엔티티 클래스의 수가 다른 경우가 발생한다.
      • 식별성: RDBMS는 기본키로 동일성을 정의하지만 자바는 두 객체의 값이 같아도 다르다고 판단할 수 있다.
      • 연관성: 객체지향 언어는 객체를 참조함으로서 연관성을 나타내지만 RDBMS에서는 외래키를 삽입함으로써 연관성을 표현한다. 또한 객체지향 언어에서 객체를 참조할 때에는 방향성이 존재하지만 RDBMS에서 외래키를 삽입하는 것은 양방향의 관계를 가지기 때문에 방향성이 없다.

 

6.3 JPA

  • 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음
  • 내부적으로 JDBC를 사용

 

6.4 하이버네이트

  • JPA가 정의하는 인터페이스를 구현하고 있는 구현체 중 하나.
  • Spring Data JPA
    • JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트
    • CRUD 인터페이스 제공
    • 엔티티 매니저를 직접 다루지 않고 리포지토리를 정의하여 사용

 

6.5 영속성 컨텍스트

  • 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능 수행
  • 영속 객체: 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 된 객체
  • 세션 단위의 생명주기를 가지고 있음
  • 엔티티 매니저
    • 엔티티를 관리하는 객체
    • 데이터베이스에 접근하여 CRUD 작업 수행
    • 엔티티 매니저 팩토리를 통해서 생성되며, 엔티티 매니저 팩토리는 단 하나만 존재
  • 엔티티의 생명주기
    • 비영속: 영속성 컨텍스트에 추가되지 않은 엔티티 객체의 상태
    • 영속: 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태
    • 준영속: 영속성 컨텍스트에 의해 관리되던 엑티티 객체가 컨텍스트와 분리된 상태
    • 삭제: 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태

 

6.6 데이터베이스 연동

  • Configuration
    • Swagger (springdocs 기본설정)
    • 데이터베이스 기본 설정 (h2 local 기본설정)

 

6.7 엔티티 설계

  • Entity: 해당 클래스가 엔티티임을 명시하기 위한 어노테이션
  • Table: 클래스 이름과 테이블 이름을 달리 명세해야 하는 경우 사용
  • Id: 테이블의 기본값 역할로 사용(Primary key)
  • GeneratedValue: 필드 값을 어떤 방식으로 자동으로 생성할 것인지 결정
    • AUTO: 기본값을 사용하는 데이터베이스에 맞게 자동 생성
    • IDENTITY: AUTO_INCREMENT를 사용해 기본값 생성
    • SEQUENCE: SequenceGenerator를 적용하여 기본값 생성
    • TABLE: 테이블을 별도로 생성해서 그 테이블에서 기본값을 관리하는 방식
  • Column
    • name
    • nullable: null 처리가 가능한지 여부
    • length: 데이터베이스에 저장하는 데이터의 최대 길이
    • unique: 해당 칼럼을 유니크로 설정
  • Transient: 클래스에는 선언되어 있지만 데이터베이스에서는 필요없을 경우 사용하는 어노테이션

 

6.8 리포지토리 인터페이스 설계

  • Spring Data JPA가 제공하는 인터페이스
  • 메소드 생성규칙에 따라 작성

 

6.9 DAO 설계

  • 리포지토리/매퍼를 서비스 레이어에서 직접 쓰는 것으로도 충분하지 않을까?
    • DB 처리에 필요한 각종 예외처리 등의 코드들이 비즈니스 로직에 들어가면 지저분하다.
    • 비즈니스 로직과 관련없는 로직들을 DAO 레이어에 몰아줘서 코드를 최대한 깔끔하게 유지하자!

 

 

GitHub - youlive789/spring-boot-guide: 스프링부트 핵심 가이드 스터디

스프링부트 핵심 가이드 스터디. Contribute to youlive789/spring-boot-guide development by creating an account on GitHub.

github.com

 

Comments