본문 바로가기

Spring Framework

스프링) 배포 환경 분리하기 (리눅스 - VM argument)

인터넷에 여러글을 보면서 실행하다가 

내용도 너무 거지같고 전부 복붙글뿐이여서 내가 시행착오 겪으면서 작성한 내용임

어떤 누가봐도 한번에 성공할수있게 내용정리 함

 

하고자 하게 된 계기는 로컬서버와 운영서버를 분리하기 위해서

매번 배포할때마다 db연결소스부터 해서 변경해줘야되는게 번거롭기에 

war파일 말아서 배포만하면 알아서 local, prod(운영) 구분할수있게 설정하기 위함

 

 

1. 프로퍼티 파일 분리하기

src/main/resources/${디렉토리명}/system.properties

(앞으로 할 작업에서 local(로컬), prod(운영)을 분리하기위해 디렉토리이름을 서로 다르게 구분지음)

 

 

2. 프로퍼티 파일안에 내용

본인 프로젝트 DB 연결정보에 맞게  프로퍼티명=value 값으로 작성

(local, prod 동일한 properties값으로 해야 유동성있게 변경하기 쉬우니 그냥 똑같이 맞추자)

 

 

3. DB연결 (context-database, applicationContext.xml)

1) util:properties 설정

<util:properties id="systemProp" location="classpath:/경로입력">

${spring.profiles.active} 부분이 앞으로 다음내용에 나올 local, prod에 구분되는 변수값이라 보면됨

 

2. dataSource 설정

properties 내용안에 값을 불러와서 사용할때는

#{systemProp['db.maria.url']}  =  #{propertiesId값['사용하고자 하는 propertie']}

 

주의 : $ 가 아니라 # 임

 

 

4. 톰캣설정

눈치 빠른 사람은 알겠지만 빨간줄 밑줄그은

-Dspring.profiles.active="local"  

내용이 인텔리제이에서 톰캣을 실행할때는 spring.profiles.active 값을 local로 고정하겠다 이뜻임

 

 

우선 지금까지 작업은 인텔리제이에서 local에서 작업하기 위한 내용임 

물론 4번 이미지에 "local"을 "prod"로 변경시 실제 운영DB로 접근함

 

 

--------------------------------------------------------------------------------------------------------------------

 

여기서부터 (SFTP) WIN_SCP 에서 개고생하며 삽질한 내용을 정리할거임

지금부터 아래부분이 실제 내가 war파일만 말아서 올리면 리눅스서버에서 알아서 prod(운영) 정보를 DB연결 정보에 

대입하는 내용임 (내용은 겁나 간단함)

 

 

1. setenv.sh 파일 만들기

해당 tomcat/bin 폴더까지 이동후

새로만들기 - 파일 선택후 

setenv.sh  (파일명 오타나면안됨) 생성

 

 

2. setenv.sh 파일 내용

export JAVA_OPTS="-Dspring.profiles.active=prod"

위에서 local에서 작업할때는 -Dspring.profiles.active="local"을 줬지만

운영서버는 무조건 prod로 실행하면 되니 prod 값을 줌

 

인텔리제이 Tomcat과 리눅스 Tomcat - VMoption 값 주는방식이 살짝 다르니

주의깊게 보고 내용 적기 (안되면 위에 코드블럭 복붙)

 

 

3. 톰캣서버 내렸다 올리기

 

나같은경우는 putty 프로그램을 사용하여

배포(운영) 리눅스 서버에 있는 tomcat을 내렸다 올렸다 함

 

putty 기준으로

톰캣/bin 폴더 접근후

 

서버내리기

./shutdown.sh

 

서버올리기

./startup.sh

 

 

 

이로써 모든 작업은 끝났고 인텔리제이에서 war파일만 말면 

local에서는 local 프로퍼티값을 사용하고

배포했을경우에는 prod 프로퍼티값을 사용함

(왜냐? 방금 위에서 리눅스 서버 tomcat은 prod값 쓰겠다고 고정으로 박아놨으니)