github에 올릴 수 없는 환경변수는 어떻게 배포환경에 추가해야할까?
·
AlgoMate
오늘 크롤링 서버를 EC2에 배포하면서 github action을 사용해 CI/CD 워크 플로우를 구성하던 중, 비동기 작업을 처리하는 celery_worker 가 redis에 연결을 요청해서 작업 큐로 사용해야하는데 엄한 곳에다가 요청을 하는 소동이 벌어졌다. 분명히 로컬에서는 도커 컴포즈로 띄웠을 때 잘 작동하던 코드라 안될리가 없는데, 안돼서 당황스러움을 가득 안고 디버깅에 들어갔다. 1. 에러 상황개요는 이러했다.이런 식으로 잘 연결되어야 하는 애가celery_worker | [INFO/MainProcess] Connected to redis://redis_celery:6379/0바보마냥 연결해야할 엔드포인트를 잘 못 지정하고 있는 문제였다.amqp와 5672포트로 연결하는 걸 미루어보아 기본으..
host.docker.internal은 왜 운영환경에서 사용하기 어려울까⁉️
·
AlgoMate
1️⃣ host.docker.internal은 로컬 개발용으로만 제공됨host.docker.internal은 Docker가 제공하는 내부 호스트 주소 매핑 기능이다.하지만 Docker Desktop(Windows/Mac) 환경에서만 지원되며, Linux 서버에서는 기본적으로 지원되지 않는다.운영 서버(예: AWS EC2, GCP, Kubernetes 환경)에서는 이 기능이 아예 작동하지 않거나, 설정이 필요하다.📌 운영 환경에서 작동하지 않는 이유로컬 개발 환경에서는 Docker Desktop이 자동으로 host.docker.internal을 설정하지만, 운영 환경에서는 Docker Engine이 이 설정을 제공하지 않는다.Linux 기반 Docker에서는 기본적으로 host.docker.interna..
🛠️ 컨테이너 내부에서 로컬 서버로 API 요청 보내는 방법 🚀
·
AlgoMate
FastAPI 서버를 Docker 컨테이너로 실행하고, 로컬에서 실행 중인 Spring Boot 서버로 API 요청을 보내려고 했는데, 127.0.0.1로는 접근이 불가능한 문제를 만났다. 🤔 이 문제를 해결하는 과정과 방법을 정리해본다.🔥 문제 상황: 컨테이너에서 로컬 서버로 API 요청이 안 된다컨테이너 내부의 FastAPI 서버에서 로컬 환경에서 실행 중인 Spring Boot 서버(localhost:8080)로 API 요청을 보내려고 했지만, 127.0.0.1을 사용하면 연결이 안 됐다. ❌ 🚨 문제의 원인컨테이너 내부에서 127.0.0.1(localhost)을 호출하면, 컨테이너 자체의 로컬 주소를 가리킨다.실제 Spring Boot 서버는 **호스트 운영체제(로컬 머신)**에서 실행 중이..
Selenium을 통한 크롤링 시, 마주하는 reCAPTCHA 해결기
·
AlgoMate
기존 프로젝트를 리팩토링 하면서 크롤링을 기능을 자동화하는 걸 목표로 했다. 크롤링하는 곳에 접근하기 위해서 해당 사이트에 로그인을 수행해야 했는데 로그인 과정에서 자주 등장하는 recaptcha가 말썽이었다. 기존에 프로젝트를 진행할 때는 워낙 바쁘기도 했고, 전체 서비의 프로토타입을 만드는 걸 목적으로 했기에, 로그인 과정 중에 reCAPTCHA를 만나면 내가 수기로 해결하곤 했다. 해당 시기에도 크롤링을 자동화 하려고 했는데, 결국 해결하지 못했다. 전체 프로젝트에서 크롤링이 일부분이었기에 일단 전체 프로세스가 돌아가도록 설계하는 것이 우선이라고 생각하여 포기하게 되었다. 이후 방학을 맞이해서 해당 서비스를 고도화해서 배포해보자라는 목표를 가지고 요즘 리팩토링을 진행하고 있는데, 잊고 있었던 그녀석..
Redis만으로도 비동기 처리는 가능하잖아‼️ 근데 왜 Celery+Redis를 사용해야 할까
·
AlgoMate
FastAPI에서 비동기 작업을 위한 Redis vs Celery: 언제, 왜 사용해야 할까?최근 웹 애플리케이션에서는 백그라운드에서 무거운 작업을 실행할 필요가 많다.예를 들어, 크롤링, 데이터 처리, 대량의 이메일 전송, 이미지 변환 같은 작업들은 즉시 응답할 필요가 없으며, 사용자가 기다리지 않도록 백그라운드에서 실행하는 것이 필수적이다. 이때, Python 기반의 FastAPI와 함께 사용할 수 있는 대표적인 비동기 처리 방법이 Redis와 Celery이다.Redis만 사용해도 비동기 처리가 가능하지만, Celery까지 도입하면 훨씬 강력한 기능을 활용할 수 있다.이번 글에서는 Redis만 사용한 비동기 처리 vs Celery + Redis를 사용한 비동기 처리의 차이를 정리해보려고 한다.1. ..
🚀 크롤링 서버 vs 메인 서버, 크롤링한 데이터를 어디서 저장해야 할까?
·
AlgoMate
"FastAPI에서 크롤링한 데이터를 바로 저장할까? 아니면 메인 서버(Spring Boot)로 전송해서 저장할까?"이 고민을 해결하기 위해 두 가지 방법을 비교해보려고 한다.🔥 1. 프로젝트 개요저는 FastAPI + Spring Boot를 활용하여 백준 정답 코드 추천 서비스를 개발하고 있습니다.백준에서 크롤링한 정답 코드를 저장하는 과정에서 다음과 같은 고민이 생겼습니다.✅ FastAPI에서 크롤링한 데이터를 직접 저장하는 것이 좋을까?✅ 아니면 FastAPI에서 크롤링한 후, 메인 서버(Spring Boot)로 전송해서 저장하는 것이 좋을까?📌 이 포스팅에서는 두 가지 방식의 장단점을 비교하고, 최적의 방식을 찾아보려고 합니다. 2. 선택지 비교: FastAPI vs Spring Boot 저장..
🔑 크롤링&스크래핑에서 쿠키를 사용하여 로그인 상태 유지하기
·
AlgoMate
웹 크롤링을 하다 보면 로그인 후 작업을 지속적으로 수행해야 하는 경우가 많다. 매번 로그인하는 번거로움을 피하고 로그인 상태를 유지하려면 쿠키를 사용하는 방법이 매우 유용합니다. 이번 포스팅에서는 Selenium을 활용해 로그인 후 쿠키를 저장하고, 이를 불러와 로그인 상태를 유지하는 방법을 소개하려고 한다.1️⃣ Selenium을 활용한 로그인웹사이트에 로그인하려면 Selenium을 사용해 로그인 폼에 사용자 정보를 입력하고 로그인 버튼을 클릭하는 작업을 자동화할 수 있습니다.def login(driver): driver.get("https://www.aaa.com/login") username = os.getenv("USERNAME") #.env파일에 저장해놓은 정보를 불러왔다. ..
Celery + Redis vs Celery + RabbitMQ: 어떤 선택이 더 나을까?
·
AlgoMate
크롤링 서버를 구축하는 과정에서 크롤링이 오래걸려 사용자가 기다려야 하는데, 너무 오래 걸려서 UX가 좋지 않은 것 같아 이 문제를 해결하는 과정에서 Celery를 사용하게 되었다. 메세지 브로커를 선택하는 과정에서 Redis 와 RabbitMQ, Amazon SQS, Kafka 등이 사용될 수 있는데 작은 서비스의 경우에는 Redis 와 RabbitMQ이 둘 사이에 고민하는 게 맞는 것 같아서 둘을 비교하고 나에게 적합한 메세지 큐를 선택하려고 한다. 🔥 Celery의 메시지 브로커 선택Celery는 분산 작업 큐(Distributed Task Queue)로, 비동기 작업을 처리하는 데 널리 사용된다. Celery는 메시지 브로커(Message Broker)를 통해 작업을 전달하며, 대표적인 브로커로..