배포 - winscp를 통한 파일 복사
웹어플리케이션을 WAS에 배포하는 방법은 바로 배포될 파일을 WAS의 특정 경로에 복사하는 것입니다. 왜 이런 당연한 얘기를 하고 있나 싶으시죠? 배포에서 중요한 점은 파일을 "어떻게" 복사하느냐라는 점이란 것을 말하고 싶어서였습니다.
오늘은 그 "어떻게" 중 가장 "날"스러운 방법인 war도 아닌 배포하고자 하는 모든 파일을 복사하는 방법에 대해 얘기해보고자 합니다.
1. 배포하고자 하는 프로젝트를 준비합니다. JSP 프로젝트를 eclipse로 진행하다 보면 eclipse에 서버를 등록하고 local에서 구동시키는 정도까지는 진행되었을 겁니다. 그럼 이렇게 local에 배포된 파일을 WAS로 옮기기만 하면 되겠네요.
2. 서버를 붙습니다. 서버는 linux이므로 붙는데 별도의 tool이 필요한데 winscp도 그 중에 하나입니다. 아직 다른 것을 써보지 않아 딱히 뭐가 좋은지는 모르겠습니다만 쓸만합니다.
3. 파일을 복사합니다.
어디서? eclipse의 workspace 하위에 다음과 같은 경로에서
.metadata\.plugins\org.eclipse.wst.server.core\tmp0\[context path]
(위 경로는 eclipse의 Server 탭에서 Server Locations에서 설정이 가능하며 변경하지 않았을 경우의 경로입니다.)
어디로? 서버에 WAS가 설치된 다음과 같은 경로로
/usr/share/tomcat/webapps/[context path]
(위 경로는 yum으로 tomcat을 설치한 경로이며 관리의 편의를 위해서라면 /home/tomcat/webapps/[context path] 경로를 추천합니다.)
winscp는 ui가 좋은 tool입니다. 즉 별다른 도움없이도 파일 복사를 할 수 있습니다. 다만 많은 수의 파일을 복사할 경우 connection이 자주 끊길 수 있습니다. 이는 지속적인 확인을 요구하며 매우 귀찮은 작업이 될 수 있습니다. 그래서 winscp script를 사용할 필요가 있습니다. 다음은 간단한 예제입니다.
open sftp://root@[개발서버 ip ex)127.0.0.1:22]
synchronize local "..\..\..\oz\repository_files" "/usr/share/tomcat/webapps/oz70/WEB-INF/repository_files"
close
open sftp://tomcat@[운영서버 ip]
synchronize remote "..\..\..\oz\repository_files" "/home/tomcat/webapps/[context path]/WEB-INF/repository_files"
synchronize remote -delete -filemask="|context-datasource.xml" "..\..\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\[context path]\WEB-INF\classes\com" "/home/tomcat/webapps/[context path]/WEB-INF/classes/com"
synchronize remote -delete "..\..\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\[context path]\static" "/home/tomcat/webapps/[context path]/static"
synchronize remote -delete "..\..\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\[context path]\WEB-INF\jsp" "/home/tomcat/webapps/[context path]/WEB-INF/jsp"
close
open [계정]@[서버 ip]: 서버에 연결합니다. 패스워드를 명시할 수 있고 명시하지 않은 경우 실행 시 물어봅니다.
synchronize local [local path] [remote path]: remote의 파일을 local로 동기화-복사 합니다.
synchronize remote [local path] [remote path]: local의 파일을 remote로 동기화-복사합니다.
- delete: 이 옵션을 주면 remote에만 있는 파일을 삭제합니다.
- filemask: 이 옵션을 주면 |의 왼쪽에 있는 파일을 대상으로 하며 |의 오른쪽에 있는 파일은 제외합니다.
close: 연결을 닫습니다.
위의 스크립트를 전반적으로 설명하면 개발서버의 oz report 양식을 운영서버로 복사하며 local의 컴파일된 java 소스와 static(css, image, javascrypt) 파일, jsp 파일을 운영서버로 복사합니다. context-datasource.xml은 datasource 설정이 저장된 파일로 운영서버는 JNDI를 사용하므로 제외시켰습니다. 이외에도 업로드된 파일이나 log파일의 저장될 위치 등의 설정은 local과 운영서버가 상이하므로 filemask를 사용해서 제외하면 됩니다.
위 내용을 deploy-prod-script.txt 파일로 만들고 다음과 같은 내용의 batch 파일을 만들어 실행시키면 배포작업의 핵심인 파일 복사를 간편하게 할 수 있습니다.
winscp /script=deploy-prod-script.txt
winscp에 대하여 더 많은 정보가 필요하신분은 winscp 홈페이지를 참조하세요.
배포는 중요하며 자동화가 꼭 필요한 프로세스이기에 위의 방법은 오래 사용할 만한 것이 아닙니다. 그러나 소규모 프로젝트의 개발 초기에는 충분히 사용할 만합니다. 배포를 처음 수행해야 하는 분에게 도움이 되었으면 합니다.
추천하실만한 다른 tool이나 방법이 있으신 분은 댓글로 알려주시면 감사히 받아 정리하여 반영하도록 하겠습니다.