(7) Spring Official Guide - Accessing data with Mysql

HEYDAY7·2022년 10월 28일
0

Learn Kotlin + Spring

목록 보기
8/25
post-custom-banner

시작하며

이번 글이 다른 database를 연결하는 방식을 익히게 될 거 같아 후에 프로젝트를 서례하고 시작하는데 아주 기초가 될 거 같아 집중해서 알아보려했다.

Accessing data with Mysql

https://spring.io/guides/gs/accessing-data-mysql/

한줄 요약

Spring Boot를 사용하여 프로젝트를 시작하면 자동적으로 H2 database를 연결해주는데, 이를 Mysql(혹은 다른 database로도 비슷하다)로 바꿔 연결하는 법을 익힌다.

Entity, Repository, Controller

이 부분은 반복적으로 많이 진행했기에 코드만 남기고 넘어간다.

## Entity.kt
@Entity
data class User(
    val name: String,
    val email: String,
    @Id @GeneratedValue
    val id: Int? = null
)

## Repositories.kt
interface UserRepository: CrudRepository<User, Int>

## MainController.kt
@RestController
@RequestMapping("/demo")
class MainController(
        @Autowired private val userRepository: UserRepository
) {
    @PostMapping("/add")
    fun addNewUser(
            @RequestParam name: String,
            @RequestParam email: String
    ): String {
        val n = User(
                name = name,
                email = email
        )
        userRepository.save(n)
        return "Saved"
    }

    @GetMapping("/all")
    fun getAllUsers(): Iterable<User> {
        return userRepository.findAll()
    }
}

MySQL setting 하기

우선 MySQL을 설치하는게 먼저이다. 설치의 경우 구글에 많은 가이드가 있으니 따라하기를 바란다. 설치가 완료되면 시스템 환경변수(Path)에 MySQL bin 폴더 경로를 추가해주자. 이를 통해 터미널에서 mysql command 들을 쓸 수 있게 된다. 나는 MySQL을 설치하며 root 사용자에 비밀번호만 지정했고, 이 경우는 다음과 같이 database를 생성하면 된다.

// 터미널에서 아래 코드를 먼저 친다.
mysql -u root -p
// 그 후 비밀번호 입력 창이 나오고 비밀번호를 치면 mysql prompt(mysql> ~)로 접속 가능하다. 그 후 아래 코드를 입력해주자

// db_example이라는 DB 생성
mysql> create database db_example; 
// 아이다가 'springuser' 비밀번호가 'ThePassword'인 User를 생성한다. 
// 여기서 '%'의 의미는 외부에서의 접근을 허용한다는 것이다.
mysql> create user 'springuser'@'%' identified by 'ThePassword';

// db_example에 대해서 'springuser'에게 모든 권한을 부여한다!
mysql> grant all on db_example.* to 'springuser'@'%'; 

이후엔 프로젝트 코드로 돌아와 application.properties를 아래와 같이 작성해줘야 한다.

여기서 핵심은 MySQL 뿐만 아닌 다른 database를 연결할 것이라도 application.properties에 connection attributes들을 작성해줘야 한다.

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.jpa.show-sql: true

2~4번째 줄은 직관적으로는 이러하다.

  • 2번째 줄 : datasource의 주소를 적는다.
  • 3번째 줄 : datasource에 접근할 때 사용할 username
  • 4번째 줄 : datasource에 접근할 때 사용할 user password

주의깊게 봐야하는 곳은 첫번째 이다. 해당 property의 옵션으로는 "none", "update", "create", "create-drop"이 될 수 있다고 한다.

  • none : MySQL의 기본값. DB에 아무 영향이 없다.
  • update : database 구조 수정이 가능하다.
  • create : database를 생성하고 제거하지 않는다.
  • craete-drop : database를 생성하나 SessionFactory가 닫히면 제거한다.

따라서 처음으로 project를 run 할 때는 최소 database를 생성시켜야 하니 "update" or "create"를 해야 한다. 그 이후 부터는 "update" or "none"으로 바꿔서 이용하면 되고, database 구조 자체를 수정해야 할 때 "update"를 사용하면 된다.

추가적으로 production에 들어갈 경우 spring user의 권한을 상황에 맞춰 수정하는 것이 좋을 수 있다고 한다.

Test the Application

이 파트를 통해 실제로 database에 table 및 row를 생성하고 확인해 볼 수 있다. 가이드에 나와있는 그대로 따라하면 되므로 직접 해보는 것을 추천한다.

마치며

DB 연결을 application.properties에서 해야한다는 것을 잊지 말고, 그것과는 별개로 따로 셋팅을 거의 하지 않아도 된다는 점은(물론 복잡해질 경우 아닐 수 있겠지만) 매우 좋은 것 같다는 생각이 들었다.
코드는 여기서 확인해 볼 수 있다.

profile
(전) Junior Android Developer (현) Backend 이직 준비생
post-custom-banner

0개의 댓글