이번 글이 다른 database를 연결하는 방식을 익히게 될 거 같아 후에 프로젝트를 서례하고 시작하는데 아주 기초가 될 거 같아 집중해서 알아보려했다.
https://spring.io/guides/gs/accessing-data-mysql/
Spring Boot를 사용하여 프로젝트를 시작하면 자동적으로 H2 database를 연결해주는데, 이를 Mysql(혹은 다른 database로도 비슷하다)로 바꿔 연결하는 법을 익힌다.
이 부분은 반복적으로 많이 진행했기에 코드만 남기고 넘어간다.
## 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을 설치하는게 먼저이다. 설치의 경우 구글에 많은 가이드가 있으니 따라하기를 바란다. 설치가 완료되면 시스템 환경변수(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"이 될 수 있다고 한다.
따라서 처음으로 project를 run 할 때는 최소 database를 생성시켜야 하니 "update" or "create"를 해야 한다. 그 이후 부터는 "update" or "none"으로 바꿔서 이용하면 되고, database 구조 자체를 수정해야 할 때 "update"를 사용하면 된다.
추가적으로 production에 들어갈 경우 spring user의 권한을 상황에 맞춰 수정하는 것이 좋을 수 있다고 한다.
이 파트를 통해 실제로 database에 table 및 row를 생성하고 확인해 볼 수 있다. 가이드에 나와있는 그대로 따라하면 되므로 직접 해보는 것을 추천한다.
DB 연결을 application.properties에서 해야한다는 것을 잊지 말고, 그것과는 별개로 따로 셋팅을 거의 하지 않아도 된다는 점은(물론 복잡해질 경우 아닐 수 있겠지만) 매우 좋은 것 같다는 생각이 들었다.
코드는 여기서 확인해 볼 수 있다.