[SpringBoot 3] MySql 연동하기

[개발환경]
M2 OSX Ventura 13.0.1
VS Code
SpringBoot 3.0.2
Java 11
Gradle 

1. MySQL DB Docker image 내려받기

docker pull mysql

docker run --name mysqldb -e MYSQL_ROOT_PASSWORD=Password -e MYSQL_DATABASE=mydb -d -p 3306:3306 mysql:latest

docker container ls 명령으로 실행중인 컨테이너 확인할 수 있다.

2. [SpringBoot3] 의존성 추가

build.gradle 파일에 mysql 연결을 위한 의존성을 추가한다. JSP으로 작업할 때에는 직접 드라이버를 찾아서 설치해줘야 했는데 한 줄 추가만 하면 된다.

implementation 'mysql:mysql-connector-java:8.0.32'

3. 접속정보 추가

application.properties 파일에 연결할 DB의 접속정보를 추가한다. Docker에서 생성할 때와 동일한 접속정보를 사용한다.

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=Password

spring.jpa.hibernate.ddl-auto=update

4. Controller 작성

일반적인 User 테이블을 만든다. 먼저 "UserRepository.java"에 저장소를 생성해준다.

package com.gomguk.example;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User,Integer> {
    
}

다음으로 DB스키마를 지정해준다.[User.java]

package com.gomguk.example;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @Id
    @GeneratedValue
    private int id;

    private String Name;
    private String Email;
    private String Password;
}

 

5. MySQL 접속 확인

db 접속 도구인 "Table Plus"를 이용하여 접속정보를 넣고 mysql이 제대로 올라왔는지 확인한다.

스키마만 생성했고, 데이터를 다루지 않아 빈 테이블을 확인할 수 있다.

Table Plus

6. CRUD 확인

CRUD(Create, Read, Update, Delete) API를 작성하여 Spring과 MySQL연동이 잘 되었는지 확인한다.[UserController.java]

package com.gomguk.example;

import java.util.List;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestBody;

@RestController
@RequestMapping("/api")
@CrossOrigin
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/")
    public List<User> GetUsers(){
        return userRepository.findAll();
    }

    @GetMapping("/{id}")
    public User GetUser(@PathVariable Integer id){
        return userRepository.findById(id).orElse(null);
    }

    @PostMapping("/")
    public User PostUser(@RequestBody User user){
        return userRepository.save(user);
    }
    @PutMapping("/")
    public User PutUser(@RequestBody User user){
        User oldUser = userRepository.findById(user.getId()).orElse(null);
        oldUser.setName(user.getName());
        oldUser.setEmail(user.getEmail());
        oldUser.setPassword(user.getPassword());
        return userRepository.save(oldUser);
    }

    @DeleteMapping("/{id}")
    public Integer DeleteUser(@PathVariable Integer id){
        userRepository.deleteById(id);
        return id;
    }
}

프로젝트의 전체 구조는 다음과 같다.

작성 후 Swagger를 통해 확인하면, 전체 목록을 가져오는 GetUsers()메소드가 에러 없이 잘 동작하는 것을 확인할 수 있다.

Swagger의 설정 방법은 2023.02.15 - [DEV/SpringBoot] - [SpringBoot3] Springboot 3.X에 Swagger 적용하기 에서 다루었다.

새로운 User의 생성도 잘 된다.

7. Trouble Shooting

순서대로 했음에도 잘 되지 않는다면, Gradle 캐시 초기화, SpringBoot 재기동, DB 연결정보 확인 등을 해볼 수 있다.

반응형