Spring/Spring boot

mariadb로 데이터 액세스

원2 2022. 8. 16. 18:24
728x90
반응형

Mariadb 데이터베이스를 만들고 Spring boot 애플리케이션 구축해서 자동으로 컬럼을 생성하고

해당 db와 연동을 해보자

 

종속성

Spring Web

Spring Data JPA

Mariadb dirver

 

application.properties

spring.jpa.hibernate.ddl-auto=create
// create로 설정한 이유 : 데이터베이스 구조가 없음 텅빈 깡통이여서
spring.datasource.url=jdbc:mariadb://localhost:3306/[db이름]?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=[스키마이름]
spring.datasource.password=[비밀번호]
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

 

Entity Model 생성

package com.example.accessingdatamariadb;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;
    private String email;

}

 

 

d이렇게만 해줘도 엔티티를 자동으로 테이블로 변환해줌

 

Repository 생성

package com.example.accessingdatamariadb;

import org.springframework.data.repository.CrudRepository;

// 이 기능은 Spring 에 의해서 userRepository 라는 Bean 으로 자동 구현
public interface UserRepository extends CrudRepository<User, Integer> {
}

 

Controller 생성

package com.example.accessingdatamariadb;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping(path = "/demo")
public class MainController {
    @Autowired
    private UserRepository userRepository;

    @PostMapping(path = "/add")
    public @ResponseBody String addNewUser (@RequestParam String name, @RequestParam String email) {
        User n = new User();
        n.setName(name);
        n.setEmail(email);
        userRepository.save(n);

        return "Saved";
    }

    @GetMapping(path = "/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        return userRepository.findAll();
    }
}

 

 

Application 생성

package com.example.accessingdatamariadb;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AccessingDataMariadbApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccessingDataMariadbApplication.class, args);
    }
}

 

여기까지 왔으면 실행을 해보자

짜잔 객체에 맞게 테이블이 자동 생성된다

 

현재상태에서 localhost:8080/demo/all 가보자

전체 데이터를 가져왔는데 아무것도 없다 왜냐 아무것도 없으니까

 

curl 로 데이터를 추가해보자

curl localhost:8080/demo/add -d name=first -d email=test@test.com

Saved 가 뜨면 정상이다.

왜냐 /add 컨트롤러에 리턴값을 Saved 라고 설정해둬서

짠 이렇게 데이터가 생성

다시 전체 목록을 조회해보면?

짠ㅋ

하지만 이렇게만 해두면 보안에 문제가 생긴다

내가 열심히 만든 사이트에 누가 DROP TABLE 을 한다면...

그래서 보안 관행으로 프로그램을 사용자에게 노출하기 전에 데이터베이스를 약간 변경해보자

 

아래의 명령은 Spring 과 연결된 사용자의 모든 권한을 취소 > 아무것도 못함;;;

revoke all on [db이름].* from '스키마이름'@'%';

어느정도 권한이 있어야 하므로

grant select, insert, delete, update on [db이름].* to '스키마이름'@'%';

이렇게 하면 최소한의 필요한 권한은 가지게 된다

 

변경을 하게 될 경우에

spring.jpa.hibernate.ddl-auto 를 update 로 바꿔주자 아까 create 로 설정해준 것

그후 프로그램 다시 시작 끝

728x90
반응형

'Spring > Spring boot' 카테고리의 다른 글

시간 측정하는 간단한 aop  (0) 2022.12.22
JPA 로 데이터 액세스  (0) 2022.08.17
Restful 웹 서비스 구축  (0) 2022.08.16
스프링부트 개념정리 2  (0) 2022.07.27
스프링부트 개념정리  (0) 2022.07.26