- [전자정부프레임워크] globals.properties 적용하기2024년 06월 22일 11시 40분 35초에 업로드 된 글입니다.작성자: 이주여이
사진 게시판에 사진 등록하는 로직에서 개발 환경이랑 배포 환경의 디렉토리 구조가 달라 사진이 화면에 출력안되는 이슈가 있었다. 로그를 확인해보지 않아도 학원에서 리액트 반이랑 협업할 때 자연스레 알게된 점이긴 했지만..
여튼 spring boot는 profile을 적용하면 됐었는데 전자정부프레임워크는 globals.properties를 적용한다고 한다!
환경에 따라 보다 효율적으로 관리하기 위해 globals.properties를 적용시켜보았다.
1. classpath에 globals.properties 추가
dev - windows
prod - linux(rocky linux)
나는 resources 내에 생성했으며 globals.properties는 파일 내에 active=dev 혹은 active=prod를 적어두고 개발할 때는 dev를 적어둠으로써 개발 환경에서 세팅되어야 할 값들을 적어놓고, 배포할 때는 prod를 적어둠으로써 배포 환경에서 세팅되어야 할 값들을 적어놨다.
globals.properties
active=dev
globals- 뒤에 오는 값을 적어준다.
배포할 때는 dev를 지우고 prod를 적어준 후 war 파일을 압축하면 된다.
globals-dev.properties
upload.prefix.path=C:/survey
개발 환경은 windows이며 파일 저장 경로를 C 드라이브 내에 폴더를 따로 만들어뒀는데 배포 환경인 linux에는 당연히 C 드라이브가 없으니 에러가 발생헀던 것이다. 여튼 내가 properties를 나누어 관리하려는 궁극적인 목적은 이렇게 운영체제마다 저장 경로를 나누어 관리하기 위함이다.
아래는 배포 환경인 linux에서 파일을 저장할 경로를 적어줬다.
globals-prod.properties
upload.prefix.path=/usr/local/project/survey
2. context-common.xml 수정
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
util과 관련된 부분을 추가한다.
<util:properties id="global" location="classpath:/globals.properties" /> <util:properties id="prop" location="classpath:/globals-#{global['active']}.properties" />
global이라는 properties의 경로는 active를 적어줬던 파일 경로이다.
prop라는 properties의 경로를 보면 classpath(resources) 내 globals- 라고 적혀져있고 그 뒤에 global이라고 되어 있는데 이것은 prop 위에서 선언한 global의 경로 내에 active에 있는 value 값을 가져온다. 현재 글에서는 dev로 되어있기 때문에 다른 곳에서 prop에 있는 값을 가져온다면 globals-dev.properties의 값을 가져오게 되는 것이다.
3. java 코드 수정
~ 수정 전 ~
@Component public class FileUtils { private final MessageSource messageSource; private final String prefixPath; Logger log = LoggerFactory.getLogger(getClass()); // context-common.xml에 등록된 messageSource 빈을 사용 public FileUtils(MessageSource messageSource) { this.messageSource = messageSource; this.prefixPath = messageSource.getMessage("upload.prefix.path", null, Locale.getDefault()); } // ... 생략 }
이 전에는 전정부에 있는 message-common.properties를 이용했었다.
~ 수정 후 ~
@Component public class FileUtils { private final String prefixPath; Logger log = LoggerFactory.getLogger(getClass()); // context-common.xml을 참조 public FileUtils(@Value("#{prop['upload.prefix.path']}") String prefixPath) { this.prefixPath = prefixPath; } // ... 생략 }
4. 확인
전정부에서 war 파일 압축하기 전에 active를 prod로 수정하고 ftp를 통해 war 파일을 linux 내에 tomcat/webapps/로 이동시켰다. 이후 context-common.xml에서 설정했던대로 해당 경로에 루피 사진이 저장되는 것을 확인할 수 있었다.(참고로 개발 환경에서도 테스트 해봤는데 캡처를 안했다. 정상 작동한다)
관련 레퍼런스
https://haenny.tistory.com/271
https://hyeounstory.tistory.com/111
https://blog.naver.com/deersoul6662/222044609070
다음글이 없습니다.이전글이 없습니다.댓글