크롤링을 할 일이 생겼는데, 파이썬 코드로 작성된 파일 여러개를 동시 실행하다보니 t*.micro에서는 원활하게 돌아가지 않고, 버벅거림이 있었다. 최소 small, medium에서 돌려야 깔끔하게 돌아가는걸 확인했다. 이제 금액이 고민이었다. medium 온디멘드로 띄워 놓으면 좋겠지만 한달에 나가는 비용이 만만치 않을 것이다. 그렇다고 크롤링 할 때마다 켰다 끄자니 너무 귀찮은일... 그래서 spot instance를 생성해서 가격적인 측면을 타협하고, 생성/삭제 과정을 terraform으로 관리하고자한다. 기본적인 설치/세팅은 shell script로 관리하고, crontab을 이용해 자동화 시킨다. Terraform 설정 1. aws provider 설정 - IAM 계정 정보는 aws cli로 로..
인프라
그동안 프로젝트를 배포하면서 elastic beanstalk(엘라스틱빈스톡)를 애용해왔는데, 이번에 terraform으로 인프라 생성 과정을 코드화하려고 한다. 공부하다보니 내가 elastic beanstalk을 완벽하게 이해하지 못한 부분이나 놓치고 있는 setting variable들이 있어서 이번 기회에 정리하면서 공부해보고자 한다. Elastic Beanstalk이란? AWS에서는 아래와 같이 설명하고 있다. 'AWS Elastic Beanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go 및 Docker를 사용하여 개발된 웹 애플리케이션 및 서비스를 Apache, Nginx, Passenger 및 IIS와 같은 친숙한 서버에서 손쉽게 배포하고 확장할 수 있는..
테라폼이란? 테라폼(Terraform)은 HashiCorp가 개발한 오픈-소스코드형 IaC이다. HCL(.tf)이라는 선언형 구성 언어나 JSON을 사용하여 infrastructure를 정의하고 제공할 수 있습니다. - https://en.wikipedia.org/wiki/Terraform_(software) Setting 1. AWS IAM 계정 생성, 이때 엑세스키 발급을 같이 해주도록 합니다. 권한은 테스트를 위해서 poweruser 권한을 부여했습니다. 2. 테라폼 설치 (macOS 기준) & AWS CLI 설치 brew install terraform brew install awscli 3. terraform -v로 설치 확인해줍니다. 4. (선택) VSCode terraform Extensio..
원래 갖고 있던 EC2에서 React로 만든 웹을 docker로 호스팅하고 있었다. 근데 새로운 웹을 하나 더 만들고 서브도메인으로 호스팅하고 싶었다. 앞에 Nginx 웹서버에서 들어오는 도메인에 맞춰서 포트를 나눠주면 잘 되지 않을까..?라고 생각했는데 2가지 문제에 부딪혔다. 사실 하나의 문제라고도 볼 수 있는데, 지금 쓰는 서버가 프리티어로 t2.micro라는 점이다. 첫번째로는 CPU가 못버텼다. build한 파일만 올려서 호스팅했으면 좀 달랐으려나 라는 생각이 있긴한데, 사이드 프로젝트에 build만 자동화해서 올리게 붙이기는 오버였고, npm install이나 start, build 과정이 너무 오래걸렸다. 두번째로는 처음에 EBS 용량을 8GB로 작게 설정해뒀더니 용량이 초과하는 이슈도 있었..
서론 현재 개발하고 있는 프로젝트에서 html 형태의 보고서를 만들고, 이메일로 유저에게 전송해야할 일이 생겼다. 기존의 코드에서는 nodejs에서 'nodemailer'를 사용하고, gmail을 통해서 전송하였다. 이때 생기는 문제점이 gmail 이라서 유저에게 신뢰성이 떨어질 수 있고, 별도의 DKIM 인증 등 스팸 메일로 분류되는 것을 피하기 위한 설정을 하지 않았기에 일부 메일이 스팸으로 분류되는 문제가 있었다. ( 물론 nodemailer에서도 이러한 기능을 지원한다 https://nodemailer.com/dkim/ ) 유저 뎁스가 깊어서 많이 사용하지 않던 기능이라 일단은 레거시로 놔두고 있었는데, 이번에 해당 부분을 개편하면서 아예 새로운 방법을 택했다. 현재 서비스에서 사용하고 있는 도메..
왜 쓰게 되었는가? 서비스를 분석하기 위해 유저의 활동 데이터를 수집해야 한다. frontend layer에서 firebase, mixpanel, airbridge 등의 다양한 툴을 붙여서 분석하고 있지만 전체적인 유저의 추세를 보기에는 간편하고, 시각화도 잘 해주지만 유저 한명한명을 타게팅해서 뭐하나 분석하기엔 어려움이 있었다. backend layer에서는 API를 호출할 때마다 로그를 기록하면되니, 로그만 잘 작성해둔다면 유저가 어디에서 머물고, 어떤 버튼을 클릭하고, 어디에서 이탈하는지 분석할 수 있을것이다. 원래는 어떻게 했는가? 원래도 logging 기능은 있었다. import logger from "../../utils/winston"; ... isUserPriorty: async (_, {..
앞서 포스팅에서 했던 방법으로 EB를 통해 호스팅한 서버에서 S3로 이미지를 보내는 와중에 클라이언트(앱)에서 413 에러를 response 받았다. 서버 로그를 찍어보니... nginx 로그에서 에러가 찍혀있었다. [error] 32211#32211: *9131 client intended to send too large body: 6115831 bytes 음... 딱봐도 뭔가 큰걸 보내서 터졌다는 말인듯하다. 한 6MB 정도 되어보이는데(아이폰은 이미지 용량이 크기도 하네...), 가공 없이 보내니까 터졌다. nginx를 뒤적거려보니 파일 전송 limit가 걸려있어서 설정을 바꿔줘야 한다고 했다. 근데 여기서... 늘 ec2에 접속해서 배포할 때마다 설정을 건들여주기엔... 그러면 CD를 하는 의미가..
2, 3일동안 삽질한 결과를 차차 정리해보려한다. 원래 EC2에 codedeploy를 달아서 CI/CD를 하다가, 서버 관리와 CI/CD를 더 편하게 해주는 'Elastic Beanstalk'라는 것이 있다고 해서 사용해봤고, 이 글에서는 정리(찬양)을 해보려 한다. Elastic Beanstalk 란? "AWS Elastic Beanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go 및 Docker를 사용하여 개발된 웹 애플리케이션 및 서비스를 Apache, Nginx, Passenger 및 IIS와 같은 친숙한 서버에서 손쉽게 배포하고 확장할 수 있는 서비스입니다." - 출처 AWS 간단히 말하면 몇몇 자주 이용되는 언어로 개발된 웹 서비스를 쉽게 배포할 수 있게..
지금 하고 있는 프로젝트에서 React-Native 기반의 앱에서 사진을 찍어서 upload 요청을 하면, 받아서 S3에 올리고, 다시 꺼내주는 API를 만들어야했다. 처음에는 REST API 대신, 원래쓰던 GraphQL로 트라이 하다가, 몇번에 실패 후 사진 업로드 모듈만 따로 REST로 때어냈다.(아 아무튼 사진만 업로드 되면 되니까...) 하는김에 AWS 보안 설정도 좀 더 손봐서 추가해본다. 1. AWS IAM 사용자 추가 및 Access Key 발급 AWS 콘솔에 root 유저로 로그인 되어있다는 가정하에, 좌측 상단에서 IAM 검색 -> 사용자 -> 사용자 추가 위와 같이 액세스 키, 암호를 할당, 이후 쭉쭉 다음 눌려서 검토 후 생성 -> 이때 key를 csv로 받을 수 있고, 유저 이름과..