며칠 전, Redis 를 로컬에서 테스트 할 수 있는 두 가지 방법을 소개했습니다. 사실 그 날 Redis 테스트하는 방법을 실험했던 건 맡고있는 업무에서 써먹기 위해서였어요. "주말에 테스트해보고 월요일 출근해서 써먹어야지" 라는 생각으로 해본 거에요. 덕분에 일요일 저녁 기분좋게 잠들 수 있었는데요. 근데 저는 월요일 대부분의 업무 시간을 또 다시 Redis 로컬 테스트를 하는데 할애하게되었습니다.
지금까지 전 Redis 테스트 시 testContainers 를 활용해왔어요. Embedded Redis가 전자보다 더 후지든 어떻든 간에, 한번은 실무에서 사용해보자 하는 마음으로 별안간 Embedded Redis 방법을 채택하게됩니다.
그런데 안되는 겁니다..
"Can't start redis server. Check logs for details. Redis process log:"
"Can't start redis server. Check logs for details. Redis process log:"
"Can't start redis server. Check logs for details. Redis process log:"
process 로그를 보라는데.. process 가 이미 죽어버려서 로그를 확인할 수가 없었습니다.
디버깅을 해보아도 별 다른 특이점을 발견하지 못했습니다.
내가 뭘 잘못했을까.. 이리저리 뛰어봐도 계속 발생하는 캔트 스타트 레디스 서버..
블로깅을 해보았더니 대략적인 원인을 알 수 있었습니다. Embedded Redis 가 macOS 와 호환이 안되는 이슈가 있다고 하는 겁니다.. 특히 M1/M2 칩과 같은 ARM 아키텍처에서 발생한다고 합니다. 근데 ARM 아키텍처 때문에 발생하는 원인은 제가 겪었던 이슈 원인과 다릅니다. 암튼 redis-server 바이너리가 macOS 에서 실행되지 않거나, ARM 아키텍처를 지원하지 않는 것이 문제입니다.
그럼 왜 바이너리가 실행을 안해주냐.. 묻고 따지고 맛보자면 마마찬코님이 설명해줄 수 있습니다. 링크
macOS Sonoma에서 macOS가 서명하지않은 바이너리나, 시스템에서 승인되지 않은 실행 파일의 실행을 차단해버리는 방식으로 보안 정책이 강화된 게 원인입니다. macOS의 Console 앱을 사용하여 redis를 필터로 설정해 메시지 기록(Recording Messages)으로 확인한 메세지는 다음과 같았다고 합니다.
[system message] Execution of redis-server was denied due to security policies.
Embedded Redis 테스트가 성공했던 제 개인 컴퓨터는 Monterey 였고, 회사 맥북은 Sonoma 였습니다. 문제가 내 코드에 있는지 RedisServer에 있는지 혼란스러웠는데, 일단 제 코드에는 문제가 없었습니다. ㅋㅋ
세 가지의 해결 방법을 강구해보았습니다.
1. macOS 개발도구에서 java 를 허용해보자.
2. Redis 공식 다운로드를 통해 macOS용 바이너리를 설치해보자.
3. testContainers 를 그냥 사용하자.
저는 바쁜 현대인이기 때문에 3번의 방식으로 일단락했습니다. 다른 분들도 제가 올린 방법 중 두 번째 testContainers 라이브러리를 통해 문제를 해결해보세요. 제 생각입니다만, 그 해결법이 여러모로 가장 나이스 한 것 같습니다. 이슈 공유 끝.
'테스트 쉽게하기' 카테고리의 다른 글
Airflow 로컬에서 동작시켜보기 튜토리얼 1 (0) | 2024.12.04 |
---|---|
Unleash 로컬에서 동작시켜보기 튜토리얼 2 (0) | 2024.12.03 |
Unleash 로컬에서 동작시켜보기 튜토리얼 1 (3) | 2024.12.03 |
Redis 로컬 테스트 하는 두 가지 방법 : testContainers (3) | 2024.12.01 |