메이븐 웹방화벽 삽질기에 대해서 공유합니다.
결론부터 말씀드리며, 문제의 원흉은 바로 전자정부 프레임워크 maven repository 입니다.
pom.xml 에서 repositories 를 아래처럼(코드1) 설정하고 사용하고 있었습니다.
사실 local-lib를 먼저 등록하고 egovframe을 나중에 등록했습니다.
egovframe 을 등록하기 전에 로컬의 jar 파일들이 모두 잘 인식되어서 로컬의 메이븐 레파지토리에 잘 저장되어 있었습니다.
그런데, egovframe 등록후 한참 후에 새로운 로컬 jar 를 등록하려고 하니 계속 jar파일이 정상이 아니라고 오류가 뜨는 겁니다.
로컬의 메이븐 레파지토리에 저장된 jar를 까보았더니 (코드3)와 같은 내용으로 되어있었습니다.
잉? 왠 웹방화벽?
Jenkins를 통해 원격 빌드 후 배포하는 프로세스 였기 때문에 사용중이던 서버에 뭔가 웹방화벽이 추가된 줄 알고 여기저기 전화하고 삽질을 좀 했습니다.
그런데 나중에 오류 로그를 좀더 자세히 살펴보니 (코드4) 와 같이 내가 로컬 라이브러리로 지정한 녀석이 전자정부 레파토리에서 다운로드를 성공한 겁니다.
느낌적인 느낌으로 알수 있었습니다.
로컬에서 읽어가야 할 라이브러리를 전자정부가 레파지토리가 404나 400대의 오류를 내지 않고 200으로 받아주면서 response만 웹방화벽 오류를(정확히 코드 3) 찍어주고 있으니 메이븐이 알수가 있나 ㅡ,.ㅡ .
그래서 해결책으로 (코드1)의 레파지토리 순서를 전자정부 레파지토리를 가장 아래로 내렸더니 해결이 되었습니다.
Spec의 중요성을 다시 한번 느꼈습니다.
Http Status Code를 좀 지킵시다.
(코드1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <repositories> <!-- 전자정부 프레임워크 --> <repository> <id>egovframe</id> <url>http://www.egovframe.go.kr/maven/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <!-- DO NOT set id to "local" because it is reserved by Maven --> <id>local-lib</id> <name>In Project Repo</name> <url>file://${basedir}/lib</url> <layout>default</layout> </repository> <repository> <id>oracle</id> <name>ORACLE JDBC Repository</name> <url>http://maven.jahia.org/maven2</url> </repository> </repositories> | cs |
1 2 3 4 5 | <dependency> <groupId>eai</groupId> <artifactId>jdom</artifactId> <version>1.0</version> </dependency> | cs |
(코드3)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [root@TEST /home/jenkins/.m2/repository/eai/jdom/2.0.6]# cat jdom-2.0.6.jar <br> <br> <center> <h2> The request / response that are contrary to the Web firewall security policies have been blocked. </h2> <table> <tr> <td>Detect time</td> <td></td> </tr> <tr> <td>Detect client IP</td> <td></td> </tr> <tr> <td>Detect URL</td> <td></td> </tr> </table> </center> <br> | cs |
(코드4)
[WARNING] The POM for eai:ILinkAPI:jar:1.0 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details Downloading: http://www.egovframe.go.kr/maven/eai/jdom/2.0.6/jdom-2.0.6.pom 310/310 B [WARNING] Checksum validation failed, expected <br> but is ed3486b6e3ec3d28a2acb83e454c57ad33a93098 for http://www.egovframe.go.kr/maven/eai/jdom/2.0.6/jdom-2.0.6.pom