1 분 소요


SpringBoot 의 Configuration

SpringBoot는 여러가지 Configuration을 application.properties에 담아 사용한다.

application.properties를 사용 해도 되지만 application.yml도 지원 하기 때문에, 새로 만들어 Hierarchy를 표현해서 보기 편하도록 작성 하는 방법도 있다.

더불어서, 이 설정파일인 application.yml의 값들을 불러와서 사용 하는 @Value 어노테이션을 간단히 정리 해 보려고 한다.

application.yml 설정하기

이전에 application.yml을 사용 한 글이 있었는데, 그 글과 유사하게 작성 해 보려고 한다.

다만 통상적인 db세팅이나 서버 포트 세팅같은 부분들 외에, 특정 값을 가져오는 것을 한번 만들어 보려고 한다

# application.yml
myspring:
  test:
  name: wool
  age: 20

myspringListTest: banana,orange,apple

기본적인 세팅 외에, myspring이라는 이름 아래에 test.name, test.age 등을 만들어 놓았다.

접근 할 때에는 그냥 . 을 뒤에 붙여서 하위 요소들로 접근 해 주면 된다.

Test Code 작성

해당하는 값들을 불러 올 수 있는 코드를 만들고 테스트 해 보자.

테스트를 위해 ConfigurationAnnotationTests 클래스를 만들고, 간단한 테스트를 작성 해 보려고 한다

테스트코드를 작성 할 ConfigurationAnnotationTests 클래스를 준비한다

ConfigurationAnnotationTest.java

package com.wool.springconf;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
public class ConfigurationAnnotationTests{

    // 코드를 작성 할 부분

}

코드들을 하나씩 작성 해 보자. 위의 application.yml 파일에 작성 된 설정값들을 가져 와 보자

// 위 내용 생략
@Value("${myspring.test.name}")
private String mySpringTestName; // a

@Value("${myspring.test.age}")
private int mySpringTestAge; // b

@Value("${myspringListTest}")
private String[] mySpringArray; // c

@Value("$#{'${myspringListTest}'.split(',')}")
private List<String> mySpringList;

@Value 어노테이션은 configuration 값에 접근 할 수 있게 해 준다

  • a) "${myspring.test.name}" 는 myspring 하위의 test에 접근 한 후, 그 아래에 있는 name에 접근한다는 내용이다. 해당하는 값이 @Value 어노테이션 안에 넣어져 있고, 대응되는 mySpringTestName에 application.yml에서 작성한 wool이 저장된다
  • b) "${myspring.test.age}" 도 마찬가지로, myspring하위의 test에 있는 age값에 접근한다는 명시이고, 해당 값을 mySpringTestAge에 저장한다
  • c,d) myspringListTest 값은, application.yml값을 보면 다른 값과 조금 다르게 myspringListTest: banana,orange,apple 이렇게 값이 묶여있다. 두가지 방법으로 받아 줄 수 있다 – c) String[] mySpringArray 처럼, 리스트에 대입해서, 리스트 내부에 값을 저장해서 하나씩 값을 확인 해 줄 수 있다– d) List<String> mySpringList도 동일하게 받아 줄 수 있다

전체 TestCode

    package com.wool.springconf;

    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;

    import java.util.List;

    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class ConfigurationAnnotationTests{

    	@Value("${myspring.test.name}")
    	private String mySpringTestName; // a

    	@Value("${myspring.test.age}")
    	private int mySpringTestAge; // b

    	@Value("${myspringListTest}")
    	private String[] mySpringArray; // c

    	@Value("$#{'${myspringListTest}'.split(',')}")
    	private List<String> mySpringList;

    	@Test
    	public void valueAnnotationTest(){

    		Assert.assertEquals(mySpringTestName, "wool");
    		Assert.assertEquals(mySpringTestAge, 20);

    		Assert.assertEquals(mySpringArray[0], "banana");
    		Assert.assertEquals(mySpringArray[1], "orange");
    		Assert.assertEquals(mySpringArray[2], "apple");

    		Assert.assertEquals(mySpringList.get(0), "banana");
    		Assert.assertEquals(mySpringList.get(1), "orange");
    		Assert.assertEquals(mySpringList.get(2), "apple");
    	}

    }

위의 테스트코드를 실행하면, 우리가 작성한 application.yml 의 값들을 가져와서 기대하는 값과 비교하여 서로 맞는지 확인한다.

값을 잘 가져왔다면 테스트가 성공하는 것을 볼 수 있다

댓글남기기