[ZB_BOOK STUDY] 스프링 부트 핵심 가이드 (6-2)

Dreamer·2024년 4월 7일
0
post-thumbnail

📖 스프링 부트 핵심 가이드

: 스프링 부트를 활용한 애플리케이션 개발 실무


📝 목차

6장. 데이터베이스 연동

6-6. 데이터 베이스 연동
- 프로젝트 생성

6-7. 엔티티 설계
- 엔티티 관련 기본 어노테이션

6-8. 리포지토리 인터페이스 설계
- 리포지토리 인터페이스 생성
- 리포지토리 메소드의 생성 규칙

6-9. DAO 설계
- 클래스 생성

6-10. DAO 연동을 위한 컨트롤러와 서비스 설계
- 서비스 클래스 만들기
- 컨트롤러 생성
- Swagger와 API를 통한 동작 확인

6-11. [한 걸음 더] 반복되는 코드의 작성을 생략하는 방법 - 롬복
- 롬복 설치
- 롬복 적용
- 롬복의 주요 어노테이션


6장. 데이터베이스 연동

  • 마리아DB (MariaDB) 애플리케이션에 적용하기

6-6. 데이터 베이스 연동

생성한 데이터베이스를 사용하기 위해서는 스프링부트 애플리케이션과 연동 진행

프로젝트 생성

4,5장에서 처럼 프로젝트 생성하기

  • 의존성 선택 단계에서 라이브러리 선택하기

    Developer Tools > Lombok, Spring Configuration Processor
    Web > Spring Web
    SQL > Spring Data JPA, MariaDB Driver

Spring Data JPA 의존성을 추가한 후에는 별도의 설정이 필요합니다.
즉, 애플리케이션이 정상적으로 실행될 수 있게 연동할 데이터베이스의 정보를 application.properites에 작성

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/springbootdb
spring.datasource.username=springboot
spring.datasource.password=spring

spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

⬇️ 설명

⭐ 데이터베이스를 연동하는데 사용하는 값을 설정 ⭐
1. spring.datasource.driver-class-name=연동하려는 데이터베이스의 드라이버를 정의 
✅ 마리아DB의 경우 ➡️ org.mariadb.jdbc.Driver

2. spring.datasource.url= 마리아DB 경로임을 명시하고 경로와 데이터베이스명을 입력
✅ jdbc:mariadb://localhost:내 포트 번호/데이터베이스명
3. spring.datasource.username=사용자 계정 이름
4. spring.datasource.password=사용자 계정 비밀번호

⭐ 하이버네이트를 사용할 때 활성화할 수 있는 선택사항 ⭐
5. spring.jpa.hibernate.ddl-auto=옵션값 
6. spring.jpa.show-sql=true 
7. spring.jpa.properties.hibernate.format_sql=true

5. spring.jpa.hibernate.ddl-auto=옵션값
: ddl-auto는 데이터베이스를 자동으로 조작하는 옵션

⬇️ 옵션 값 설명

✅ create
: 애플리케이션 가동 ➙ SessionFactory 실행 ➙ 기존 테이블 삭제 후 새로 생성

✅ create-drop
: create와 동일한 기능을 수행하나 애플리케이션 종료하는 시점에 테이블 삭제

 ✅ update
: SessionFactory가 실행 ➙ 객체를 검사해서 변경된 스키마를 갱신
기존에 저장된 데이터는 유지

✅ validate
: update처럼 객체를 검사하지만 스키마는 변동 없음
검사 과정에서 데이터베이스의 정보 ↔ 객체의 정보가 다르면 에러 발생

✅ none
: ddl-auto 기능을 사용 안함

(주의) 운영환경에서는 create, create-drop, update사용 ❌

① 데이터베이스 축적된 데이터를 지워버릴수도 있고,
② 실수로 객체의 정보가 변경
➙ 운영 환경의 데이터베이스 정보까지 변경 될 수 있기 때문에

운영 환경에서는 대체로 validate나 none을 사용하고,
개발 환경에서는 create 또는 update를 사용하는 편이다.

6. spring.jpa.show-sql=true
show-sql은 로그에 하이버네이트가 생성한 쿼리문을 출력하는 옵션
아무설정이 없으면 보기 불편하게 한 줄로 출력 됨

7. spring.jpa.properties.hibernate.format_sql=true
format_sql 옵션으로 사람이 보기 좋게 포매팅할 수 있음

