Pycurl Error : Celery와 SQS 구축 시 OpenSSL 이해하고 설정하기 [Celery, AWS SQS]
Celery를 사용하면서 기존에 redis를 사용하다가 AWS sqs를 사용하기 위해 설정을 하던 중 만난 에러를 기록한다.
발생한 에러는 pycurl error로 OpenSSL 설정을 변경하여 해결했다.
에러환경
- Env
- M1 mac
- Python 3.9.13
- celery 5.2.1
- pycurl 7.45.2
- Case
- celery Run → Pycurl Error
Pycurl Error 해결과정
openssl 정보 확인
brew info openssl
openssl 관련 환경변수 설정 → pycurl install
export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
PYCURL_SSL_LIBRARY=openssl LDFLAGS=$LDFLAGS CPPFLAGS=$CPPFLAGS pip install --no-cache-dir pycurl
celery 의 브로커로 sqs를 사용하는데 왜 openssl 관련 에러가 발생한건지?
각 Lib역할 및 Flow
Celery 란?
분산 작업 큐를 구현하는 파이썬 라이브러리, 여러 가지 메시지 브로커와 통합.(ex: redis, AWS SQS)
pycurl 이란?
Python에서 사용되는 libcurl 라이브러리의 Python 바인딩. pycurl은 HTTP, FTP, SMTP 등과 같은 다양한 프로토콜을 지원하고 libcurl 라이브러리를 기반으로 함.
libcurl 이란?
네트워크 전송에 사용되는 오픈소스 라이브러리. HTTPS 프로토콜에서 SSL/TLS 인증서를 사용하기 위해서는 OpenSSL 라이브러리가 필요.
즉 OpenSSL이 제대로 설치되어 있지 않거나 OpenSSL 버전이 낮은 경우 등 openssl에서 비롯한 문제가 발생한 경우 pycurl에서 오류가 발생.
OpenSSL 이란?
- 암호화 표준을 구현한 오픈소스 라이브러리.
- SSL 및 TLS와 같은 보안 프로토콜의 구현뿐만 아니라 암호화 및 복호화, 서명 및 검증 등 다양한 암호화 기능을 제공.
- OpenSSL은 소스 코드 형태로 제공되며, 사용자는 이를 컴파일하여 시스템에서 사용할 수 있는 실행 파일로 만들어야함.
OpenSSL을 컴파일하는 이유
OpenSSL을 컴파일하여 시스템에서 사용하는 것은 OpenSSL을 최신 버전으로 업그레이드하거나 사용자 정의 OpenSSL 버전을 사용하기 위한 필수적인 단계.
- 시스템에서 이미 설치된 OpenSSL 라이브러리보다 더 높은 버전의 OpenSSL을 사용하고 싶은 경우에는 직접 OpenSSL을 컴파일하여 사용.
- 특정 플랫폼에 맞는 최적화된 OpenSSL 라이브러리를 만들기 위해 컴파일을 수행.
- OpenSSL의 소스 코드를 수정하여 사용가능.
OpenSSL을 컴파일하는 방법
- 일반적으로는 OpenSSL 소스 코드를 다운로드한 후 컴파일러 및 링커 옵션을 설정하여 컴파일. LDFLAGS와 CPPFLAGS와 같은 변수를 사용하여 컴파일러 및 링커에 전달할 옵션을 지정.
LDFLAGS와 CPPFLAGS
OpenSSL을 컴파일할 때 사용되는 컴파일러 및 링커 옵션을 지정하는 변수
LDFLAGS
- 링커에 전달되는 플래그를 설정. 링크 시 사용되는 라이브러리와 라이브러리 위치를 설정.
CPPFLAGS
- C 프리프로세서에 전달되는 플래그를 설정. C 코드 컴파일 시 필요한 헤더 파일의 위치나 매크로를 정의.
celery에서 Sqs를 사용할때 네트워크 전송이 필요하고, pycurl(libcurl을 기반 lib) 을 사용하게 된다.
pycurl 에서 https 프로토콜을 사용하려면 openssl 라이브러리를 사용한다.
이때 openssl 설정값이 문제가 생기면 pycurl 에러가 발생한다.