솔솔
[Spring] @Value 어노테이션과 Properties 클래스 본문
반응형
🍀 @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가 어떻게 동작할 수 있었는지 머리속에 어느 정도 그려질 수 있어서 좋았던 공부였다.
'나의보물들 > Spring' 카테고리의 다른 글
[Spring Boot] Spring Boot + JSP (0) | 2022.11.18 |
---|---|
[Spring] 이클립스에서 SQL 실행시 콘솔창에러 (0) | 2022.02.04 |