[개발환경]
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으로 작업할 때에는 직접 드라이버를 찾아서 설치해줘야 했는데 한 줄 추가만 하면 된다.
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이 제대로 올라왔는지 확인한다.
스키마만 생성했고, 데이터를 다루지 않아 빈 테이블을 확인할 수 있다.
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 연결정보 확인 등을 해볼 수 있다.
'DEV > SpringBoot' 카테고리의 다른 글
[SpringBoot3] 로그인 페이지 실습 2(JWT) (0) | 2023.03.09 |
---|---|
[SpringBoot3] 로그인 페이지 실습 1 (0) | 2023.03.08 |
[SpringBoot3] Gradle 빌드 오류(Could not build action using Gradle distribution) (3) | 2023.03.01 |
[SpringBoot3] Springboot 3.X에 Swagger 적용하기 (0) | 2023.02.15 |