전체 글 97

비동기 작업 도구 선택

특징CeleryScarpyBeautifulSoup+ RequestsAWS Lambda설치/설정 복잡성브로커 설정 필요파이썬 패키지로 간단하게 설치 가능파이썬 내장 라이브러리로 간단하게 사용 가능AWS 계정 및 Lambda 함수 설정 필요비동기 처리지원제한적 (scarpy-redis 사용)직접 구현 필요자동 확장주기 작업 관리지원(django-celery-beat)지원하지 않음 (스케줄러 별도로 필요)cron 작업이나 celery 연동 필요지원(EventBridge)확장성워커 수를 조절하여 확장 가능Redis 기반으로 확장 가능확장성 낮음작업량에 따라 자동 확장유지 보수브로커와 워커 관리 필요Scrapy 프로젝트 구조로 통합 관리 용이관리가 간단함함수 단위로 유지보수 필요웹사이트 유형모든 유형정적 및 일부..

프로젝트 2025.01.27

DB설계 전략

1. 캐시 읽기 전략: Look-aside vs Read-throughLook-aside 전략작동 방식:애플리케이션이 먼저 캐시(Redis)에서 데이터를 조회.캐시에 데이터가 없는 경우(PostgreSQL에서 조회) 필요한 데이터를 DB에서 가져오고, 가져온 데이터를 캐시에 저장.이 프로젝트와의 적합성:크롤링된 모든 데이터의 캐싱:이 프로젝트는 챗봇이 크롤링 데이터를 처리한 후 Redis와 PostgreSQL에 모든 데이터를 저장합니다.사용자 요청 시 Redis에서 우선 데이터를 조회하고, 캐시에 없는 경우에만 PostgreSQL에서 데이터를 가져옵니다.효율적인 사용자 요청 처리:사용자 요청 시 캐시를 먼저 조회하여 빠르게 데이터를 제공하며, Redis에서 데이터를 찾지 못할 경우 PostgreSQL을 ..

프로젝트 2025.01.23

도커 실행 시 크롬드라이버와 크롬 버전 불일치

웹 크롤링을 위해 Selenium을 사용하고, ChromeDriverManager를 활용하여 크롬 드라이버를 자동으로 다운로드하여 사용 오류 메시지 selenium.common.exceptions.SessionNotCreatedException 원인chromdriver vesion은 114, google-chrome version은 132크롬 드라이버와 브라우저의 버전 일치는 두 소프트웨어 간의 호환성을 보장하고, 안정적인 자동화 작업을 보장하는 데 필수적이다. 버전 불일치는 예기치 않은 오류를 발생시킬 수 있기 때문에, 이를 해결하기 위해 버전 일치가 중요함 해결둘 다 114 버전으로 통일크롬 114 버전 설치: 구버전 크롬 다운로드 페이지에서 원하는 버전을 직접 다운로드크롬 132는 안정화버전 출시일..

프로젝트 2025.01.22

ResourceExhausted

상황챗봇코드와 cnn 크롤링 코드를 통합하여 크롤링 후 챗봇에 바로 기사를 넘기도록 함 오류 메시지google.api_core.exceptions.ResourceExhausted: 429 Resource has been exhausted (e.g. check quota). 기존챗봇코드class learnChat(): model = genai.GenerativeModel("gemini-1.5-flash") chat = model.start_chat(history=[{'role':'user', 'parts':article.content}]) # fetch Gemini API Key os.environ["GOOGLE_API_KEY"] = getpass("Gemini API Key:")# ..

프로젝트 2025.01.21

소셜계정 연동 시 중복확인 문제

상황: 사용자가 이미 default_social_provider로 등록된 소셜 계정을 연동하려고 하면 에러 메시지가 반환{ "status": "error", "message": "이미 연결된 소셜 계정입니다.", "redirect_url": null}  원인: 소셜 계정 연동 로직에서 중복 계정 확인 시, 해당 계정이 이미 기본 제공자로 설정된 경우를 고려하지 않음 기존코드class LinkSocialAccountView(APIView): permission_classes = [IsAuthenticated] def post(self, request): provider = request.data.get('provider') social_id = reque..

프로젝트 2025.01.20

소셜계정 선택 로직 업데이트

상황: 회원가입 후 default_social_provider는 설정되었지만, connected_social_providers와 is_social_connected 상태가 업데이트되지 않아 사용자가 소셜 계정을 연동했음에도 연결되지 않은 상태로 보이는 문제가 발생 { "is_social_connected": false, "connected_social_providers": [], "default_social_provider": "kakao"} 원인: preferences에서 소셜 계정을 선택해도 connected_social_providers와 is_social_connected 상태를 업데이트하는 로직이 없었음. 기존코드class DashboardCompleteView(APIView):..

프로젝트 2025.01.17

SSL 에러

오류내용ERROR:ssl_client_socket_impl.cc(878)] handshake failed; returned -1, SSL error code 1, net_error -101CNN 사이트를 크롤링하다 보면 위와 같은 오류가 생기면서 기사가 크롤링되지 않는 경우가 생김 SSL/TLS 핸드셰이크 단계에서 실패→ 클라이언트(크롬 드라이버)와 서버(CNN) 간의 인증 과정 중 문제가 발생 예상되는 원인: 과도한 요청 한 번에 많은 요청을 보낼 경우, 서버가 잠시 클라이언트를 차단할 수 있음 CNN에서 비정상적 크롤링을 방지하기 위해 SSL 핸드셰이크를 강제로 실패시킴 기존코드#cnn크롤링def scrape_cnn_news_with_selenium(category_url): options = ..

프로젝트 2025.01.16

크롤링코드 최적화

CNN 언론사 크롤링 자체는 잘 되었으나, 시간이 오래걸리는 문제(참고:NYT api 통해 기사 얻을 때 걸린 시간: 107초,CNN 크롤링 통해 기사 얻을 때 걸린 시간: 1775초 ) 기존코드def scrape_cnn_news_with_selenium(category_url): # Selenium WebDriver 설정 options = webdriver.ChromeOptions() options.headless = False options.add_argument("--disable-gpu") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) t..

프로젝트 2025.01.15

too many request

발생한 문제api로 데이터를 가져올 때 일부 카테고리는 too many reqeust가 뜨면서 데이터가 가져와지지 않음 기존코드@shared_taskdef fetch_and_store_news(news_source="NYTimes"): API_KEY = config("NYT_API_KEY") categories = Category.objects.all() if not categories.exists(): print("No categories found in the database.") return for category in categories: # 언론사별 카테고리 이름 가져오기 source_category = category.ge..

프로젝트 2025.01.14