Windows embedded redis 설정(방화벽)

Mac의 OSX를 사용하다가 윈도우를 사용하게 되어서 WAS 서버를 실행시킬 때 가장 먼저 문제가 생긴 건 서버가 실행이 안되는 것이었다. 원인을 찾아보니 WAS 서버를 처음 실행시킬 때에 embedded redis를 사용하고 있었는데 사용하던 라이브러리에서 windows를 지원하지 않고 있었다.

그래서 다른 라이브러리를 사용해야 됐는데… kstyrc의 embedded-redis를 사용하기로 결정했다. 이유는 embedded-redis를 구현한 많은 라이브러리들이 이 라이브러리에서 fork를 하여 구현한 것들로 보였고, 기존에 사용하던 라이브러리 또한 이 라이브러리를 fork하여 구현한 라이브러리여서, 호환성도 좋아보여서였다.

그래서 이 라이브러리로 변경하여 서버를 띄우고 잘 사용하게 되었는데, 한가지 불편한 점이 생겼다. 서버를 띄울 때마다 방화벽 차단 알림이 나오는 것이었다.

그래서 경로를 보니 라이브러리에서 폴더로 temp 폴더로 복사되어 서버를 실행시키고 있었는데, temp폴더에서 timestamp로 보이는 폴더를 만들어서 그 폴더로 서버를 복사하고 있었다.

아니나 다를까, 라이브러리의 JarUtil class에서 google io의 라이브러리를 사용하여 temp폴더를 만들고 있었다. google io라이브러리를 보니 timestamp를 이용하여 폴더를 만들고 있었고, 그래서 방화벽 예외설정을 하기 힘들었다.

이걸 우회할 수 있는 방법으로 JarUtil로 temp폴더를 만들어 복사하기 전에 실행시킬 수 있는 파일이 있으면 따로 temp폴더를 만들지 않는 것을 보고 resources에 redis-server.exe 파일을 복사하여서 temp폴더에 파일 경로가 계속 변경되지 않게 수정했다. 이렇게 하면 처음 서버를 띄울 때 한번만 방화벽 알림이 나오게 되고, 그 다음부터는 나오지 않게 된다.

참고1. 방화벽 설정 방법

혹시 위처럼 방화벽이 설정된 내역을 보고 싶다면…

제어판 -> Windows 방화벽 -> 고급 설정 -> 인바운드 규칙에 들어가면 방화벽 설정 내역 및 새로 추가할 수 있다.

참고2. Temp폴더에 redis-server파일 증식 문제 해결

위의 해결방법을 사용하지 않고 embedded-redis를 그냥 사용할 때에 발생할 수 있는 문제인데, IntelliJ를 사용할 때 발생할 수 있다.

해결 방법이라기 보다는 팁에 가까운데, embedded-redis 라이브러리를 그냥 사용하다 보니 Temp폴더에 redis-server의 timestamp 폴더가 남아 있고 안에 redis-server.exe 파일 1개씩 있는 현상을 발견하게 됐다.

디버깅을 해보니 JarUtil에서 deleteOnExit 메소드를 호출하지만 이 메소드가 정상적으로 실행이 안되고 있었다. 맥의 OSX의 경우 컴퓨터를 끄면 Temp 폴더를 깨끗하게 청소하여 문제가 되지 않지만 윈도우의 경우는 다른 처리를 하지 않기 때문에 쓰레기가 늘어날 문제가 있었다.

단순히 IntelliJ에서 버튼을 잘못알아서 생긴문제였는데,

IntelliJ run toolbar

IntelliJ의 경우 정지버튼으로 빨간 네모를 누르고 있었다.

하지만 정말 당황스럽게도 Graceful terminate는 동그라미친 버튼이었다…;;

그래서 위의 버튼을 잘 누르면 해결이 되는 문제였다.

참고자료

kstyrc/embedded-redis

윈도우10 방화벽 설정과 끄기 차단 해제 설정

IntelliJ Run toolbar