6-7. 엔티티 설계

Spring Data Jpa를 사용
➙ 데이터베이스 테이블을 생성을 위해 직접 쿼리 작성할 필요❌

⬇️
엔티티 : 이 기능을 가능하게 하는 것
JPA에서 엔티티는 데이터베이스 테이블에 대응하는 클래스
엔티티에서는 데이터베이스에 쓰일 테이블과 칼럼을 정의

엔티티(클래스)에 엔티티 어노테이션을 사용 @Entity
➙ 테이블간의 연관관계를 정의할 수 있다.

엔티티 관련 기본 어노테이션

✅ @Entity
: 해당 클래스가 엔티티임을 명시하기 위한 어노테이션
클래스 자체는 테이블과 일대일로 매칭 (대응)
해당 클래스의 인스턴스는 매핑되는 테이블에서 하나의 레코드를 의미

✅ @Table
: 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우 사용
@Table을 명시하지 않으면 테이블 이름 = 클래스 이름로 간주
⭐ @Table(name = 값) 형태로 데이터베이스의 테이블을 명시해야 한다.
대체로 자바의 명명법과 데이터베이스가 사용하는 명명법이 다르기 때문에 자주 사용
✅ @Id
: 엔티티 클래스의 필드는 테이블의 칼럼과 매핑
@Id 어노테이션이 선언된 필드는 테이블의 기본값 역할로 사용
⭐ 모든 엔티티는 @Id 어노테이션이 필요

✅ @GeneratedValue
: 일반적으로 @Id 어노테이션과 함께 사용
➙ 해당 필드의 값을 어떤 방식으로 자동으로 생성할지 결정할 때 사용

1️⃣ GeneratedValue를 사용하지 않는 방식 (직접할당)
: 애플리케이션에서 자체적으로 고유한 기본값을 생성할 경우 사용하는 방식
- 내부에 정해진 규칙에 의해 기본값을 생성하고 식별자로 사용

2️⃣ AUTO
: @GeneratedValue의 기본 설정 값
기본값을 사용하는 데이터베이스에 맞게 자동 생성

3️⃣ IDENTITY
: 기본값 생성을 데이터베이스에 위임하는 방식
데이터베이스의 AUTO_INCREMENT를 사용해 기본값을 생성

4️⃣ SEQUENCE
: @SequenceGenerator 어노테이션으로 식별자 생성기를 설정 
➙ 이를 통해 값을 자동 주입 받음

SequenceGenerator를 정의할 때는 name, sequenceName, allocationSize를 활용
@GeneratedValue에 생성기를 설정

5️⃣ TABLE
: 어떤 DBMS를 사용하더라도 동일하게 동작하기를 원할 경우 사용
식별자로 사용할 숫자의 보관 테이블을 별도로 생성 
➙ 엔티티를 생성할 때마다 값을 갱신하며 사용

@TableGenerator 어노테이션으로 테이블 정보를 설정
✅ @Column
엔티티 클래스의 자동으로 테이블 칼럼으로 매핑
별다른 설정을 하지 않는다면 명시하지 않아도 괜찮다!

⭐ 설정에 많이 사용되는 요소 ⭐
1️⃣ name
: 데이터베이스의 칼럼명을 설정하는 속성 (명시하지 않으면 필드명으로 지정)

2️⃣ nullable
: 레코드를 생성할 때 칼럼 값에 null 처리가 가능한지를 명시하는 속성

3️⃣ length
: 데이터베이스에 저장하는 데이터의 최대 길이를 설정

4️⃣ unique
: 해당 칼럼을 유니크로 설정
✅ @Transient
엔티티 클래스에는 선언되어 있는 필드지만, 
데이터베이스에 필요 없을 경우 이용하지 않게 하는 어노테이션

6-8. 리포지토리 인터페이스 설계

리포지토리 인터페이스 생성

리포지토리 메소드의 생성 규칙

6-9. DAO 설계

클래스 생성

6-10. DAO 연동을 위한 컨트롤러와 서비스 설계

서비스 클래스 만들기

컨트롤러 생성

Swagger와 API를 통한 동작 확인


6-11. [한 걸음 더] 반복되는 코드의 작성을 생략하는 방법 - 롬복

롬복 설치

롬복 적용

롬복의 주요 어노테이션

profile
Moving forward based on records

0개의 댓글