본문 바로가기
Web Development/Spring Legacy

[Spring / API] Spring Legacy 환경에서 API KEY 관리하기(feat.properties 파일 여러 개 관리)

by 감자맹고우 2022. 11. 30.
728x90
반응형

프로젝트를 하면서 팀원들이 각각 개발을 진행하다보니,

동일한 API의 키를 각자 신청해서 사용하고 있는 것을 알게 되었다.

이를 통합적으로 관리할 필요성을 느꼈고, 어떻게 관리하는 게 좋을지 고민했다.

일단 현재 상태에서 중요성은 낮은 편이라 깊게 고민하진 않았고,

그저 스쳐가는 생각으로, class로 처리할지, property 파일로 처리할지.

이 2가지 만을 놓고 고민했다.

 

둘 다 장단이 있겠지만, 결론만 말하자면 property 파일로 처리하는 방법을 선택했다.

그 이유는 다음과 같다.

 

1. 형상 관리를 할 때 키 정보를 제외하고 싶은 경우, property 파일만 ignore하면 되도록 설정하면 좋을 것 같았다.
2.
싱글톤 패턴 등으로 디자인한다고 해도 여기저기서 class를 호출해서 쓰는 것보다는,
Spring의 도움을 받아서 @Value 어노테이션으로 처리하는 것이 가독성이나 효율성에서 보다 나을 것이라 생각되었다.
3.
jdbc 정보를 이미 property 파일로 관리하고 있으니, 통일성 측면에서도 좋을 것이라 판단되었다.

 

그래서 프로젝트에 적용하면서,

이 참에 Spring Legacy 환경에서 property 파일들을 관리하는 방법을 정리하려고 한다.

트렌드에 따라 Spring Boot 자료는 많은데, Legacy 환경에서의 자료는 부족해보였기 때문이다.

 

 

[ 적용 방법 ]

 

1. properties 파일 생성

 

<!-- key.properties -->
<!-- abcdefg1234567890 자리에 발급받은 API 키값을 입력해주면 된다 -->
key.NAVER=abcdefg1234567890
key.KAKAO=0987654321abcdefg

 

일단 첫 번째 단계로는, 당연히 properties 파일을 만들어주는 것부터 시작한다.

기존 jdbc정보를 담은 properties 파일처럼, 프로젝트 내 src/main/resources 폴더에 properties 파일을 생성해주면 된다. properties 폴더가 따로 있다면 해당 폴더 내에 똑같이 생성해주고 root-context나 servlet-context에서 매핑만 잘 시켜주면 될 것이다.

관련해서 자세한 내용은 글 가장 아래 표기해 둔 참조 사이트 내용을 참고 부탁드린다.

 

 

2. root-context.xml 과 servlet-context.xml에서 PropertyPlaceholderConfigurer 빈 등록

 

프로퍼티 파일을 생성했다면, 프로퍼티 파일 정보를 스프링에서 사용할 수 있도록 해주는 PropertyPlaceholderConfigurer 클래스를 빈으로 등록해야하는데 root-context와 servlet-context에 각각 아래의 코드를 추가해주면 된다.

상황에 따라 CASE 1(1개의 프로퍼티 파일만 사용)과 CASE 2(여러 개의 프로퍼티 파일 사용) 둘 중 하나의 방법을 활용하여 등록해주면 된다.

property의 value 값은 생성한 프로퍼티 파일이 존재하는 경로이다.

 

<!-- ########### root-context.xml ########### -->
<!-- CASE 1. 단일 property 파일 사용 시, 간단하게 사용하는 방법 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:/key.properties" />
</bean>

<!-- CASE 2. 여러 개의 property 파일 사용 시 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:/jdbc.properties</value>
            <value>classpath:/key.properties</value>
        </list>
    </property>
</bean>

<!-- ########### servlet-context.xml ########### -->
<!-- CASE 1의 경우 -->
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <beans:property name="locations" value="classpath:/key.properties" />
</beans:bean>

<!-- CASE 2의 경우 -->
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <beans:property name="locations">
        <beans:list>
            <beans:value>classpath:/jdbc.properties</beans:value>
            <beans:value>classpath:/key.properties</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

 

반응형

 

매우 간단하게도 이렇게만 하면 설정이 끝났다.

이제 사용만 남았다.

사용은 아래와 같이 @Value 어노테이션을 사용해 프로퍼티의 정보를 불러올 수 있다.

 

// !!! 주의 !!!
// @Service, @Component 등 
// Spring에서 관리되는 객체임을 표시하는 어노테이션이 사용된 곳에서만 사용 가능

@Service
public class TestServiceImpl implements TestService {

    //${}로 프로퍼티 정보 불러오기 가능
    @Value("${key.NAVER}")
    private String naverApiKey;
    
    @Override
    public void test() {
        System.out.println("NAVER API 키 : " + naverApiKey);
        
        // 콘솔 출력 결과
        // =================================
        // NAVER API 키 : abcdefg1234567890
        // =================================
    }

}

 

이렇게 하면, API KEY를 property 파일과 Spring의 기능을 활용해 통합적, 효율적으로 관리할 수 있다!

 

 

[ 참고 링크 ]

- https://devbox.tistory.com/entry/Spring-%EC%99%B8%EB%B6%80-%EC%84%A4%EC%A0%95-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0

 

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글