[SpringBoot]데이터베이스 연동

dong's memory·2023년 12월 25일
0

Spring

목록 보기
3/11
post-thumbnail

📒 관련 용어

ORM(Object Relational Mapping)

  • 객체 관계 매핑을 뜻한다.
  • 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB의 테이블을 자동으로 매핑하는 방법
  • 객체지향 언어에서의 객체는 클래스를 의미
  • 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 불일치가 존재
  • ORM은 불일치와 제약사항을 해결하는 역할
  • ORM을 이용하면 쿼리문 작성이 아닌 코드(메서드)로 데이터를 조작할 수 있음.

RDB(Relational Database)

  • 관계형 데이터 모델에 기초를 둔 데이터 베이스
  • 해당 모델은 모든 데이터를 2차원 테이블로 표현
  • 테이블은 이름을 가지고 있고, 행(row)과 열(column) 그리고 거기에 대응하는 값을 가짐
  • RDB는 서로 다른 테이블이 관계를 맺고 모여있는 집합체로 이해

JPA(Java Persistence API)

  • 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음
  • ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함
  • 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세로 생각
  • JPA의 메커니즘
    • 내부적으로 JDBC를 사용
    • JPA는 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행
    • JPA 기반의 구현체는 대표적으로 3가지 존재
      하이버네이트, 이클립스 링크, 데이터 뉴클리어스
      가장 많이 사용되는 구현체는 하이버네이트

하이버네이트(Hibernate)

  • 자바의 ORM 프레임워크로 JPA가 구현체 중 하나

영속성 컨텍스트(Persistence Context)

  • 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행
  • 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터는 해당 객체를 영속 객체(Persistence Object)라고 부름
  • 생명주기는 세션 단위로 가짐
  • 엔티티 매니저
    • 엔티티를 관리하는 객체
    • 데이터베이스에 접근해서 CRUD 작업을 수행
    • 추후 배울 Spring Data JPA를 사용하면 리포지토리를 사용해서 제이터베이스에 접근
    • 엔티티 매니저는 엔티티 매니저 팩토리(EntityManagerFactory)가 만듬, 해당 객체는 스프링 부트에서 자동 설정 기능이 있기 때문에 application.properties에서 최소한의 설정만으로도 동작가능하지만 하이버네이트에서는 persistence.xml 설정 파일을 구성하고 사용해야 하는 객체

💾 데이터베이스 연동

환경설정

  • Spring Data JPA 의존성을 추가한 후에는 별도의 설정이 필요
    앞서 말한 application.properties에 연동할 데이터베이스의 정보 작성
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
// 데이터베이스의 드라이버를 정의
// pom.xml -> mariadb-java-client 의존성 필요
spring.datasource.url=jdbc:mariadb://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=password
// 마리아DB의 경로와 데이터베이스명 입력

// ▼ 하이버네이트를 사용할 때 활성화할 수 있는 선택사항
spring.jpa.hibernate.ddl-auto=update
// ddl-auto 데이터베이스를 자동으로 조작하는 옵션
// create : 실행 시 같은 이름이면 기존 테이블 삭제 후 생성
// update 실행 시 변경된 부분만 반영하며 기존 테이블을 수정하지 않는다.
// none : ddl-auto 기능을 사용하지 않음
spring.jpa.show-sql=true
// show-sql : 생성한 쿼리문을 출력하는 옵션
spring.jpa.properties.hibernate.format_sql=true
// sql문 출력시 보기 좋게 출력하는 옵션

엔티티 설계

0개의 댓글