๐ก Ktor์์ HoconApplicationConfig๋ก YAML ์ค์ ์ด ์๋ ๋ ํด๊ฒฐ๋ฒ (.conf ๋์ ) (์ฝ์ง๊ธฐ๋ก)
๐ก Ktor์์ HoconApplicationConfig๋ก YAML ์ค์ ์ด ์๋ ๋ ํด๊ฒฐ๋ฒ (.conf ๋์ )
๐งฉ ๋ฐ์ ์ํฉ
Ktor ํ๋ก์ ํธ์์ ์ค์  ์ ๋ณด๋ฅผ application.yaml์ ์์ฑํ๊ณ  ์๋์ฒ๋ผ ๋ถ๋ฌ์ค๋ ค ํ์ต๋๋ค.
val config = HoconApplicationConfig(ConfigFactory.load("application.yaml"))
ํ์ง๋ง ํ ์คํธ ํ๊ฒฝ์ด๋ ์ปค์คํ  ๋ฐํ์ ํ๊ฒฝ์์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค:
Unresolved substitution
Unresolved reference
Missing configuration for 'jwt.issuer'
๐ ์์ธ ๋ถ์
ConfigFactory.load("application.yaml")
- โ application.yaml์ ๊ธฐ๋ณธ ์ง์ํ์ง ์์
- โ
 ConfigFactory๋.conf,.json,.properties,.env๋ฑ๋ง ์ง์  ํ์ฑ ๊ฐ๋ฅ
- .yaml์ Typesafe Config ๋ผ์ด๋ธ๋ฌ๋ฆฌ(HOCON)์์ ์ง์  ํ์ฑํ์ง ์์
- ๋ณ๋์ YAML ํ์๋ฅผ ๋ถ์ด์ง ์๋ ์ด์, YAML์ ์ฝํ์ง ์์
๐ง ํด๊ฒฐ ๋ฐฉ๋ฒ: .yaml โ .conf ์ ํ
๐ ๊ธฐ์กด .yaml ์ค์  ์์
# application.yaml
jwt:
  secret: "secret-key"
  issuer: "issuer-value"
โ
 ๋ณํ๋ .conf ์ค์ 
# application-test.conf
jwt {
  secret = "secret-key"
  issuer = "issuer-value"
}
๐ก ๋ณ๊ฒฝ ํ ์ฝ๋
val config = HoconApplicationConfig(ConfigFactory.load("application-test.conf"))
โ
 .conf๋ HOCON ํฌ๋งท์ผ๋ก, .yaml๋ณด๋ค ๋ ์ ์ฐํ๊ณ  include, reference ๋ฑ๋ ์ง์ํฉ๋๋ค.
๐งช ํ ์คํธ ํ๊ฒฝ์์์ ํ์ฉ ์์
class AuthServiceTest {
    private val config = HoconApplicationConfig(ConfigFactory.load("application-test.conf"))
    private val database = DatabaseFactory.init(config)
    private val jwtConfig = JwtConfig.init(config) // custom config
    private val authService = AuthService(repository, jwtConfig)
    // ...ํ
์คํธ ์ฝ๋ ์์ฑ
}
โ ํ
- ํ
์คํธ์ฉ .confํ์ผ์ ๋ถ๋ฆฌํ์ฌ ํ๊ฒฝ์ ๋ง๋ ์ค์ ๋ง ๋ฐ๋ก ๊ด๋ฆฌํ ์ ์์
- ์ฌ๋ฌ ํ๊ฒฝ๋ณ ์ค์ ์ include๋ก ๋๋ ๋ ๊ฐ๋ฅ
๐ง ์ ๋ฆฌ
| ํญ๋ชฉ | ๋ด์ฉ | 
|---|---|
| ๋ฌธ์  | application.yaml์HoconApplicationConfig๋ก ๋ก๋ํ๋ ค ํ์ง๋ง ์คํจ | 
| ์์ธ | Typesafe Config๋ .yamlํฌ๋งท์ ๊ธฐ๋ณธ ์ง์ํ์ง ์์ | 
| ํด๊ฒฐ์ฑ | .yamlโ.conf๋ณํ ํConfigFactory.load()๋ก ๋ถ๋ฌ์ค๊ธฐ | 
| ์ฅ์  | .conf(HOCON)์ ์ ์ฐํ๋ฉฐ, include ๋ฐ ๋ณ์ ์นํ ๊ธฐ๋ฅ๋ ์ ๊ณต | 
โ ๊ฒฐ๋ก
- Spring๊ณผ ๋ค๋ฅด๊ฒ Ktor๋ ์ค์  ๋ก๋ฉ ์ .yaml์ง์์ด ์ ํ์ ์ ๋๋ค.
- Kotlin/Ktor ํ๊ฒฝ์์๋ ๊ฐ๋ฅํ๋ฉด .confํฌ๋งท์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์์ ์ ์ด๊ณ ์ ์ฐํฉ๋๋ค.
- .conf๋ ๋ฌธ๋ฒ๋ ์ง๊ด์ ์ด๋ฉฐ- include,- fallback,- substitution๋ฑ์ ์ง์ํด ํ๊ฒฝ ๊ตฌ์ฑ์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค.
๐ Ktor ํ
์คํธ์์ ์ค์ ์ด ์ ๋๋ก ์ ์ฝํ๋ค๋ฉด, YAML์ด ์๋ .conf ํ์ผ์ ์ฐ๋ ์ต๊ด์ ๋ค์ด์! ๐ช
๋๊ธ๋จ๊ธฐ๊ธฐ