728x90
이번 포스팅에서는 MongoDB 다중 업데이트 로직을 구현하면서 마주한 성능 개선의 필요성과 이를 풀어나간 방법들을 공유하고자 한다. 사용 환경은 다음과 같다.Spring 2.3.2MongoDB 5.0JDK 1.8.0Kotlin# 최초 기능 개발 - saveAll()해당 업무에서는 상태를 기반으로 Entity를 관리하며 비즈니스 로직을 태우는 프로세스를 구축하는 것이 필요했다.신규로 생성된 데이터들을 PENDING으로, 처리를 진행할 때는 PROGRESS, 처리 다 되면 SUCCESS & FAILED 등으로 관리한다. 그중 처리를 진행할 때 대상들을 일괄적으로 PENDING -> PROGRESS로 변경하는 작업이 필요했는데, 해당 과정에서 여러개의 데이터에 대한 업데이트를 진행했다. 최초 로직은 가장 ..
# 목적 CSS Selector와 XPath의 개념과 사용법을 확인하고, 예시 HTML 문서를 통해 몇가지 요소들을 CSS Selector와 XPath 방식으로 셀렉하는 방법을 정리하고자 한다. # CSS Selector & XPath 개념 # CSS Selector CSS는 HTML과 함께 웹 개발을 시작할 때 접하게 되는데, 웹 페이지를 구성하는 뼈대인 HTML 문서에 스타일을 입히는 언어이다. CSS Selector는 CSS 스타일을 적용하기 위해 특정 HTML 요소를 선택하는 패턴이다. This is an example. This is another example. 위 HTML 문서에서 style 태그 안의 ".example" 부분이 CSS Selector이다. # XPath XPath는 XML ..
한달 전에 초안을 작성했는데, 블로그에 신경을 잘 못쓰느라 이제서야 마무리하고자 한다. # 진행된 요소 일회성으로 제목, 링크, 가격, 배송비, 등록일, 카테고리, 광고유무, 판매자 정보를 한 페이지 크롤링 후 엑셀 파일로 저장 네이버 쇼핑 확장성 있게 크롤링하기 with Selenuim & Excel - 1 # 목적 네이버 쇼핑 사이트의 제품명, 가격 등에 대한 데이터들을 확장성을 갖고 정기적으로 수집이 가능한 Python 실행 프로그램을 구현하기 위함이다. 직접 requests을 사용해 파싱할 HTML 문서를 alive-wong.tistory.com # 진행할 요소 N개의 쿼리명이 저장된 엑셀 파일을 읽어 해당 쿼리에 대한 크롤링 결과물을 반환 충돌이 일어나지 않도록 결과 파일을 저장 쿼리와 함께 크..
# 목적네이버 쇼핑 사이트의 제품명, 가격 등에 대한 데이터들을 확장성을 갖고 정기적으로 수집이 가능한 Python 실행 프로그램을 구현하기 위함이다. 직접 requests을 사용해 파싱할 HTML 문서를 수집하는 방식이 아닌 Selenuim을 사용한다. Selenuim을 선택한 이유는 반응형 & 동적 웹페이지의 데이터를 원할하게 수집하기 위함이다. 추후 로그인을 필요로 하는 수집 사이트도 확장하기 위함이다. 네이버 쇼핑, 다나와의 SRP를 확인하였을 때 URL Query를 통해 페이지 접근이 가능하지만, 페이지 렌더링 시간이 불규칙적인 점과 추후 크롤링의 안정성과 확장성을 위해서 Selenuim을 사용한 크롤링을 진행했다. 최종 목적 아래와 같다.쿼리 명이 담겨 있는 엑셀 파일 명과 함께 프로그램을 동..
# 목적 웹서버와 API 서버에 대한 대상 그룹의 헬스체크를 ALB가 수행하는데, 헬스체크 요청에 대한 로그가 계속 쌓이게 되어서 사용자의 요청 로그를 추적하기 불편한 상황이 발생했다. 정상적인 운영 및 디버깅을 위해서 특정 엔드포인트로의 요청에 대한 로그를 제외시켜야했음. FastAPI와 Nginx에서 특정 엔드포인트에 대한 Health Check 용도의 엔드포인트에 대하여, 로그가 쌓이지 않도록 설정하는 방법을 공유한다. # 상태 확인 웹서버와 API 서버가 배포되어있는 환경과 라우팅 조건은 아래와 같았다. EKS 환경을 사용했고, Ingress를 통하여 L7 LB 구성을 수행했다. 해당 인그레스를 통하여 /* 경로로 접속하는 HTTP 요청은 웹서버로, /api/* 로 접속하는 요청은 API 서버로 ..
from fastapi import FastAPI app = FastAPI(docs_url='/api/docs', openapi_url='/api/openapi.json') 목적 프로젝트를 진행하면서, FastAPI를 EKS 위에서 배포하여 사용하는 서비스 환경을 설계하였다. API Server를 ALB(L7)와 Route53을 통해 /api prefix로 노출시키고 정상적으로 웹서버에서 통신이 가능하게 세팅이 된 후, FastAPI의 편리한 Swagger 기능을 통해 간단한 Web UI를 제공받고자 하였다. Swagger의 기본 URL은 /docs 및 /redoc 인데, 사용하는 도메인 주소에서 API 서버는 /api 를 차지한다. 그렇다 보니, /docs 를 입력하면 당연히 웹서버의 페이지로 라우팅되..