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)를 통해 작업을 전달하며, 대표적인 브로커로..
🚀 동적으로 파일을 제공하는 방법
·
AlgoMate
✅ 1️⃣ Spring 컨트롤러로 파일 제공 (가장 유연한 방법)파일이 자주 추가되거나 변경된다면, 정적 리소스가 아니라 Spring 컨트롤러를 사용해서 파일을 서빙하는 것이 좋다.이렇게 하면 새로운 파일이 추가되거나 수정되어도 서버를 재시작할 필요 없이 제공할 수 있다. ✔ 컨트롤러 구현@RestController@RequestMapping("/api/v1/files")public class FileController { // 🔹 외부 폴더 경로 (resources 내부 대신, 별도 경로 사용) private final String BASE_PATH = "/Users/sungho/Documents/study/Algomate/algorithm-mate/src/main/resources/sol..
Spring Boot 단위 테스트: @Mock 과 @InjectionMocks의 원리와 활용
·
AlgoMate
🧐 1. Mockito란? (왜 사용하는가?)Mockito 란 Java에서 단위 테스트를 위한 Mocking 프레임워크입니다. 특정 객체를 실제 객체처럼 흉내 내는 가짜(Mock) 객체로 만들어서, 테스트 중 특정 동작을 정의하고 예상 결과를 검증할 수 있다.✅ 왜 Mocking이 필요할까?데이터베이스 의존성 제거: Repository나 외부 API를 직접 호출하면 테스트가 느려지고 환경에 의존적이 된다.정확한 테스트 보장: 특정 메서드가 정확한 값을 반환하는지 독립적으로 테스트가 가능하다.테스트 속도 향상: 실제 DB 연결 없이 원하는 값을 변환하도록 설정하면 빠른 테스트가 가능하다.🔥 Mock을 사용해야 하는 경우 vs 사용하지 않아야 하는 경우Mock을 사용해야 하는 경우Mock을 사용하지 않아..
AlgoMate#3 - docker 로 띄운 DB 에 접근하기(PostgreSQL)
·
AlgoMate
✅ 1. 도커 컨테이너 확인먼저, 실행 중인 DB 컨테이너의 이름 혹은 ID를 확인합니다.docker ps출력 예시CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESabc12345678 postgres:latest "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:5432->5432/tcp my-postgres ✅ 2.  PostgreSQL 컨테이너에 접속docker exec 명령어를 통해 도커 컨테이너에 접속합니다.docker exec -it my-postgres bashmy..