본문 바로가기
Springboot

[Springboot] 9. 스프링부트 데이터베이스 연동

by 상도동개발자 2023. 2. 8.
SMALL

1. MariaDB 설치

1-1. https://mariadb.com/kb/en/mariadb-server-10-6-5/

 

2. ORM

ORM은 Object Relational Mapping의 줄임말로 객체 관계 매핑을 의미합니다. 객체지향언어에서 의미하는 객체와 RDB의 테이블을 자동으로 매핑하는 방법입니다. 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재합니다. ORM은 이둘의 불일치와 제약사항을 해결하는 역할을 합니다.

- ORM 역할

ORM의 역할

2-1. ORM의 장점

2-1-1. ORM을 사용하면서 쿼리를 객체지향적으로 조작 가능

- 쿼리문을 작성하는 양이 현저히 줄어 개발 비용 절감

- 객체지향적으로 데이터 베이스에 접근 할 수 있어 코드에 가독성을 높힐 수 있음

2-1-2. 재사용 및 유지보수가 편리하다

- ORM을 통해 매핑된 객체는 모두 독립적으로 작성되어 있어 재사용이 가능

- 객체들은 각 클래스로 나뉘어 있어 유지보수가 수월

2-1-3. 데이터베이스에 대한 종속성이 줄이듭니다.

- ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 테이블을 관리하기 때문에 데이터베이스에 종속적이지 않음

- 데이트베이스를 교체하는 상황에서도 비교적 적은 리스크를 부담

 

2-2. ORM의 단점

2-2-1. ORM만으로 온전한 서비스를 구현하기에는 한계가 있음

- 복잡한 서비스의 경우 직접 쿼리를 구현하지 않고 코드를 구현하기 쉽지 않음

- 복잡한 쿼리를 정확한 설계 없이 ORM만으로 구성하게 되면 속도 저하등의 성능문제가 발생 할 수있음

2-2-2. 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치가 발생

- 세분성 : ORM의 자동 설계 방법에 따라 데이터베이스에 있는 테이블의 수와 애플리케이션의 엔티티(Entity) 클래스의 수가 다른경우가 생깁니다(클래스가 테이블 수보다 많아 질 수있음)

- 상속성 : RDBMS에는 상속의 개념이 없음

- 식별성 : RDBMS는 기본키로 동일성을 정의합니다. 하지만 자바는 두 객체의 값이 같아도 다르다고 판단 할 수 있습니다. 식별과 동일성의 문제

- 연관성 : 객체지향 언어는 개체를 참조함으로써 연관성을 나타내지만 RDBMS에서는 외래키를 삽입함으로서 연관성을 표현합니다. 또한 객체 지향 언어에서 객체를 참조할 때는 방향성이 존재하지만 RDBMS에서 외래키를 삽입하는것은 양방향의 관계를 가지기 때문에 방향성이 없음

 

3. JPA

JPA는 자바의 ORM 기술 표준으로 채택된 인터페이스의 모음입니다. ORM이 큰 개념이라면 JPA는 구체화된 스펙을 의미합니다. JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세입니다.

ORM의 구체화된 자바 표준 스펙인 JPA

- JPA는 내부적으로 JDBC를 사용

- 개발자가 JDBC를 구현하면 SQL에 의존하게 되는 문제등이 있어 개발 효율성이 떨어지는데 JPA는 이 문제점을 보완하여 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행

- 대표적인 JPA 기반 구현체 3가지 

대표적인 JPA 기반 구현체 3가지

4. 하이버네이트(Hibernate)

하이버네이트는 자바 ORM 프레임워크로 JPA가 정의하는 인터페이스를 구현하는 있는 JPA 구현체

4-1. Spring Data Jpa

Spring Data Jpa는 JPA를 편리하게 사용 할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나입니다.

- CRUD 처리에 필요한 인터페이스를 제공

- 하이버네이트의 엔티티 매니저를 직접 다루지 않고 리포지토리를 정의해 사용

Spring Data JPA

5. 데이터베이스 및 Spring Data Jpa 설정

5-1. 의존성 추가

pom.xml 의존성 추가

5-2. application.preperties 데이터베이스 및 jpa 설정

application.preperties 설정

설정명 설명
spring.datasource.driver-class-name 연동하려면 데이터베이스의 드라이버를 정의
spring.datasource.url 경로와 데이터베이스명 입력
spring.datasource.username 계정명
spring.datasource.password 암호
spring.jpa.hibernate.ddl-auto 데이터베이스를 자동으로 조작하는 옵션
(create, create-drop, update, validate, none 옵션이 있으며 운영환경에서는 대체적으로 validate, none을 사용) 
spring.jpa.show-sql 로그에 하이버네이트가 생성한 쿼리문을 출력하는 옵션
spring.jpa.properties.hibernate.format_sql 로그를 포기 편하게 노출시켜줌(false 시 한줄로 길게 나옴)

 

 
728x90
반응형
LIST

댓글