본문 바로가기

프로젝트

(9)
[기록] JWT 로그인 & redis Redis https://redis.com/ Remote Dictionary Server의 약자로, key - value 형식의 데이터를 저장하는 NoSQL DBMS의 일종이다. 메모리 기반으로 동작하기 때문에 속도가 매우 빠르다는 것이 장점이다. 우리가 아는 많은 데이터베이스들은 파일시스템에 데이터를 저장한다. CPU는 메모리에 올라온 데이터만 읽을 수 있으므로 특정 데이터를 요구하려면 파일 시스템 → 메모리 → CPU의 과정을 거쳐야 하는데, redis는 파일 시스템 접근이 없으므로 속도가 매우 빠르다. 파일 시스템 상에 백업하는 기능도 지원한다. 다양한 요구사항을 만족할 수 있도록 여러 가지 자료구조도 기본으로 제공한다. https://redis.com/redis-enterprise/data-str..
[기록, typeorm] ROW NUMBER + 서브쿼리로 대표 댓글 가져오기 ORM이 지원하는 메서드들이 편리하긴 하지만, 쿼리가 조금만 복잡해지면 직접 SQL 문을 작성해야 하는 경우가 많다. 최근 진행되는 팀 프로젝트에서 댓글을 가져오기 위해 TYPEORM이 지원하는 간단한 메서드 수준에서는 처리할 수 없는 동작이 요구되었다. 요구사항은 다음과 같다. 감정 별 대표 댓글 가져오기: 특정 기간(from, to) 내 감정 별로 공감 수가 최대인 댓글 하나씩 가져온다. 요점은 1. 특정 기간 내, 2. 감정 별, 3. 공감 수 최대에 있다. 감정 별로 묶은 후 공감 수에 대한 순위를 따져야 하므로 ROW_NUMBER을 이용해야 하는데, TYPEORM 수준에서 지원되는 기능은 아니므로 querybuilder을 이용하여 SQL문에 가까운 쿼리를 작성할 필요가 있다. 위 요건을 SQL문..
[기록] AWS EC2 / Docker 환경 마련하기 현재 진행 중인 졸업 프로젝트에서 나는 데이터 수집 파이프라인 구축 역할과 API 서버 구축 역할을 맡았다. 이 글에서는 API 서버를 실제 환경에 배포하기 위한 첫 단계로 EC2 + Docker 환경을 마련해 본다. 추가적으로 탄력적 IP에 대해 알게 된 점을 설명한다. 내가 달성하고 싶었던 목표는 다음과 같다. EC2 환경에서 docker을 운영한다. 도메인 명을 기반으로 api 서버에 접근한다. 도메인을 구매하고 실제 환경에 연결한다. 경로에 접근할 때 https을 적용한다. http로 접근하는 경우 https로 redirection한다. 1번과 2번은 과거 프로젝트를 통해 경험해 본 적이 있었다. 다만 당시에는 클라우드에 대해 잘 이해하지 못하고 있던 상태였기 때문에, 다시 되짚어보자는 마음으로 ..
[AWS, 기록] lambda: killed Runtime.ExitError 요약 killed Runtime.ExitError은 lambda 함수에 대한 메모리 할당량 부족으로 인해 발생했을 확률이 높다. 현재 에러가 발생했을 때 로그 상에서 Memory Size 관련 내용을 발견할 수 있다면, lambda 함수에 대한 메모리 할당량을 1.5 ~ 2배 늘려 현재 문제를 해결할 수 있다. 문제 상황 나는 현재 진행 중인 졸업 팀 프로젝트에서 뉴스 기사 데이터 수집 기능과 백엔드 파트를 맡아 개발을 진행하고 있다. 뉴스 기사 데이터 수집 기능의 경우 AWS SQS를 이용하여 작업 범위를 적절한 크기로 쪼개 lambda 함수에서 실행하도록 구현하였고, 여태까지는 잘 동작했다. 그런데, 최근 lambda 함수가 지나치게 여러번 실행되는 현상이 Cloud Watch 로그 상에 나타났다. ..
[기록] lambda, 데이터 수집 중 나타난 429 응답 코드 개요 https://blaxsior-repository.tistory.com/245 [HTTP Status] 429 Too Many Requests https://developer.mozilla.org/ko/docs/Web/HTTP/Status/429 429 Too Many Requests - HTTP | MDN HTTP 429 Too Many Requests 응답 상태 코드는 사용자가 주어진 시간 동안 너무 많은 요청을 보냈음을 나타냅니다("속도 제한"). deve blaxsior-repository.tistory.com HTTP 429 응답 코드는 사용자가 일정 시간 동안 너무 많은 요청을 보냈으므로, 요청 전송을 지연 또는 조절하라는 의미를 담고 있다. Retry-After 헤더를 통해 정확히 얼마..
[기록] EventBridge rule, lambda, 시간대 cron 기반 스케줄링 aws lambda에 cron 스케줄러를 적용하려면 EventBridge 서비스를 이용한다. https://aws.amazon.com/ko/eventbridge/ 서버리스 이벤트 라우터 - Amazon EventBridge - Amazon Web Services Amazon EventBridge 이벤트 버스는 이벤트 수신, 필터링, 변환, 라우팅 및 전송에 도움이 되는 서버리스 이벤트 버스입니다. aws.amazon.com eventbridge는 이벤트 기반으로 애플리케이션을 연결하는 서버리스 서비스로, 버스 · 파이프 · 스케줄러 등의 방법을 통해 AWS의 다양한 애플리케이션을 연동하는데 도움을 준다. 현재 나는 네이버 뉴스 사이트로부터 뉴스 목록을 가져오는 기능을 구현했고, 이..
[기록] ec2, lambda, 서버 구성에 대한 고민 최근 졸업 팀 프로젝트에서 백엔드 서버 구현 역할을 맡고 있다. 내가 맡은 역할은 크게 2가지로 나눌 수 있겠다. nest.js 기반 API 백엔드 구성 cron(스케줄) 기반으로 동작하는 데이터 스크래핑 로직 구현 현재 글에서는 2번 항목에 대한 고민을 기록한다. 이전에 네이버 뉴스 URL 분석 및 댓글 API 분석에 대한 글을 작성한 적이 있다. 뉴스 URL 분석: https://blaxsior-repository.tistory.com/235 댓글 API 분석: https://blaxsior-repository.tistory.com/231 두 가지 분석 결과를 기반으로 키워드에 대한 기사 및 댓글 목록을 가져오는 함수를 작성했다. https://github.com/blaxsior/crawler-pro..
[크롤링] 네이버 뉴스 URL 쿼리 파라미터 현재 키워드를 기반으로 네이버 기사 본문 및 댓글 목록을 가져오는 프로젝트를 진행하고 있어 알게된 점을 정리해둔다. 네이버의 뉴스 검색 탭의 경우 옵션 탭을 통해 여러가지 필터 항목을 제시한다. 해당 옵션 목록을 단순 검색 뿐만이 아니라 크롤링에도 활용할 수 있다면 더 효율이 높아질 것이다. 또한 당연하게도 이러한 옵션들은 크롤링 과정에서도 활용할 수 있다. 위 보이는 옵션들은 url의 query parameter 상에 표현된다.일부 검색 항목을 변경해가면서 검색을 진행하면 어떤 쿼리 값이 옵션과 대응되는지 볼 수 있다. 예를 들어 아래와 같이 검색 옵션을 지정하고 "윤석열"을 검색해보자. 위 옵션에서 발생한 URL은 다음과 같다. https://search.naver.com/search.naver?wh..