mySQL, Spring boot JPA 초기 설정

Cori1304·2025년 5월 7일
0

JAVA Spring 이론

목록 보기
4/8

사용하는 버전

  • mysql Ver 9.3.0 for macos13.7 on arm64 (Homebrew)
  • id 'org.springframework.boot' version '3.4.5'
  • id 'io.spring.dependency-management' version '1.1.7'
  • openjdk version "17.0.14" 2025-01-21

DB 설정

1. mysql로 접근

mysql -u root -p

2. DB & 유저 생성

sql에 집인 후 아래 명령어를 차례대로 수행

// DB 생성
create database jpa character set utf8mb4 collate utf8mb4_general_ci;

// 유저 생성
CREATE USER 'jpauser'@'localhost' IDENTIFIED BY '1234';

// 유저에게 특정 DB 관한 주기
GRANT ALL PRIVILEGES ON jpa.* TO 'jpauser'@'localhost';
FLUSH PRIVILEGES;


// template -------------------------------------------------------
create database {DB 이름} character set utf8mb4 collate utf8mb4_general_ci;

CREATE USER '{유저 이름}'@'localhost' IDENTIFIED BY '{비밀번호}';

GRANT ALL PRIVILEGES ON {DB 이름}.* TO '{유저이름}'@'localhost';
FLUSH PRIVILEGES;

3.루트 계정 종료

root로 들어온 sql을 종료 (mac은 'ctrl+z'면 종료 가능 )

mysql -u jpauser -D jpa -p

// template ----------------------------------------
mysql -u {user 이름} -D {DB 이름} -p

4. jpauser로 접속

jpauser로 접속해서 USER 테이블 생성 후 확인


CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

SHOW TABLES;

5. 실행 결과

spring 설정

application.properties

spring.application.name=JPA-test

server.servlet.encoding.force-response=true
spring.config.import=optional:file:.env.dev[.properties]


# 데이터베이스 연결 설정
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER_NAME}
spring.datasource.password=${DB_USER_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver


# JPA (Hibernate) 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    runtimeOnly 'com.mysql:mysql-connector-j'

    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    annotationProcessor 'org.projectlombok:lombok'
    compileOnly 'org.projectlombok:lombok'

    testAnnotationProcessor 'org.projectlombok:lombok' // 테스트를 위한 세팅
    testImplementation 'org.projectlombok:lombok' // 테스트를 위한 세팅
}

JAVA 코드

entity/Product

package com.ohgiraffers.jpayouthdepartmentregister.entity;


import jakarta.persistence.*;
import lombok.*;


@Getter //lombok getter
@Setter //lombok setter
@Entity
@NoArgsConstructor
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String name;

    @Column
    private String description;


}

repository/ProductJpaRepository

package com.ohgiraffers.jpayouthdepartmentregister.repository;

import com.ohgiraffers.jpayouthdepartmentregister.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductJpaRepository extends JpaRepository<Product, Long> {

}

controller/ProductController

package com.ohgiraffers.jpayouthdepartmentregister.controller;

import com.ohgiraffers.jpayouthdepartmentregister.entity.Product;
import com.ohgiraffers.jpayouthdepartmentregister.repository.ProductJpaRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@Controller
@RequiredArgsConstructor
public class ProductController {

    private final ProductJpaRepository productRepository;
    @PostMapping("/product/save")
    public ResponseEntity<?> personSave(@RequestBody Product product) {
       Product res =  productRepository.save(product);
       try {
           return ResponseEntity.ok().body(res);
       }catch (Exception e) {
           return ResponseEntity.internalServerError().body("Failed to get all member data: " + e.getMessage());

       }

    }

}

동작 확인

1. 인텔리제이에서 아래와 같이 폴더와 파일 생성

사진과 같이 src/와 동일한 경로에 http/에 파일을 만들면 됩니다. 만약 http/가 없다면 만들어서 사용하고 굳이 product.http 이름은 동일할 필요가 없습니다.

2. 코드 생성


### post 테스트
POST localhost:8080/product/save
Content-Type: application/json
Accept: */*

{
  "name": "product1",
  "description": "nice "
}

3. 실행

3-1) spring boot 누르고 사진에 있는 화살표 클릭
3-2) mySQL 터미널에 SELECT * FROM jpa.product; 실행
3-3) 결과 확인

참고 자료

profile
개발 공부 기록

0개의 댓글