DevOps, Infra
[AWS] AWS SES API를 사용해서 메일 보내기 (feat. NodeJS)
[AWS] AWS SES API를 사용해서 메일 보내기 (feat. NodeJS)
2022.10.09이 글에서 사용하는 것 AWS SDK - AWS SES API NestJS 시작하기 전에 AWS SES는 두 가지 방법으로 사용할 수 있습니다. SMTP 인터페이스를 사용하거나 SES API를 사용해야 합니다. 저는 NestJS 애플리케이션 상에서 메일을 보내고 싶었습니다. 이 글에서는 API 방식을 설명해보겠습니닷. API를 사용한다면 크게 3가지 방식으로 메일을 보낼 수 있습니다. 1. Simple SES 객체의 Simple Email 보내는 함수 sendEmail(args: SendEmailCommandInput, options?: __HttpHandlerOptions): Promise; sendEmail(args: SendEmailCommandInput, cb: (err: any, data?: S..
[AWS] VPC의 NAT 비용을 줄여보자 :: Ubuntu로 NAT 인스턴스 만들기
[AWS] VPC의 NAT 비용을 줄여보자 :: Ubuntu로 NAT 인스턴스 만들기
2022.09.25두 배가 되어버린 AWS 비용.. 1달 전에는 테스트용으로 그냥 Public IP로 다 통신하도록 하고 최저 사양으로 다 올렸었다. 하지만 보안이나 비용적인 측면, 나중에 할 부하 테스트를 생각해서 Amazon EC2 리소스가 인터넷에 노출되는 방식을 제어하기 위해 싹다 갈아엎었다. 이 글(https://coding-groot.tistory.com/165)처럼 VPC를 구성해서 AWS 리소스를 재배치했다. 글 요약 VPC를 구성해서 Private, Public Subnet을 만들었다. 외부 인터넷에 노출되지 않아도 되는 인스턴스들은 Public IP를 할당하지도 않았고 Private Subnet으로 격리시켜서 Internet Gateway와의 직접적인 접점을 없앴다. Private Subnet에 있는 친..
[AWS] S3를 통해 정적인 Asset 호스팅하기
[AWS] S3를 통해 정적인 Asset 호스팅하기
2022.08.22S3를 사용해서 정적인 Asset을 호스팅해보자 S3는 99.99%의 가용성을 제공해줍니다. 단순히 Asset을 업로드하는 용도로 쓸 수도 있고 웹사이트를 호스팅할 수도 있고 다양한 용도로 사용할 수 있습니다. Storage 요금(요청 요금은 별도)은 1TB 당 25달러 정도라 저렴합니다. 이번 글에서는 S3를 통해 정적인 Asset을 배포해봅시다. 다음 글에서는 AWS의 CDN 서비스인 CloudFront랑 S3 bucket을 연동해서 CloudFront로 배포되도록 설정하는 것을 적어보겠습니다. 주의 이미지, 폰트처럼 변하지 않는 정적 Asset 배포용 방법입니다. 개발하면서 변하는 마크업 파일이나 정적 사이트 호스팅은 조금 다른 설정을 가져가셔야 합니다. 준비물 S3와 CloudFront의 권한을 ..
[AWS] VPC에 Subnet, NAT Gateway, Internet Gateway를 구성해보자
[AWS] VPC에 Subnet, NAT Gateway, Internet Gateway를 구성해보자
2022.08.07오늘은 다음과 같은 구조로 VPC를 구성해보려고 합니다. Region 확인 먼저 Region이 Asia Pacific(Seoul)인지 잘 확인해줍니다. 언제 US East (N. Virginia)로 변할지 모르니 항상 어떤 자원을 생성하기 전에 먼저 체크합니다. VPC 서비스 창으로 접속 VPC 서비스를 검색해서 접속합니다. 현재 저는 default로 생성해주는 VPC 하나만 있습니다. VPC를 생성합니다 VPC 생성(Create VPC) 버튼을 눌러줍니다. VPC 설정하기 VPC Settings은 다음과 같이 했습니다. 첫 번째로 VPC만 만들 것인지 VPC 말고도 다른 것을 한꺼번에 설정한 것인지 묻습니다. 귀찮기 때문에 여기서 다 설정해주도록 하겠습니다. VPC and more를 클릭해줍니다. 그리..
[AWS] NestJS 프로젝트를 Code Pipeline을 사용해서 Elastic Beanstalk으로 배포하는 법
[AWS] NestJS 프로젝트를 Code Pipeline을 사용해서 Elastic Beanstalk으로 배포하는 법
2022.07.22Elastic Beanstalk을 사용하면 빌드한 JS 코드를 업로드해서 간단하게 배포할 수 있습니다. 하지만 매번 빌드해서 올리는 것은 비효율적이고 귀찮습니다. 매번 push할 때마다 알아서 빌드하고 올려준다면 어떨까요? 이런식으로 GitHub의 코드로 자동 배포하는 것은 여러가지 방법으로 가능합니다. GitHub Actions로도 여러 방법으로 할 수 있습니다. 푸쉬할 때 마다 GitHub Actions를 통해 빌드하고 그 파일을 업로드해서 배포를 할 수 있습니다. Ex. https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/eb3-cli-git.html 푸쉬할 때 마다 Actions 상에서 소스코드를 그냥 S3에 업로드하고 빌드해주는 애(Cod..
수평적 확장(Scale-Out)과 수직적 확장(Scale-Up)
수평적 확장(Scale-Out)과 수직적 확장(Scale-Up)
2022.07.18이용자가 증가하거나 서비스를 확장시키는 등 다양한 이유로 서버를 확장해야 될 때가 있다. 서버를 확장 시키는데에는 크게 두 가지의 방법이 있다. 수평적 확장(Scale-Out) 수직적 확장(Scale-Up) 클라우드 서비스에서는 수직적 확장(Scale-Up)보다는 수평적 확장(Scale-Out)을 자주한다. 이것을 위해 Stateless하게 설계를 하라~~ 등등 많이 듣게 될 것인데 이 두가지 방법에 대해 간단히 정리해보겠다. 수평적 확장(다른 말로, Scale-Out) 수평적 확장은 아래의 그림과 같이 서버를 여러대를 추가해서 옆으로 확장시킨다고 생각하면 된다. 서버의 자체적인 스펙을 업그레이드 시키는 것이 아니라 여러대의 서버 갯수를 늘리는 방법이다. 이렇게 똑같은 역할을 인스턴스를 늘리면 기존에 잘..
Mac 전용 CLI 명령어
Mac 전용 CLI 명령어
2022.07.17최근 Mac용 명령어와 스크립트를 모아놓은 흥미로운 저장소(하단의 출처에 남겼다)를 발견했다. 거기서 발견한 유용하다고 생각되는 명령어 몇 개를 남겨본다ㅎㅎ. 네트워크 특정 포트를 쓰고 있는 애플리케이션 출력 리눅스에서는 fuser -vn tcp 8080 이런식으로 많이 썼는데 맥에서는 lsof가 있었다! sudo lsof -i :8080 Network Interface 보기 scutil --nwi Public IP 출력 이건 다른 컴퓨터에서도 자주 쓰는 방법이긴 하다. DNS를 이용해서 빠르게 가져오는 법 참고 # open dns dig +short myip.opendns.com @resolver1.opendns.com # google dns dig @ns1.google.com TXT o-o.myadd..
APM을 사용하는 이유
APM을 사용하는 이유
2022.07.17APM(Application Performance Monitoring)이란? 간단하게 말해서 내 애플리케이션의 성능을 추적하기 위해 모니터링할 수 있도록 해주는 도구를 말한다. APM을 쓰면 프론트엔드나 백엔드나 인프라(ex. 데이터베이스)의 성능을 계속 추적하면서 확인할 수 있다. 트랜젝션이 갑자기 느려지거나 실패했을 때, APM을 사용하고 있었다면, 아주 빠르게 데이터를 보면서 어디서 문제가 왜 발생했는지 알 수 있게 도와준다. 정확한 정의가 헷갈려서 찾아보니 '성능'과 관련된 기능을 갖추면 APM 툴이라고 그냥 부르는 것 같다. 네트워크 성능을 분석해주는 APM도 있고 Code 수준에서 분석해주는 APM(ex. New Relic)도 있다. 나는 이번에 코드 수준까지 Deep하게 Tracking하면서..
[AWS] Certificate Manager에서 발급 받은 인증서 로드밸런서에 붙이기
[AWS] Certificate Manager에서 발급 받은 인증서 로드밸런서에 붙이기
2022.07.09저번 글([AWS] Certificate Manager를 사용해서 인증서 생성하는 법)에서는 인증서를 AWS 내에서 발급 받았다. 사실 AWS는 정말 여러 곳에서 인증서를 붙일 수 있는데 이번 글에서는 로드 밸런서에서 붙이는 법에 대해서 알아보도록 하자. 준비물 서버 EC2 인스턴스 AWS 내에서 발급된 인증서 로드밸런서에서 인증서 붙이는 법 1. EC2 Load Balancers에서 Create Load Balancer 클릭 EC2로 이동해서 Load Balancing의 Load Balancers로 들어온다 2. Application Load Balancer를 선택한다. 설명을 읽으면 대략 어떤 로드밸런서를 쓸지 알 수 있다. 사진에도 명확하게 표시되어 있다. 나에게는 HTTP, HTTPS가 그려진 A..
[AWS] Certificate Manager를 사용해서 인증서 생성하는 법
[AWS] Certificate Manager를 사용해서 인증서 생성하는 법
2022.07.08AWS 내에서 도메인도 사고 인증서를 생성하면 CloudFront, Elastic LoadBalancing, API Gateway 등에 쉽게 붙여서 쓸 수 있다는 장점이 있다. AWS Certificate Manager에서 인증서를 생성해보자! a.mysite.com, b.mysite.com, ... 인증서는 위와 같은 여러개의 도메인에 대해 발급하고자하면 각각 신청해야 한다. 준비물 도메인 (없다면 Route53에서 구매하자!) AWS 설정을 영어로 바꿔주자 제가 영어 설정을 쓰기 때문에 한국어면 혼란스러울 수 있다. 요금 https://aws.amazon.com/ko/certificate-manager/pricing Certificate Manager를 사용해서 인증서 생성하는 법 1. Route53..
Mac에서 code 명령어가 작동 안 할 때 해결법
Mac에서 code 명령어가 작동 안 할 때 해결법
2022.06.26터미널에서 "code {디렉터리명}"을 쓰면 그 디렉터리를 작업공간으로 열어준다. 종종 Visual Studio Code를 잘 깔아서 code명령어로 잘 쓰고 있는데 갑자기 code 명령어가 안 먹을 때가 있다. 그때의 해결법을 공유해보고자 한다. 발생한 오류는 다음과 같다. $ code . zsh: command not found: code Visual Studio Code 깔려있는데 왜 안돼? 이럴 때마다 code 명령어가 일상이 된 사용자로서 매우 답답하다. command not found: code 해결법 1. Visual Studio Code를 실행한다. 2. Command Palatte를 연다. (단축키: CMD + SHIFT + P) 3. Palette에서 "shell command" 입력 ..
M1에서 Rosetta로 Node 사용하기
M1에서 Rosetta로 Node 사용하기
2022.06.22인텔에서 잘 되는게 M1에서 돌리니 갑자기 에러를 뿜으면서 동작 안했습니다. 이럴 때는 rosetta를 이용해서 Intel로 돌리면 됩니다. 제가 Node 14를 사용하고 싶은데 Node 14버전은 M1을 지원하지 않습니다. 이럴 때 쓸 수 있는 방법입니다. 한번 터미널을 rosetta를 사용해서 arm64가 아닌 intel로 아키텍처로 쉘을 실행해서 Node 14를 사용해보겠습니다. 준비물 애플 실리콘(M1) 맥 nvm 만약에 nvm을 사용하고 있지 않다면 먼저 깔아주세요! (brew install nvm) (iTerm) 굳이 iTerm이 아니더라도 상관없긴 합니다! 다른 터미널 앱에서 똑같이 해도 됩니당. Rosetta로 Node 실행하는 법 1. 현재 쉘의 아키텍처 확인하기 아래의 명령어는 현재 기..