데이터 베이스 연동
마리아 DB 설치
- 애플리케이션은 데이터를 주고 받는 것이 주 목적
- 정상적으로 로직이 동작하기 위해서는 데이터베이스(DB)가 반드시 필요하고,
그 중 가장 널리 사용되는 마리아 DB를 사용할 예정
- 마리아 DB 다운로드 페이지(https://mariadb.org/download) 에서 다운 가능
- 해당 사진과 같이 버전을 10.6.5로 맞추는 것이 좋음.
Display older releases를 체크하면 이전 버전을 선택할 수 있음
- Next를 눌러 설치를 진행
- 해당 화면이 나오면 root 계정의 비밀번호를 생성
실무에서는 보안상 root 패스워드는 사용하지 않지만, 실습에서는 사용
- 문자 인코딩 방법을 UTF-8을 기본값으로 설정하기 위해 아래도 체크
- 서버 이름과 포트 번호를 설정
- 포트 번호의 경우 기본적으로 3306이 사용되나, 별도의 데이터 베이스를 설치한 경우 3307로 매핑되기도 함
- 좌측 하단 [신규] 버튼을 누르면 접속 정보를 설정할 수 있는 항복들이 등장
- 사용자는 root로, 암호는 마리아 DB 설치 시 지정한 패스워드를 입력
- 포트 번호는 자신이 설정한 대로 지정. 기본적으로 3306
- 데이터 베이스 접속 시 기본으로 설정되는 데이터 베이스는 환경 설정 등의 정보를 담으므로 수정하지 않음
CREATE DATABASE springboot;
ORM
ORM의 개념
- ORM(Object Relational Mapping)은 객체 관계 매핑
- 객체(클래스)와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법
- 클래스는 데이터베이스 테이블과 매핑하기 위한 것이 아니므로 불일치가 존재
이를 해결하는 것이 ORM
ORM의 장점
- ORM을 사용하면서 데이터베이스 쿼리를 객체지향적으로 조작할 수 있습니다.
- 재사용 및 유지보수가 편리합니다.
- 데이터베이스에 대한 종속성이 줄어듭니다.
ORM의 단점
- ORM만으로 온전한 서비스를 구현하기에는 한계가 있습니다.
- 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치가 발생합니다.
- 세분성(Granularity): 데이터베이스에 있는 테이블의 수와 애플리케이션의 엔티티
클래스의 수가 다른 경우
- 상속성(nheritance): RDBMS에는 상속이라는 개념이 없음
- 식별성(dentify): RDBMS는 기본키로 동일성을 정의. 하지만 자바는 두 객체의 값이 같아도 다르다고 판단 가능
- 연관성(Associations): RDBMS에서는 외래키를 삽입함으로써 연관성을 표현. RDBMS에서 외래키를 삽입하는 것은 양방향의 관계를 가지기 때문에 방향성이 없음
- 탐색(Navigation): 자바와 RDBMS는 어떤 값(객체)에 접근하는 방식이 다름
JPA
- JPA(Java Persistence API)는 ORM 기술 표준으로 채택된 인터페이스 모음
- JPA는 ORM에서 더 구체화한 스펙을 포함
실제로 동작하는 것이 아닌 어떻게 동작하는지 메커니즘을 정리한 표준 명세서
- JPA는 내부적으로 JDBC를 사용함.
개발자가 직접 개발하면 효율성이 떨어지므로, 적절한 SQL을 생성하고 데이터 베이스를 조작해 객체를 자동 매핑
- 구현체는 하이버네이트(Hibernate), 이클립스 링크(EclipseLink), 데이터 뉴클리어스(DataNucleus)가 있음
- 가장 많이 사용되는 것은 하이버 네이트
하이버네이트
- 자바의 ORM 프레임워크이자 하이버네이트는 JPA 구현체 중 하나
- 실습에서는 하이버네이트의 기능을 더욱 편리하도록 사용하는 Spring Data JPA를 사용할 예정 (6.5 참고)
Spring Data JPA
- Spring Data JPA는 JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나
- CRUD 처리에 필요한 인터페이스 제공
- 하이버네이트 엔티티 매니저를 직접 다루지 않아 스프링이 적합한 쿼리를 동적으로 생성함
- 하이버 네이트에서 자주 사용되는 기능을 더 쉽게 사용;하도록 함
영속성 컨텍스트
- 영속성 컨텍스트(Persistence Context)는 애플리케이션과 데이터베이스 사이에서 두 가지 기능을 함
- 엔티티와 레코드의 괴리를 해소하는 기능
- 객체를 보관하는 기능
- 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되면 영속 객체(Persistence Object)라고 함
- 영속 객체는 세션 단위의 생명 주기를 가짐
엔티티 매니저
- 엔티티 매니저(Entity Manager)는 데이터 베이스에 접근해서 CRUD 작업을 수행하는 엔티티 관리 객체
- Spring Data JPA를 사용하면 리포지토리를 사용해서 데이터베이스에 접근
- 엔티티 매니저는 스프링 부트에서 자동 설정된 엔티티 매니저 팩토리(Entity ManagerFactory)에서 만듦
엔티티의 생명주기
- 엔티티 객체는 영속성 컨텍스트에서 다음과 같은 4가지 상태로 구분됨
- 비영속(New) : 영속성 컨텍스트에 추가되지 않은 엔티티 객체의 상태
- 영속(Managed) : 영속성 컨텍스트에 의해 엔티티 객체가 관리되는 상태
- 준영속(Detached) : 영속성 컨텍스트에 의해 관리되던 엔티티 객체가 컨텍스트와 분리된 상태
- 삭제(Removed) : 데이터베이스에서 레코드를 삭제하기 위해 영속성 컨텍스트에 삭제 요청을 한 상태
QUIZ
1. 마리아 DB의 기본 포트 번호는 ( 3306 ) 입니다.
2. ( ORM )은 객체 관계를 매핑하는 방법을 의미합니다.
3. 클래스(객체)는 데이터베이스의 ( 테이블 )과 매핑하기 위한 것이 아니므로 ORM으로 이 불일치를 해결합니다.
4. ( JPA )는 ORM 기술 표준으로 채틱된 인터페이스 모음을 의미합니다.
5. JPA 구현 방식으로는 ( 하이버네이트 ), 이클립스 링크, 데이터 뉴클리어스가 있습니다. 그 중 ( 하이버네이트 ) 이 가장 많이 사용됩니다.
6. ( Spring Data JPA )를 이용하여 CRUD 처리나 스프링이 적합한 쿼리를 자동으로 처리하도록 할 수 있습니다.
7. 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되면 ( 영속객체 ) 라고 함
8. ( 엔티티 메니저 ) 는 데이터 베이스에 접근해서 CRUD 작업을 수행하는 엔티티 관리 객체
9. 엔티티의 생명 주기는 ( 비영속 ), ( 영속 ), ( 준영속 ), ( 삭제 ) 로 총 네 단계가 있습니다.
Answer
- 3306
- ORM
- 테이블
- JPA
- 하이버네이트
- Spring Data JPA
- 영속객체
- 엔티티 매니저
- 비영속, 영속, 준영속, 삭제
[출처] 장정우, 『스프링 부트 핵심가이드 스프링 부트를 활용한 애플리케이션 개발 실무』, 위키북스(2022), p91-101.
ⓒ 다라