솔솔

[Spring] @Value 어노테이션과 Properties 클래스 본문

나의보물들/Spring

[Spring] @Value 어노테이션과 Properties 클래스

솔솔하네 2024. 7. 26. 08:52
반응형

🍀 @value란?


스프링 프레임워크에서 사용되며 외부 프로퍼티 파일이나 시스템 환경 변수에서 값을 읽어와서 스프링 애플리케이션의 구성 요소에 주입하는 데 사용됨.

 

✅ 사용방법

 1. 기본 값 주입

@Value("coffee")
private String coffee;

 

 2. 프로퍼티 파일로부터 값 주입

@Value("${property.key}")
private String propertyValue;

 

3. 프로퍼티 파일로부터 값 주입 ( 리스트나 배열 )

@Value("${some.list.of.values}")
private List<String> values;

 

프로퍼티 파일이란 ?!

 - 키-값 쌍으로 구성된 설정 파일로 주로 애플리케이션의 설정값을 외부에서 관리하기 위해 사용됨.

 - 스프링 프레임워크와 같은 다양한 자바 프레임워크에서 사용되고 '.properties' 확장자 임.

 

🍀  @value가 아닌  수동으로 프로퍼티 파일을 로드하고 값을 읽어들이는 방법


스프링 프레임워크의 @Value 애너테이션은 프로퍼티 파일을 자동으로 로드하고 주입하는 과정을 자동화 되어있지만 

만약 @Value 애너테이션을 사용할 수 없는 상황이라면 어떻게 하면좋을까요?

 

  Properties 클래스를 사용하는 방법

 1. '.properties' 확장자 명을 가진 파일 생성

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.id=root
jdbc.pw=password

 

2. 자바 코드 작성

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class PropertyLoader {
    public static void main(String[] args) {
        // Properties 객체 생성
        Properties p = new Properties();
        try {
            // 프로퍼티 파일 로드
            p.load(new FileInputStream("db.properties"));
            // 프로퍼티 값 읽기
            String driver = p.getProperty("jdbc.driver")
            String url = p.getProperty("jdbc.url");
            String id = p.getProperty("jdbc.id");
            String pw = p.getProperty("jdbc.pw");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

두 방법 비교


특성 Properties 클래스 @Value 어노테이션
설정 파일 로드 수동 자동
코드 간결성 코드가 길어질 수 있음 코드가 간결해짐
의존성 스프링 없이 사용 가능 스프링 컨텍스트 필요

 

 

💭 마이 띵킹 💭

지금까지 자바 공부를 하면서 스프링부트를 사용하고 인텔리제이를 사용하면서 많은 것들이 자동화 되어있기 때문에 프로퍼티 읽어들이는 것도 @value를 사용해서 편하게만 코드를 작성을 했었다. 코어에 대해서는 왜 어떤 원리도 작동되는지 생각해본적은 없었다.  이번 계기로 프로퍼티 클래스를 생성해서 로드하는 방법을 알고나니 100프로 똑같이 동작 하는건 아니지만 스프링에서도 @value가 어떻게 동작할 수 있었는지 머리속에 어느 정도 그려질 수 있어서 좋았던 공부였다.