딥러닝 모델을 탑재한 FastAPI 앱을 AWS ElasticBeanstalk으로 배포하는 과정에서 분명 로컬에서는 잘 되는데 빈스톡 환경에서 import torch하는 부분에 libgomp-d22c30c5.so.1: cannot allocate memory in static TLS block 에러가 뜨면서 서버가 배포되지 않는 이슈를 맞이했다. https://stackoverflow.com/questions/70446215/torch-lib-libgomp-d22c30c5-so-1-cannot-allocate-memory-in-static-tls-block torch/lib/libgomp-d22c30c5.so.1: cannot allocate memory in static TLS block I insta..
Github Actions으로 CD 파이프라인을 구성하면 (스프링 부트 기준), 매번 새로운 환경에서 빌드를 진행하기 때문에 gradle 패키지를 다운로드 받는데 많은 시간을 소요하게 된다. 여기서 캐싱을 적용해서 해당 시간을 대폭 줄일 수 있는데 이를 소개한다. Gradle Build 스텝 전에 해당 스크립트를 넣어준다. - name: Gradle Caching uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner...
이번 포스팅에서는 Nginx 웹 서버를 통해서 로드밸런싱 역할을 하는 Reverse Proxy를 구축하는 방법을 정리한다. # 사전 용어 정리 웹 서버 - 정적 컨텐츠를 제공하는 서버 (주로 정적 컨텐츠 캐싱이나 리버스 프록시 용도로 사용) WAS - 동적 로직을 수행하는 서버 (디비와 연결) 리버스 프록시 (Reverse Proxy) - 먼저 트래픽을 받고 뒷단(Reverse)에 있는 WAS에게 전달해 주는 웹 서버 *스프링 부트의 Dispatcher Servlet을 생각하면 편하다 로드밸런싱 - 트래픽을 분산 처리하는 이정표 같은 역할 # 시나리오 Nginx가 로드밸런서 역할을 해서 트래픽을 라운드로빈 방식으로 두 개의 EC2에 각각 분산 처리하도록 구성할 것이다. 향후 두 인스턴스는 부하 분산 처리..
SSL 인증서가 AWS CloudFront로 설정되어있다면 EC2로 유입되는 트래픽을 제한하는 걸 아주 쉽게 할 수 있다. # CloudFront 설정 # 테스트 https://tools.pingdom.com/ Pingdom Tools Full Page Test Analysis tools.pingdom.com 다음 사이트에서 해외 IP로 트래픽을 전송해 볼 수 있다. tes from을 아무대로 선택하고 start test를 누른다. 403이 뜬다면 해외 IP 차단에 성공한 것이다.
스프링 부트 서버에 HTTPS를 달아야 해서 그 과정에서 삽질했던 것들을 기록하고 공유하고자 한다. 우선 AWS EC2에 HTTPS를 설정하는 방법은 1. certbot로 설정하는 방법 2. AWS CloudFront로 하는 방법 두 가지가 존재하는데, 개인적으로 certbot이 더 쉽지만 이번에는 AWS CloudFront를 사용해본다. # SSL 설정 방법 구체적인 설정 방법은 다음 동영상을 따라한다. https://www.youtube.com/watch?v=WS2n8mkrFaY 위 방법대로 생성하고 몇 가지 추가적으로 수정해야 할 요소들을 정리한다. SSL 설정을 했는데, 잘되던 프론트와의 통신에 문제가 생긴다면 백에서 조치할 사항들을 정리한다. 내가 겪었던 오류들은 Authorization 헤더가..
갑자기 새벽에 CI/CD 파이프라인이 먹통 된 거 같다는 소식을 받고 달려와서 확인해보니, 이번에는 신기하게도 처음보는 EC2 timeout 문제를 직면했다. SSH 접속을 시도해봤는데 timeout 뜨길래 EC2 관련 문제구나를 직감했다. AWS 대시보드로가니 연결성 검사에 실패했다는 상태 검사를 볼 수 있었다. 무슨 이유인지는 아직도 모르겠으나, 일단은 EC2 인스턴스를 중지 -> 시작 하는 방식으로 해결했다. (재부팅은 안 되더라...) 혹시라도 나중에 또 비슷한 현상이 발생하면 인스턴스를 중지(종료 아님!)후 재시작 해볼 것을 권장한다.