Spring/Spring 쇼핑몰 프로젝트

[쇼핑몰프로젝트] ChatGPT를 이용하여 만드는 JAVA Spring 쇼핑몰 - Day 5: 데이터베이스 설정

개발자하소서 2024. 8. 7. 21:26
728x90
반응형
SMALL

 

 

오늘은 데이터베이스 개념을 소개하고, H2 Database를 설정하여 사용하는 방법과 Spring Data JPA 설정을 다룬다.

 

 

📌 데이터베이스 개념 소개

 


 - 데이터베이스는 데이터를 저장, 관리, 검색할 수 있는 시스템이다.

 - SQL(Structured Query Language)을 사용하여 데이터베이스와 상호작용한다.

 - 오늘은 간단하고 임베디드형 데이터베이스인 H2를 사용하여 학습한다.

 

 

 

📌 H2 Database 설정 및 사용

 


 - H2 Database는 자바 기반의 경량 임베디드형 데이터베이스로, 학습과 개발에 용이하다.

 

 

 

📌 H2 Database 의존성 추가

 


- 먼저, pom.xml 파일에 H2 Database 의존성을 추가한다.



 

	<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<version>2.1.214</version>
			<scope>runtime</scope>
		</dependency>

 

 

 

 

📌 애플리케이션 설정

 



-  'application.properties' 파일을 다음과 같이 설정한다.





  • spring.datasource.url은 H2 데이터베이스의 메모리 모드를 설정한다.
  • spring.h2.console.enabled=true는 H2 콘솔을 활성화한다.







1. spring.datasource.url=jdbc:h2:mem:testdb


  - jdbc:h2:mem : H2 데이터베이스를 메모리 모드로 사용한다는 의미다. testdb는 데이터베이스의 이름이다.


  - H2 데이터베이스 : Java 애플리케이션에서 쉽게 임베디드 데이터베이스로 사용할 수 있는 경량 데이터베이스다.

                                   메모리 모드로 설정하면 애플리케이션이 종료되면 데이터베이스도 사라진다.




2. spring.datasource.driverClassName=org.h2.Driver:


  - JDBC 드라이버 클래스를 지정한다. H2 데이터베이스를 사용하기 위해 org.h2.Driver를 사용한다.




3. spring.datasource.username=sa:


  - 데이터베이스 접속에 사용할 기본 사용자 이름이다. H2 데이터베이스의 기본 사용자 이름은 sa다.




4. spring.datasource.password=:


  - 데이터베이스 접속에 사용할 비밀번호다. 기본 설정에서는 비밀번호가 없다.



5. spring.h2.console.enabled=true:


  -  H2 데이터베이스 콘솔을 활성화한다.
 
  - 이를 통해 웹 브라우저에서 H2 데이터베이스를 직접 조회하고 조작할 수 있는 웹 콘솔을 사용할 수 있다.








1. spring.jpa.database-platform=org.hibernate.dialect.H2Dialect:


  - JPA를 사용할 때 데이터베이스에 맞는 방언(dialect)을 지정한다.

  - H2 데이터베이스에 맞는 방언은 org.hibernate.dialect.H2Dialect다.

  - Hibernate는 SQL을 생성하기 위해 데이터베이스에 맞는 방언을 사용한다.




2. spring.jpa.hibernate.ddl-auto=update:


 - Hibernate가 애플리케이션 시작 시 데이터베이스 스키마를 어떻게 처리할지를 지정한다.

 - update로 설정하면, Hibernate는 엔티티 클래스와 데이터베이스 스키마를 비교하여 변경된 사항이 있으면
   스키마를 업데이트  한다.

 - 다른 옵션으로는 none, validate, create, create-drop 등이 있으며, 각각의 의미는 다음과 같다:

    * none: Hibernate가 데이터베이스 스키마에 아무 작업도 하지 않는다.
   
    * validate: 데이터베이스 스키마가 엔티티 클래스와 일치하는지 확인하지만, 변경사항은 적용하지 않는다.
    
    * create: 기존 스키마를 삭제하고, 엔티티 클래스에 맞춰 새로 생성한다.
   
    * create-drop: create와 같지만, 애플리케이션 종료 시 스키마를 삭제한다.




 이 설정을 통해 Spring Boot 애플리케이션이 H2 메모리 데이터베이스와 JPA(Hibernate)를 사용하여

 데이터 관리를 할 수 있게 된다.  H2 콘솔을 통해 데이터베이스를 직접 조회하고 조작할 수 있으며,

 JPA를 통해 객체 지향적인 방식으로 데이터베이스와 상호작용할 수 있다.

 

 

 

📌 Spring Data JPA 설정

 


- Spring Data JPA는 자바 애플리케이션에서 데이터베이스와 상호작용을 간단하게 만들어준다.

 

 

 

 

📌 1. Spring Data JPA 의존성 추가

 


- pom.xml 파일에 Spring Data JPA 의존성을 추가한다.



 

 

	<!-- Spring Data JPA -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
			<version>3.3.2</version>
		</dependency>

 

 

 

📌 2. 엔티티 클래스 작성

 


- 예제로 간단한 Product 엔티티 클래스를 작성한다.





 

package com.example.demo.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
// @Entity: 이 클래스가 데이터베이스 테이블과 매핑되는 JPA 엔터티임을 나타냄 
public class Product {
    
    @Id 
    // @Id: 이 필드가 엔터티의 기본 키임을 나타냄
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    // 기본 키 값을 데이터베이스가 자동으로 생성하도록 한다. 
    //GenerationType.IDENTITY는 주로 MySQL에서 사용하는 방식으로, 
    //기본 키 생성을 데이터베이스에 위임한다.
    private Long id;
    
    private  String name;
    private Double price;
    
}

 

 

 

 

📌 3. 리포지토리 인터페이스 작

 


- ProductRepository 인터페이스를 작성한다.





<주요 기능>

- ProductRepository 인터페이스는 JpaRepository를 상속받음으로써 기본적인 CRUD 메서드를 자동으로 사용할 수 있다.

  (예: save, findById, findAll, deleteById 등.)


- 추가적인 쿼리 메서드를 정의할 수 있다.

(예를 들어, findByName(String name)과 같은 메서드를 추가하여 이름을 기반으로 제품을 검색할 수 있다.)


- 이렇게 정의된 ProductRepository를 사용하면 Spring Data JPA가 자동으로 구현체를 생성해주며, 개발자는 별도의 구현 없이

도 데이터베이스와의 상호작용을 쉽게 처리할 수 있다.

 

 

package com.example.demo.repository;

import com.example.demo.model.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
// 이 인터페이스가 Spring의 저장소 역할을 한다고 표시하는 어노테이션이다.
// Spring은 이 어노테이션을 사용하여 이 인터페이스를 빈으로 등록하고, 
// 예외를 데이터 액세스 계층과 관련된 예외로 변환한다.

public interface ProductRepository extends JpaRepository<Product, Long> {
}

/* JpaRepository<Product, Long>를 확장함으로써 
ProductRepository는 Product 엔티티에 대해 다양한 CRUD 메서드와 페이징, 정렬 등을 
사용할 수 있게 된다 */

 

 

 

📌 4. 데이터베이스 초기화

 


 - data.sql 파일을 사용하여 초기 데이터를 삽입할 수 있다.

 - src/main/resources 디렉토리에 data.sql 파일을 생성하고 다음 내용을 추가한다.


 

 

INSERT INTO product (name, price) VALUES ('Product1', 100.0);
INSERT INTO product (name, price) VALUES ('Product2', 200.0);
728x90
반응형
LIST