ETC

[TroubleShooting] Complete Service Outage

상황 어느날 백엔드 api의 response가 모두 404로 나가는 장애가 보고됨 문제점 모든 api가 정상동작 하지 않으므로 서비스 전체 먹통 내가 생각했던 원인 특정 api 호출시 간헐적으로 무기한 대기에 빠짐 에러 로그에서 A사를 호출하는 rest template 코드를 공통적으로 발견했기 때문 ...

[TroubleShooting] Too many sessions on session stoarge (Redis)

상황 어느날 프론트팀의 배포 이후 서버 로그에서 세션 수가 과도하게 많다는 warnning 발생 문제점 세션 스토리지(Redis)의 메모리 사용량 지속적 증가 내가 생각했던 원인 토큰 발급 및 검증 관련 api가 과도하게 호출되지 않는지 의심 -> 세션 수가 과도하게 많기 때문 원인 검증 모니터링 툴로 확인한 결과 토큰 관련 a...

[IntelliJ] 인텔리제이 핫스왑으로 개발 효율을 높여보자

핫스왑이란? 실행중인 app을 중단하지 않고 수정된 파일만을 compile 하여 reload하는 것 Before use gradle 파일에 org.springframework.boot:spring-boot-devtools 추가 Run/Debug Configuration → Modify options → On 'Update' action ...

[Testing] nGrinder로 Spring Boot WAS의 성능을 테스트해보자

nGrinder naver/ngrinder 설치 및 실행 1 2 3 4 5 docker pull ngrinder/controller docker run -it -v ~/ngrinder-controller:/opt/ngrinder-controller --name controller -p 80:80 -p 16001:16001 -p 12000-1200...

[Server] Server shutdown problem - Django memory leak with scrapy

Finding reasons Add logging system to Django project. → Found Reason 1. Add AWS EC2 instance memory monitor to cloud watch. → Found Reason 2. https://brunch.co.kr/@topasvga/615 Reason 1. 1...

[Scrapy] xpath, css selector 안 먹는 현상 해결 - Dynamic content 크롤링 하기

서론 Scrapy를 사용하다보면 가끔 xpath와 css selector가 제대로 동작하지 않는 현상을 볼 수 있다. 분명 크롬에서 개발자모드를 켜서 가져온 경로는 제대로된 경로가 맞는데, Scrapy에서는 먹히지 않는다. 이는 우리가 크롬에서 보는 화면이 동적 콘텐츠(Dynamic contents)가 포함된 화면이기 때문이다. Dynamic co...

[Scrapy] exceptions.RuntimeError: doWrite called on a twisted.internet.tcp.Port 에러 (포트 할당 문제)

증상 다수의 Scrapy Spider 객체를 동시에 호출하여 사용할 때 발생하는 문제이다. 여기서 동시 호출이라 하면, Celery를 통해 task를 쌓아 두고 실행할 때 동시에 실행되는 task를 두 개 이상으로 하는 경우를 말한다. 이 외에도 멀티프로세스나 여러 Spider를 생성해서 동시에 실행시키는 경우가 있겠다. 내 상황에서는 Celery ...

[Celery] Django 프로젝트에서 Celery Worker 제한하기

서버에서 크롤링 규모를 키우다보니 CPU 자원이 딸리는 것을 느꼈다. 크롤링을 할 때마다 CPU 사용률 100%인 상황이 30분 이상 지속되었다. 때문에 클라이언트 요청도 제 때에 처리하지 못하는 상황이 발생했다. Worker를 제대로 활용하자 나는 지금까지 100개의 사이트를 크롤링 해야 한다면, 하나의 Celery task에 100개 사이트를 ...

[CircleCI] 장고 프로젝트에 Circle CI 적용하기 (feat. Django, docker-compose)

서론 지난번에 Django 프로젝트에 pytest를 붙인 적이 있다 ([Django] pytest를 사용한 장고 테스트 환경 구축). 이를 이용한 지속적 통합(CI) 환경을 구축해 보고자 한다. CI(Continuous Integration)란? CI가 눈에 익지 않다면 이것은 어떤가. CI/CD. 많이 봤을 것이다. CI/CD는 Redhat의 ...

[Scrapy] 스크래피 LinkExtractor 모든 링크 가져오지 못하는 버그 - 중복된 링크 거르지 않고 모두 가져오기

서론 Scrapy를 사용해 크롤링을 하다 보면 링크를 크롤링하는 경우가 많다. 이 때 a태그 안의 href 값이 상대 주소로 되어 있는 경우가 있는데(ex ./mypage/payments) 이를 절대 주소로 바꿔주는 기능이 LinkExtractor이다. LinkExtractor 구조 뜯어보기 LinkExtractor를 사용할 때에는 다음의 경로에...