dependencies {
implementation("mysql:mysql-connector-java")
}
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url:
username:
password:
url: database connection 되는 url
username: database에서의 유저 이름
password: database username 과 매칭 되는 password
두가지 를 세팅을하고 spring boot 를 실행을 시키면 부팅이 된다.
kotlin class 에서 configuration 을 세팅을 해주기 위해서는 hikari
를 이용해서 config 하려고 한다.
앞서 사용한 yml 파일을 약간 변경을 한다.
기존에는 database에 바로 세팅을 했다면 kotlin class 를 사용을 해서 database 세팅을 위해서는 hikari를 사용을 하려고 한다.
spring:
datasource:
hikari:
jdbc-url:
username:
password:
driver-class-name: com.mysql.cj.jdbc.Driver
기존에 kotlin class를 사용을 하기 위해서는 @Configuration
어노테이션을 이용을 한다.
@ConfigurationProperties
를 사용 해서 yml 에 설정된 값을 가지고 datasource 빈을 만들어서 bean으로 등록을 시킨다
@Configuration
class DBConfiguration {
@Bean("dataSource")
@ConfigurationProperties(prefix = "spring.datasource.hikari")
fun dataSource(): DataSource {
return DataSourceBuilder.create().build()
}
}
위의 세팅이 끝이 나면 spring boot 를 실행을 시키면 성공된 모습이 나온다
jasypt 이란 yml이나 특정한 text를 암복화 를 시켜주는 하나의 라이브러리 이다.
db 설정 정보의 경우 탈취당하면 바로 해킹이 되기 쉽다
그렇기 때문에 db 정보의 경우 당연히 암복호화 해서 올려줘야 된다.
이것은 옵션한 항목이 아닌 당연한 항목이다 github, project나 할때 당연한것이기 때문에 이번 회차에서 간단한 방법을 알려주려고 한다.
일단 build.gradle.kts 파일에 의존성을 주입을 해준다.
dependencies {
implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:1.17")
}
이렇게 주입을 시켜주면 사용이 가능하다.
spring boot 에서 테스트 케이스를 만들 수 있다. 그렇기 때문에 test 패키지 내에서 사용이가능하게 작성을 하였다.
class JasyptTest {
private var jasypt: StandardPBEStringEncryptor? = null
@BeforeEach
fun before() {
jasypt = StandardPBEStringEncryptor()
jasypt!!.setPassword("")
jasypt!!.setAlgorithm("PBEWithMD5AndDES")
}
@Test
@DisplayName("jaspt 암복호화 테스트")
fun decodeTest() {
var array: Array<String> = arrayOf(
"",
"",
""
)
pritText(array, jasypt!!)
}
/**
* Print method </br>
* @param array Array<String>
* @param jasypt StandardPBEStringEncryptor
* @return void
*/
private fun pritText(array: Array<String>, jasypt: StandardPBEStringEncryptor) {
for (encrypt in array) {
val encryptedText = jasypt.encrypt(encrypt)
val decryptText = jasypt.decrypt(encryptedText)
println("encryptedText: $encryptedText")
println("decode text : $decryptText")
}
}
}
위의 코드를 조금 설명을 하자면 전역 변수로 선언된 변수에 @BeforeEach
를 통하여 객체 주입과 password 와 알고리즘을 주입을 해주었다
여기서 password의 경우 개발자가 사용 프로젝트에 관련된 비밀번호를 설정을 해주면 된다.
그리고 decodeTest 메소드에서 array 로 선언된 지역 변수에다가 암호화에 필요한 텍스트를 선언을 해준다.
그리고 난뒤 test 케이스를 실행을 하면 암호화 되는 텍스트가 나온다.
그러고 난뒤에 ENC(value)
이런 포멧으로 yml에 적어준다면 spring boot 실행시 복호화를 자동으로 시켜준다
대신에 jvm option 에 다가 좀 전에 설정을 한 패스워드를 통해서 작성을 해주면 된다.
아래는 jvm option 이다 꼭 넣어 주어야 복호화를 해준다.
yml에다가 직접적으로 사용이 가능하지만 그렇게 되는 경우 문제가 되기 때문에 로컬 ide 에다가 직접적어줘서 사용을 하는게 보안 적으로 안전하다고 생각된다.
-Djasypt.encryptor.password=