All posts

all

문제 현상

PyInstaller로 패키징 시 일부 빌드 파일이 백신에 의해 삭제되어 오류 발생.

28195 WARNING: Execution of 'write_manifest_to_executable' failed on attempt #1 / 20: error(5, 'LoadLibraryExW', '액세스가 거부되었습니다.'). Retrying in 0.05 second(s)...
28611 WARNING: Execution of 'write_manifest_to_executable' failed on attempt #2 / 20: error(5, 'LoadLibraryExW', '액세스가 거부되었습니다.'). Retrying in 0.06 second(s)...
Traceback (most recent call last):
...
OSError: [WinError 2] 지정된 파일을 찾을 수 없습니다.
...

백신 탐지 내역

  • 탐지명: Trojan/Win.Pyinstaller.R697276
  • 설명: PyInstaller로 제작된 일부 악성코드 사례가 신고되어 해당 방식으로 빌드된 파일을 백신이 자동 삭제함.

원인

  • PyInstaller의 bootloader가 외부에서 빌드되어 제공되므로, 보안 프로그램에서 악성코드로 오탐지 가능.
  • 백신이 빌드 중간 파일 또는 실행 파일을 삭제하면서 패키징 실패.

조치

PyInstaller를 직접 빌드하여 백신 탐지를 회피하고 패키징 성공.

1. Visual Studio Build Tools 설치

https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/

 

Microsoft C++ Build Tools - Visual Studio

 

visualstudio.microsoft.com

2. C++ Build Tools 구성요소 설치

필수 구성요소:

  • Windows SDK
  • MSVC v14.x 이상

3. pyinstaller 빌드 및 설치

py -m pip uninstall pyinstaller -y
git clone https://github.com/pyinstaller/pyinstaller.git
cd pyinstaller
cd bootloader
py waf all

cd ..
py -m pip install .

정리

외부에서 빌드된 PyInstaller 실행 파일은 보안 정책에 의해 차단될 수 있지만, 직접 빌드한 경우에는 동일한 내용이라도 차단되지 않는 특성을 활용하여 문제를 해결함.

문제

PyInstaller 패키징 시 특정 모듈을 찾을 수 없는 오류 발생

ModuleNotFoundError: No module named 'azure.devops.v7_0.core'

해결과정

로컬 환경 및 가상 환경 모두 해당 패키지는 설치되어 있었으며, 패키징을 하지 않을 경우에는 정상적으로 작동함.

해당 모듈을 직접 확인해본 결과 코드에서 사용하는 일부 모듈이 동적 임포트를 통해 로드되고 있었음.

PyInstaller는 정적으로 참조된 모듈만 포함하기 때문에 동적으로 로드되는 모듈은 패키징 과정에서 누락 되는 점 확인.

조치

필요한 동적 모듈을 확인하고 --hidden-import 옵션을 추가하여 오류를 해결.

pyinstaller --hidden-import=azure.devops.v7_0.core --hidden-import=azure.mgmt.resource ...

정리

  1. 패키징 과정에서 필요한 모듈은 명시적으로 표시.
  2. 동적으로 로드되는 모듈은 --hidden-import 옵션을 이용.
  3. --hidden-import 옵션을 사용할 경우, 불필요한 모듈이 포함되지 않도록 주의.

문제

AWS VPC와 사내 네트워크 간 연결된 IPSec VPN 사이에 간헐적 끊김 현상이 발생.

해결 과정

Public 환경의 네트워크와 비교하였으나 VPN을 사용하는 환경에서만 간헐적 끊김 현상 확인.

테스트 환경을 구성하여 확인해 보니, 게이트웨이에 Direct Connect를 연결했을 때 VPN 끊김 현상 발생.

VPC 게이트웨이에 Direct Connect와 VPN이 동시에 연결되어 있는 상태였고,

Direct Connect에서 사용된 BGP 라우팅 전파가 VPN 네트워크에도 영향을 주면서 네트워크가 불안정해짐.

개선

기존 게이트웨이를 Transit Gateway로 변경 및 라우팅 분리하여 문제 해결.

문제

EKS에 CI/CD 파이프라인 배포 환경에서 API 서버 배포 간 간헐적으로 서버 연결에 오류가 발생.

해결 과정

CI/CD 파이프라인을 전체적으로 검토하고, Kubernetes에 설정된 Health Check 설정 확인.
백엔드 개발자들과 이슈 공유 후, API 서버 설정된 graceful shutdown 설정 파악.
API 서버의 설정 보다 pod의 종료 대기 시간이 짧아 API 서버에서 처리 중인 요청이 pod 종료로 인해 끊김.

조치

pod의 종료 대기 시간을 애플리케이션 보다 길게 설정하여 문제 해결.

문제

모니터링 알람을 통해 DB 스토리지 사용률 90% 초과 감지, 이어서 웹 서비스 장애 발생.

스토리지 사용률이 급상승되어 100%가 되었고 이에 Read-only 상태로 변경되어 장애가 발생한 것으로 확인.

해결 과정

스토리지 용량을 확장한 후, MSSQL을 재시작하여 임시 조치.

임시 조치 후 스토리지 사용량은 복구 되었고,

로그를 분석해보니 Auto Shrink 기능에 오류가 발생해 tempdb 용량이 급격하게 상승한 것으로 파악.

Auto Shrink는 IO와 CPU 리소스를 많이 사용하는데,

MSSQL 점유 리소스와 스케쥴러 작동으로 인해 사용 가능한 리소스가 부족해 오류 발생한 것으로 파악.

정상적인 스케쥴러 작동 및 인스턴스 비용을 고려하여 CPU 점유 설정은 유지.

동일한 이슈로 장애가 발생하지 않도록 tempdb에 대한 maxsize를 설정.

후속 조치

tempdb에 대한 maxsize를 설정.

 

참고링크

https://www.sqlshack.com/sql-server-auto-shrink-database-property/