Download 프로젝트 정보 사용 언어 : [앱/클라이언트] React Native / [웹서버] Ruby on Rails 5.2.3 / [크롤링/AWS Lambda Serverless] Ruby on Jets 2.3.12 기술스택 : Ruby on Rails, Ruby on Jets, AWS EC2, AWS Lambda, Selenium, Scheduler, JWT, One Signal, Rest API [Github] REST API 웹서버 / AWS Lambda Framework 서론 새로운 사이드 프로젝트에 합류하여 요 근래 만들어내고 있는 서비스입니다! 해당 서비스는 캐치딜 서비스로서, 다양한 플랫폼에 퍼져있는 정보를 하나로 모아내어 사용자에게 핫딜 제품을 추천해주는 서비스 입니다! 저희는 이..
git add . git add 명령어는 git에 저장되어 있는 HEAD의 위치에서 데이터가 수정되었거나, 새로 생겨난게 있을 시, 해당 순간에 대해 스냅샷을 찍어내는 역할입니다. 하지만 이러한 과정에 있어 실수 사례를 하나 제시해보겠습니다. 원래 위의 노란색으로 표시된 부분의 파일은 git add 리스트에 올라가선 안됩니다. 하지만 제가 실수로 위 2개의 파일에 대해서도 git add 리스트에 올리고 맙니다. 이런 경우엔 add로 올려진 파일에 대해 취소를 해야 합니다. 1. 시작 전, 원래 git add에 대해 취소를 하는 명령어는 다음 명령어로 해야 합니다, git reset HEAD file1_path file2_path ... 하지만 위 명령어는 너무 길다보니 입력하기 귀찮고, 이후에도 단어가 ..
데이터베이스를 다룸에 있어, 때로는 2개 이상의 테이블을 하나로 합친 후, 공통된 데이터에 대해 빠른 탐색 처리를 해야할 필요가 있습니다. 이번 설명은 상황을 하나 제시하여 설명을 하겠습니다. 상황 예를들어 아래와 같은 테이블 설계가 되어있다고 치겠습니다. hit_products 모든 특가 상품 데이터 book_marks 유저(user)가 어떤 특가 상품(hit_products)에 대해 북마크를 했는지에 대한 데이터 keyword_pushalarm_list 유저(user)가 등록한 키워드를 기반으로 받은 핫딜 정보에 대한 푸쉬알람 1. 개발자는 hit_product 테이블 내 데이터 중, 현재(2020년 1월 31일)를 기준으로 하여 작성된지 30일이 지난 데이터를 자동으로 삭제하는 코드를 구현하려 합니..
Jets에서 환경변수 설정에 있어 Figaro Gem과 연동해서 쓰려 할 경우 이상하게 Jets에서는 Figaro Gem을 제대로 설치했음에도 불구하고 인식을 못합니다. 하지만 다행스럽게도 Jets에는 기본적으로 환경변수를 지원을 합니다. 이번 시간에서는 Jets에서 기본적으로 지원하는 기능을 통해 환경변수를 등록하는 법에 대해 알아보겠습니다. 환경변수 개념 환경변수는 쉽게 말하면 "치환" 입니다. 만약 코드 내 중요한 정보에 있어 숨겨야할 경우 정보의 표현을 치환을 통해 은닉처리할 때 많이 쓰입니다. 예를들어, Jets 내 데이터베이스를 설정하는 database.yml 파일을 살펴보겠습니다. ## config/database.yml default: &default adapter: postgresql e..
Ruby on Jets로 배포된 모든 AWS Lambda 함수에 있어 공통적으로 계층(Layer)이 붙습니다. 그리고 이 계층들을 보면 공통적으로 하나의 파일을 가리키고 있습니다. 바로 Ruby on Jets에서 라이브러리 패키지로서 쓰이는 Gem입니다. Gem 같은 경우는 Jets(Rails) 프로젝트를 돌리는데에 있어 근본이자, 핵심입니다. Gem 없이는 일부 백엔드적 기능에 있어선 먹통이 발생될 수 있는 상황입니다. 즉, 계층(Layer)은 모든 Lambda 함수에 있어 공통적으로 필요한 패키지 파일을 언제든 재활용해서 쓸 수 있도록 하는 기능이라고 보면 됩니다. AWS 계층(Layer)의 시작 AWS 계층(Layer)은 2018년 말 AWS Re:Invent에서 발표된 기술입니다. 본래 AWS L..
사실 크롤링은 꼭 AWS Lambda가 아니더라도 AWS EC2 등 환경에서도 Rails를 통해 작업을 해낼 수 있습니다. 하지만 이번에 개인적인 프로젝트를 하면서 EC2서버에 크롤링을 돌리기에는 높은 스펙의 서버가 필요하고, 서버 유지 비용도 만만치 않을것이라고 여겨졌습니다. 그렇게 눈을 돌리게 된 것이 AWS Lamabda 였습니다. AWS Lamabda 환경에서 Selenium 크롤링이 이루어지게 하는 법에 대해 다뤄보겠습니다. (시작 전) Why AWS Lambda than EC2 ? 1. 서버비용 AWS EC2에서 크롤링을 돌리기 위해선 24시간 서버를 켜놔야 합니다. 하지만 시간=돈 입니다. 반면에 AWS Lambda 같은 경우는 일단 프리티어가 아니더라도 100만번 작업 내에서는 Lambda..
프로젝트를 진행함에 있어 과거에 진행했던 AWS Lambda 프로젝트를 정리해야 할 때가 있습니다. 하지만 단순히 AWS 서비스 사용 활용에 있어, Lambda만 있으면 좋겠는데 게이트웨이, Cloud Watch 등 다양한 서비스랑 연계되어 있다보니 섣불리 AWS Lambda와 관련된 서비스를 일일이 찾아내어 해지를 해내는 것도 어렵습니다. 하지만 Ruby on Jets에서는 이를 깔끔하게 해결해주는 명령어가 있습니다. 참고 AWS에 배포된 자료들만 삭제되지, Cloud9에 있는 Ruby on Jets 프로젝트는 삭제가 안됩니다. Jets Project 삭제하기 1. Cloud9에 아래 명령어를 입력해서 AWS에 올려져 있는 Ruby on Jets 관련 프로젝트를 날립니다. 저는 Production 상태..
AWS Lambda에서 스케쥴링 방식으로 자동으로 작업이 이루어지도록 해보겠습니다. Job 생성 1. Active Job 하나를 생성해보겠습니다. # jets g job [NAME] jets g job crawl 그럼 app/jobs/ 위치에 crawl_job.rb 파일이 생성된게 확인됩니다. 참고 이름을 잘못 지었을 경우, 다음 명령어를 통해 삭제하세요. # jets degenerate job [NAME] jets degenerate job crawl 2. app/jobs/crawl_job.rb 파일을 열람 시, 다음과 같은 내용으로 되어있습니다. class CrawlJob < ApplicationJob rate "10 hours" def dig puts "done digging" end end rat..