JPA Spring Boot에서 MariaDB 연동하기: 설정부터 데이터 저장까지
이 포스트에서는 Spring boot에서 JPA 를 사용하여 mariaDB에 연결하여 사용해볼건데요. spring boot에서 JPA 를 사용하는 이유는 반복적인 SQL을 처리해주기 때문에 개발자는 SQL이 실행될지 생각만 해두면 되고
예측도 할 수 있습니다. 만약 관계 매핑이 어렵거나 성능에 대한 이슈가 발생되게 된다면 직접 SQL을 사용할 수도있습니다. 그럼 포스트 시작해보겠습니다.
목차
1. Spring boot와 JPA로 mariaDB를 연결하는 방법
2. JPA를 사용하여 mariaDB에 값을 저장해보자
1. Spring boot와 JPA 로 mariaDB를 연결하는 방법
※ 이 블로그는 Intellij와 spring boot (gradle)에서 작성되었습니다.
일단 JPA 를 사용하기 전에 필요한 라이브러리들을 추가해 주겠습니다.
/build.gradle에서 dependencies {} 부분에 추가하여줍니다.
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-web'
// 추가된 부분
// body의 JSON을 파싱하기 위하여 추가하였습니다. (DB와 관련없는 라이브러리입니다.)
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
gradle을 빌드시켜 spring boot 프로젝트에 적용시켜 주었습니다.

적용 시킨 후 에는 DataBase 설정을 해주어야합니다.
resources/application.properties에 들어가 다음과 같이 추가해줍니다.
spring.datasource.url=jdbc:mariadb://[DB의 IP주소]:[DB의 포트번호]/[데이터 베이스 명]
spring.datasource.username=[DB사용자명]
spring.datasource.password=[DB사용자명의 비밀먼호]
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

spring boot를 실행시켜 적용이 잘되었는지 확인하여줍니다.

2. JPA를 사용하여 mariaDB에 값을 저장해보자
DB에 저장하는 로직을 작성하기 전에 먼저 테이블을 작성해주겠습니다.
maria DB에 test라는 데이터베이스에서 user_data라는 테이블을 만드는 SQL을 작성하였습니다.
create table test.user_data(
id varchar(12) not null primary key,
password varchar(20) not null,
email varchar(20) not null,
name varchar(6) not null
);
테이블에 존재하는 컬럼들을 Entity 클래스를 생성해 주겠습니다.
만약 없는 컬럼을 생성할시 오류가 발생하게 됨으로 제대로 작성해주셔야합니다.
@Entity
@Table(name = "User_data")
public class User {
@Id
@Column(name="id")
private String id;
@Column(name="password")
private String password;
@Column(name="email")
private String email;
@Column(name="name")
private String name;
// Entity는 만들어졌을 때 안에 들어있는 값이 없습니다
// Entity를 호출하여 값을 저장하여 사용할 거기 때문에 따로 메소드를 만들어 사용하려고
// 만들어두었습니다
public void update_user(String id,String password, String email, String name){
this.id = id;
this.password = password;
this.email = email;
this.name = name;
}
}
@Entity는 테이블과 링크된 클래스를 나타냅니다.
@Table(name=””)은 이미 생성된 테이블이나 테이블 명을 지정하여 테이블을 생성하여 테이블 명에서 데이터 값을 다룹니다.
@Id 는 해당 테이블의 primary key 필드를 나타냅니다.
@Column은 테이블의 컬럼을 나타냅니다 사용하지 않아도 @Entity 클래스는 모두 컬럼이 됩니다.
Entity 클래스 생성이 끝났다면 Entity 클래스로 DB에 접근하게 해줄 JpaRepository를 생성합니다.
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User,String> {
}
Repository는 DAO라고 불리는 DB 접근자입니다.
JPA 에서는 Repository라고 부르고 인터페이스로 생성하여 사용합니다.
<Entity 클래스명, Id의 타입>을 인터페이스로 선언하게 되었을 때 Repository를 불러오면 자동으로 CRUD를 사용할 수 있게됩니다.
이제 요청을 보냈을 때 DB에 데이터를 저장하는 간단한 로직을 짜볼겁니다.
package com.example.demo;
import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class demoController {
@Autowired
//CRUD를 사용하기 위해서 interface를 지정해둔 UserRepository를 가져와줍니다.
UserRepository userRepository;
@PostMapping("/user")
//
public String demoController(@RequestBody JSONObject body){
//사용할 Entity를 호출해줍니다.
User user = new User();
// Entity에 JSON 방식으로 받은 값을 파싱하여 Entity에 값을 저장해두었습니다.
// ※ password는 포스트 작성용이라 따로 암호화를 해두지 않았습니다. ※
user.update_user((String) body.get("id"),(String) body.get("password"),(String) body.get("email"),(String) body.get("name"));
//Entity의 값으로 저장하였습니다.
userRepository.save(user);
return "저장 완료!!";
}
}
@RestController로 Restful api 컨트롤러를 지정해주었습니다.
@Autowired은 알아서 의존 Bean에 찾아서 주입시켜줍니다.
@PostMapping() http 메소드 post로 받겠다라고 지정하였습니다.
이제 스프링을 실행 시켜준 후 http post 요청에 body 지정한 body값을 넣고 db에 저장이 되는지 확인해 볼겁니다.

이제 postman으로 api 요청을 해보도록 하겠습니다.
JSON 형식으로 데이터 값을 받도록 설정해 두었기 때문에 JSON 형식으로 값을 보내주었습니다.
JSON 안에 있는 값은 아랫부분의 코드에서 id,password,email,name에 지정하여 각각 값을 담아서 전송해보겠습니다
user.update_user((String) body.get(“id”),(String) body.get(“password”),(String) body.get(“email”),(String) body.get(“name”));


아까 리턴 값의 “저장 완료!!”가 나오게 되고 따로 spring log에 오류가 나오지 않아 성공적으로 DB에 저장된걸 볼 수 있습니다. DB를 확인해 보겠습니다.

user_data의 값을 출력했을 때 성공적으로 저장된 것을 볼 수 있습니다.
아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.
댓글을 달려면 로그인해야 합니다.