‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/ºSpring

[Spring] application.yml ์„ค์ •ํŒŒ์ผ

Trudy | ์†ก์—ฐ 2023. 12. 28. 14:17

Git์—๋Š” ์„ค์ • ํŒŒ์ผ์ธ ymlํŒŒ์ผ์„ ์˜ฌ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š” ๋ฐ, ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

๋ฏผ๊ฐํ•œ ์ •๋ณด๋งŒ ๋นผ๊ณ  ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ฐ€๋ ค์ง„ ์ฑ„๋กœ ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

๋˜, ์—ฌ๋Ÿฌ ๊ฐœ์˜ Appllication์œผ๋กœ ์šด์˜ ์ƒํ™ฉ์— ๋งž๋Š” yml์„ ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์•„๋ž˜์— deafult์ธ application.yml์„ ํฌํ•จํ•˜์—ฌ local ํ™˜๊ฒฝ, dev ํ™˜๊ฒฝ, prod ํ™˜๊ฒฝ์— ๋งž๋Š” yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค. 

 

์šด์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋งž๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Run/Debug ์˜ Edit Configuration์— ๋“ค์–ด๊ฐ€์„œ ์•Œ๋งž๊ฒŒ Application์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

--spring.profiles.active=local ์€ application-local.yml์˜ ์„ค์ • ํŒŒ์ผ๋กœ ์‹คํ–‰์‹œํ‚ด์„ ์˜๋ฏธํ•œ๋‹ค. 

 

๋˜, Environment variables๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (์—†์œผ๋ฉด Modify options ๋“ค์–ด๊ฐ€๋ฉด ์žˆ์Œ. ๋ฐ‘์— ์‚ฌ์ง„๊ณผ ํ•จ๊ป˜ ๋” ์„ค๋ช…๋˜์–ด ์žˆ์Œ)

application-local.yml์— my.var์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐ, ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ฌ๋ฆฌ๋ฉด ๋ฏผ๊ฐํ•œ ์ •๋ณด์—ฌ๋„ ๊ฐ€๋ ค์„œ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

์‹ค์ œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋“ฑ๋กํ•œ local์ด my.var์— ์ €์žฅ๋˜์–ด ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. 

 

 

ApiController.java

package com.example.demo.controller;

import lombok.RequiredArgsConstructor;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;



@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class ApiController {
    private final Logger log = LoggerFactory.getLogger(ApiController.class);

    //Value ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์„ค์ •ํŒŒ์ผ(application.yml)์—์„œ ๊ฐ’ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Œ
    @Value("${my.var}")
    private String var;

    @RequestMapping(method = RequestMethod.GET,value = "/app")
    public ResponseEntity req(){
        log.info("my var is {}", var);
        return ResponseEntity.ok().body("ok");
    }
}

 

 

application-local.yml ๊ณผ application-dev.yml์„ ์ ์šฉ์‹œ์ผœ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ด๋‹ค. 

ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๊ฐ์ž ์„ค์ •๋œ local๊ณผ dev๊ฐ€ ์ €์žฅ๋˜์–ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 


 

์ด์ œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—๋‹ค ์ ์šฉํ•ด๋ณด์ž

application.yml

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

  datasource:
    url: jdbc:mysql://${DB_IP}/${DB_NAME}
    username: ${DB_USERNAME}
    password: ${DB_PW}
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
      properties:
        hibernate:
          format_sql: true
        show-sql: true

logging:
  level:
    org.springframework.security: DEBUG

database์˜ IP, DB์ด๋ฆ„๊ณผ DB username, password๋ฅผ ๋ชจ๋‘ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค. 

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์€ ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์นธ์ด ๋œจ์ง€ ์•Š๋Š”๋‹ค๋ฉด Modify options > Environment variables ๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค. 

 

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ; (์„ธ๋ฏธ์ฝœ๋ก )์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. 

๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ข€ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.