데이터베이스 적용하기 | Maria DB, Entity, Repository, DAO, DTO

wsung·2025년 12월 5일

Spring Boot 서비스 구조



Entity(Domain)

  • 데이터베이스에 쓰일 컬럼과 여러 엔티티 간의 연관관계를 정의함.
  • 데이터 베이스의 테이블은 하나의 엔티티로 생각해도 무방.
  • 실제 데이터베이스의 테이블과 1:1로 매핑, 이 클래스의 필드는 각 테이블 내부의 컬럼을 의미

Ropository

  • Entity에 의해 생성된 데이터베이스에 접근하는 메소드를 사용하기 위한 인터페이스
  • Service와 DB를 연결하는 고리의 역할을 수행
  • 데이터베이스에 적용하고자 하는 CRUD를 정의하는 영역

DAO(Data Access Object)

  • 데이터베이스에 접근하는 객체를 의미
  • Service가 DB에 연결할 수 있게 해주는 역할
  • DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담

DTO(Data Transfer Object)

  • DTO는 VO(Value Object)로 불리기도 하며, 계층간 데엍 교환을 위한 객체를 의미
  • VO의 경우 Read Only의 개념을 가지고 있음


data - dto - productDto 생성

package com.example.demo.data.dto;

import lombok.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
public class productDto {

    private String productId;
    private String productName;
    private int productPrice;
    private int productStock;

    private ProductEntity toEntity(){
        return ProductEntity.builder()
                .productId(productId)
                .productName(productName)
                .productPrice(productPrice)
                .productStock(productStock)
                .build();
    }

}

상품 DTO 생성



data - entity - ProductEntity 생성

package com.example.demo.data.entity;


import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "product")
public class productEntity {

    @Id
    String productId;
    String productName;
    Integer productPrice;
    Integer productStock;
}

@Entity선언,
@Table(name = "product") : 데이터베이스에 테이블을 만듦, 이름은 name
@Id : pk값



data - repository - ProductRepository(interface) 생성

package com.example.demo.data.repository;

import com.example.demo.data.entity.ProductEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<ProductEntity, String> {

}
  • JpaRepository 상속, ProductEntity 가져옴


data - dao - ProductDAO(interface) 생성

package com.example.demo.data.dao;

import com.example.demo.data.entity.ProductEntity;

public interface ProductDAO {

    ProductEntity saveProduct(ProductEntity productEntity);

    ProductEntity getProduct(String productID);
}
  • 인터페이스는 구체화된 코드가 들어가 있지않음, 선언만 함


data - dao - impl -ProductDAOImpl

  • DAO 에서 선언했던 saveProduct, getProduct를 구체적으로 만들어주는 곳
package com.example.demo.data.dao.impl;

import com.example.demo.data.dao.ProductDAO;
import com.example.demo.data.entity.ProductEntity;
import com.example.demo.data.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;

public class ProductDAOImpl implements ProductDAO {

    ProductRepository productRepository;

	// 1. 클래스 이름과 동일한 생성자 부분 선언
    @Autowired // 자동 연결
    public ProductDAOImpl(ProductRepository productRepository){
        this.productRepository = productRepository;
    }
    
    

    @Override
    public ProductEntity saveProduct(ProductEntity productEntity){
        productRepository.save(productEntity);
        return productEntity;
    }

    @Override
    public ProductEntity getProduct(String productId){
        ProductEntity productEntity = productRepository.getById(productId);
        return productEntity;
    }
}

ProductRepository를 활용해서 코드를 작성해야함
Autowired로 자동연결함

하지만 ProductRepository에 보면 선언된게 하나도 없음

이전에 ProductRepository에서 extends JpaRepository했었는데 JpaRepository는 기본적으로 우리에게 save, getById등 기본 메소드를 제공해줌


DB


새로운 DB생성

application.properties

# ========================
# DB 설정
# ========================
spring.datasource.url=jdbc:mariadb://localhost:3306/ws
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

# ========================
# JPA 설정
# ========================
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

gradle 추가

	/* Database Driver (MariaDB) */
	implementation 'org.mariadb.jdbc:mariadb-java-client:3.3.3'

-> 스프링 실행하면


테이블이 추가되어있음

profile
0부터 시작하는 백엔드

0개의 댓글