📒 관련 용어
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
spring.datasource.url=jdbc:mariadb://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
엔티티 설계