Backend/SpringBoot

[SpringBoot] MariaDB 데이터베이스를 연동해보자

seoraroong 2024. 8. 22. 18:49

MariaDB 다운로드하기

https://mariadb.org/download/?t=mariadb&p=mariadb&r=11.3.2&os=windows&cpu=x86_64&pkg=msi&mirror=blendbyte

 

Download MariaDB Server - MariaDB.org

REST API Release Schedule Reporting Bugs … Continue reading "Download MariaDB Server"

mariadb.org

 

→ root 비밀번호 설정 후 [Use UTF8 as default server’s character set] 체크 박스 체크

→ 기존에 설치했던 MySQL이 포트번호 3306을 쓰고 있어서 발생한 에러 메시지

→ 3307로 수정 후 Install

 

  • MariaDB 설치가 완료되면 자동으로 HeidiSQL 서드파티 도구가 설치된다
    • HeidiSQL : 데이터베이스에 접속해서 관리하는 GUI 도구

→ 위와 같이 설정 완료 후 [열기]

  • 새로운 데이터베이스 생성
    • springboot

 

 

 

 

ORM(Object Relational Mapping, 객체 관계 매핑)

  • 객체와 RDB(Relational DataBase)의 테이블을 자동으로 매핑하는 방법
    • 객체 → 클래스
  • 쿼리문 작성이 아닌 코드(메서드)로 데이터 조작 가능

 

JPA(Java Persistence API)

  • 자바 진영의 ORM 기술 표준으로 채택된 인터페이스 모음
  • ORM이 JPA의 상위 개념, JPA가 더 세부적인 개념
  • 대표적인 JPA 기반 구현체
    • 하이버네이트 (Hibernate)
      • 자바의 ORM 프레임워크 → Spring Data JPA
        • Spring Data JPA : CRUD 처리에 필요한 인터페이스 제공, 레포지토리 정의해 사용
    • 이클립스 링크 (EclipseLink)
    • 데이터 뉴클리어스 (DataNucleus)

 

 

데이터베이스 연동을 위한 프로젝트 생성

 

  • 데이터베이스 연동을 위한 새로운 프로젝트 생성
    • 의존성 라이브러리는 다음과 같이 추가

 

- resource 하위에 logback xml 파일 업로드

 

- resource 하위 → [application.properties]에 데이터베이스 관련 설정 추가하기

  • 애플리케이션이 정상 실행될 수 있게 연동할 데이터베이스 정의

 

 

Entity 설계 - 테이블 생성

→ Spring Data JPA를 사용하면 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없다

→ 엔티티 기능을 이용

→ 엔티티에는 데이터베이스에 쓸 테이블과 컬럼을 정의

→ Annotation을 이용해 테이블 간 연관 관계 지정 가능

  • 구현할 데이터베이스 테이블 도식화

<Product> 테이블

상품 번호 int
상품 이름 varchar
상품 가격 int
상품 재고 int
상품 생성 일자 DateTime
상품 정보 변경 일자 DateTime

 

 

- data.entity 패키지 생성 → Product 클래스 생성

 

 

📌 엔티티 관련 기본 Annotation 정리

  • @Entity : 해당 클래스가 엔티티임을 명시
  • @Table : 클래스 이름과 테이블 이름을 다르게 지정해야 하는 경우 사용
  • @Id : 테이블의 기본값 역할로, 모든 엔티티는 @Id 어노테이션이 필요
  • @GeneratedValue : @Id 어노테이션과 함께 사용, 필드 값 자동 생성 방식 결정
    • AUTO : @GeneratedValue의 기본 설정값
    • IDENTITY : AUTO_INCREMENT 역할
    • SEQUENCE
    • TABLE
  • @Column
  • @Transient

 

 

레포지토리 인터페이스 설계

  • 레포지토리 인터페이스 생성
    • 엔티티가 생성한 데이터베이스에 접근하기 위해 사용
    • JpaRepository를 상속 받는다

→ repository 패키지 생성 후 repository 인터페이스 생성하기

 

 

 

DAO 설계 (Data Access Object)

→ 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체

→ Spring Data JPA에서 DAO 개념은 Repository가 대체한다

→ ‘인터페이스 - 구현체’ 구성으로 생성

→ 서비스 레이어에 DAO 객체를 주입받을 때 인터페이스를 선언하는 방식으로 구성 가능

  • DAO 패키지 생성 및 인터페이스, 클래스(구현체) 생성
  • 기본적인 CRUD를 다루기 위해 ProductDao 인터페이스에 메서드 정의

 

- ProductDao 인터페이스의 구현체 클래스 작성

 

Create, Read

 

Update, Delete

 

 

 

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

→ 앞서 설계한 구성요소들을 클라이언트 요청과 연결하기 위해 컨트롤러와 서비스 생성

 

  • 서비스 패키지 및 클래스 생성
    • 서비스 레이어에서는 도메인 모델을 활용해 애플리케이션에서 제공하는 핵심 기능 제공
      • 핵심 기능을 구현하기 위해서는 세부 기능 정의 필요
  • 서비스 인터페이스에 필요한 DTO 패키지, 클래스 생성 (Data Transfer Object, 데이터 전송 객체)
    • 데이터를 전송하기 위한 객체

 

 

  • 서비스 인터페이스 및 구현체 클래스 생성
    • 서비스는 클라이언트가 요청한 데이터를 적절히 가공해 컨트롤러에게 넘기는 역할

 

  • 구현체 클래스
    • DAO 인터페이스 선언 후 @Autowired를 지정한 생성자를 통해 의존성 주입

 

 

 

 

컨트롤러 생성

→ 비즈니스 로직과 클라이언트의 요청을 연결하는 컨트롤러 생성

→ 클라이언트로부터 요청을 받고 해당 요청에 대해 서비스 레이어에 구현된 적절한 메서드를

호출하여 결괏값을 받는다

  • 아래 코드에서는 create 메서드 구현 → 추후에 POST 요청으로 데이터 업데이트 실습

 

 

 

프로젝트 동작 확인

→ 설계한 프로젝트를 실행하면 MariaDB의 지정한 데이터베이스에 테이블이 생성된다.

 

- Talend API Tester를 이용해 테이블에 데이터를 POST하는 요청 실행하기

 

- MariaDB에서 테이블 조회해서 요청이 정상적으로 성공했는지 확인하기

 

 

 

 

Summary - MariaDB 데이터베이스 연동 프로젝트

 

- 프로젝트 구조