프로퍼티(Properties) 파일이란, - KeyWord
설정 정보를 XML로 분리해두면 빈 클래스나 의존관계 정보를 소스코드 수정 없이도 간단히 조작할 수 있다.
XML에는 빈의 정의와 의존관계뿐 아니라 빈이 필요로 하는 각종 설정 정보를 프로퍼티 값으로 지정해줄 수도 있다.
(대표적인 설정 값 : dataSource)
서버환경에 종속적인 정보가 있다면, 이를 애플리케이션의 구성정보에서 분리하기 위해서이다.
환경에 따라 자주 변경될 수 있는 내용은 프로퍼티 파일로 분리하는 것이 가장 깔끔하다.
XML처럼 복잡한 구성이 필요 없고 키와 그에 대응되는 값의 쌍으로 구성하면 충분하기 때문이다.
장점 : @Value를 효과적으로 사용할 수 있다. @Value는 소스코드 안에 포함되는 애노테이션이어서 값을 수정하면 매번 새로 컴파일 해야하는데 @Value에서 프로퍼티 파일의 내용을 참조하게 해주면 소스코드의 수정 없이 @Value를 통해 프로퍼티에 주입되는 값을 변경할 수 있다.
기본적인 방법과 사용할 수 있는 방법 2가지
1. 기본적인 방법 (Properties 파일 생성)
기존)value 애트리뷰트를 이용한 빈 설정정보 지정 방식
<bean id="dataSource"
class = "org.springframework.jdbc.datasource.SimpleDriverDataSource" >
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/testdb" />
<property name="username" value="spring" />
<property name="password" value="boork" />
</bean>
properties파일을 추가한 방식] value 애트리뷰트 안에 직접 선언한 값들을 클래스패스 루트에 database.properties 라는 별도의 프로퍼티 파일을 만들어서 옮긴다.
[database.properties]
db.driverclass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/testdb
db.username=spring
db.password=book
2. 어떻게 사용하는가
1) 수동변환: 프로퍼티 치환자(placeholder)를 이용한 방법
<bean id="dataSource"
class = "org.springframework.jdbc.datasource.SimpleDriverDataSource" >
<property name="driverClass" value="${db.driverclass}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
바꾼 후에
context 네임스페이스의 property-placeholder 태그를 추가하고 앞에서 만든 프로퍼티 파일의 위치를 지정한다.
<context:property-placeholder location="classpath:database.properties"/>
2) 능동변환: SpEL
<util:properties id="dbprops" location="classpath:database.properties" />
<bean id="dataSource"
class = "org.springframework.jdbc.datasource.SimpleDriverDataSource" >
<property name="driverClass" value="${dbprops['db.driverclass']}" />
<property name="url" value="${dbprops['db.url]}"] />
<property name="username" value="${dbprops['db.username]}"] />
<property name="password" value="${dbprops['db.password]}"] />
</bean>
SpEL이 좀 더 능동적으로 정보에 접근하는 방식이기 때문에 오타와 같은 실수가 있을 때 에러 검증이 가능하다는 장점이 있다.
#{}를 사용하는 SpEL도 맵을 이용하기 때문에 키 값을 잘못 적어도 예외가 발생하지 않고 무시될 수 있으니 주의해야 한다.
[출처] - 토비의 스프링 3.1 Vol.2
'Spring' 카테고리의 다른 글
[Spring] VO에서 null 값을 없애고 싶다면? (@JsonInclude) (0) | 2022.07.13 |
---|---|
[Spring] JPA vs MyBatis 정리 (특징, 장점, 단점 등) (0) | 2022.06.24 |
[Spring] enum(이늄) 사용자 레벨 관리 기능 (0) | 2022.06.15 |
[Spring] @Controller, @RestController의 차이 (0) | 2022.06.14 |
[Spring] StringUtils 예제 (0) | 2022.06.08 |