서버 인프라 42

Grafana 에서 graphql을 통해 데이터 받아와서 그래프 그리기

우리 회사에서 예전부터 유저들의 동향을 그래프로 표시하고 싶다는 욕심이 있긴 했다. 그럴 때마다 Firebase 쓰세요~ 라고 했지만 뭔가 자세한 로그가 보고 싶다고 한다. 그래서 이것저것 알아봤더니 모니터링 프로그램은 Grafana가 제일 좋아 보여서 Grafana를 쓰기로 했다. 하지만 data source는 뭐로 쓸까 고민을 했다. 찾아 보니 prometeus라는 프로그램이랑 grafana와 궁합이 제일 잘 맞아 보였다. 서버에서 생긴 로그들을 다 prometeus로 몰아넣고 grafana에서 가져와 쓰면 되는 듯 했다. 하지만 우리 서버는 예전에 있던 로그들도 사용해야 해서 고민하다가 결국 기존에 사용중인 graphql을 grafana에서 사용해 보기로 했다. 구상과 제작 기본적인 구상은 다음과 ..

Postgresql DB의 인덱싱 알고리즘

Postgresql db를 사용하면서 다수의 row를 가진 데이터들을 다룰 때 양이 많아질수록 쿼리 시간이 길어지는 것이 보였다. 이를 개선하기 위해 여러가지 기법을 찾던 중, db의 인덱싱 알고리즘에 따라서 특정한 데이터들은 성능이 빨라진다는 것을 알게 되었다. 이에 대한 지식이 부족한 것 같아 간단히 정리했다. 알고리즘 종류의 필요성 현재 사용되는 db 서비스들은 대부분 기본값으로 b-tree 인덱싱을 사용하고 있다. 보편적으로 많이 사용되고 성능 또한 어느정도 검증이 되어 있어 이를 기반으로 구조가 이루어져 있다. 하지만 이것이 만능 인덱싱 알고리즘은 아닐 뿐더러 항상 특수한 경우가 생기기 마련이다. 이를 위해서 postgres 에서는 21년 현재 6개(사실상 5개)의 알고리즘을 지원하고 있다. 지..

서버 인프라/DB 2021.12.26

DockerHub 와 Github 연동하여 자동으로 이미지 만들기

배포 자동화는 계속 발전하고 있다. 개발자들이 개발에 집중할 수 있게 함으로서 생산성을 올리게 되는 선순환으로 이어지게 된다. 내가 현재 사용하는 개발환경은 nodejs 환경이며, 도커 컨테이너에 담아서 쉽게 deploy 할 수 있게 하고 있다. 최근에 도커에 대한 공부를 하면서 기존의 배포 환경을 한번 더 정리하는 식으로 정리해 둘려고 한다. 참고로 내가 하는 방법은 현재 "유료" 이다. (1년에 60달러를 결제하면 Pro 계정 사용이 가능하다.) DockerHub 에서 Github 코드 depoly 하기 먼저 dockerhub 사이트에서 github 계정이랑 연동한다. 나의 경우에는 Github 계정과 연동을 시켜 두었다. 그 다음으로는 Repository를 만들고 간단한 설정을 한다. 1. 도커 허..

Grafana에 AWS Cloudwatch 연동하기

AWS의 서비스를 이용하면서 다양한 데이터를 모니터링할 수 있다. 하지만 AWS 콘솔에 로그인하지 않고 데이터만 볼 수 있는 Grafana 라는 툴이 있다. 그라파나를 이용해서 AWS의 데이터를 모니터링해보자. AWS 준비 1. IAM 계정을 준비한다. 왜냐하면 그라파나에서 인증을 할 때 IAM 자격 증명이 필요하기 때문이다. IAM 자격 증명에 필요한 엑세스 키도 미리 만들어 준비한다. 2. 확인하고자 하는 모든 인스턴스들의 IAM 역할을 수정해야 한다. Grafana 시작하기 그라파나를 시작할 때 해당 사이트에서 받아서 실행했다. 운영체제에 맞게 다운받은 후, bin 폴더 안에서 그라파나 서버를 실행한다. 나의 경우에는 맥os에 개인 사용자에 맞게 아래의 링크에서 다운받았다. 서버는 localhost..

AWS EC2 서버에 도메인 적용과 SSL 인증서 적용하기

최근에 http로 서버를 열었다가 낭패를 본 경험이 있었다. 그래서 이것을 해결하기 위해서 SSL 인증서를 도입함과 동시에 공부도 할 겸 도메인 적용까지 하기로 했다. 이걸 하겠다고 이틀동안 별 짓을 다 했던것 같다. 그래도 결과는 나름 잘 나온다고 생각한다. 최종 결과 1. SSL 인증서가 적용되어 주소창 왼쪽에 자물쇠 아이콘이 뜬다. 2. http 로 접속해도 https로 접속이 가능하다. 3. 포트 번호 및 아이피 주소가 포함된 주소가 아닌 도메인 주소로 표기된다. 도메인 구매 먼저, 도메인을 구매해야 한다. 여기서 도메인이란, 주소를 의미한다. 예를들어 naver.com 또는 google.com 같은 주소를 말한다. 도메인 주소를 구매할 수 있는 곳은 여러곳이 있다. 국내 기준으로 보면 호스팅kr..

EC2 인스턴스 안에 있는 파일 로컬에 다운받기

ec2를 사용하면서 로그 파일을 로컬에 불러와야 하는 경우가 생겼다. 이 때는 ec2 인스턴스에서 파일을 로컬로 다운받아야 하는데, 마땅한 방법이 생각나지 않았는데 검색을 하다 보니 scp 명령어가 있었다. ssh를 이용한 파일 주고받기 원격 인스턴스에 접속하기 위해서는 ssh를 이용하는 방법이 있다. 원격 인스턴스의 터미널 화면을 보여주는 것이다. 여기에 파일을 주고받을 수 있는 기능까지 있으면 얼마나 좋을까? 찾아보니 다행이 존재했다. scp (secure copy protocol)을 이용하는 것이다. 내가 찾은 이용 방법은 맥 또는 리눅스 쉘에서 사용 가능한 방법이다. 윈도우의 경우에는 scp를 지원하는 프로그램을 설치해서 사용해야 한다. 파일을 다운받거나 업로드 하기전에 파일의 권한은 777을 주..

RDS 접속 시 ec2 인스턴스 통해서 접속하기

현재 작업중인 서버는 postgresql을 RDS에 올려서 사용하고 있다. 현재 이 서버는 어디서든 접속이 가능한 상태이다. 이러한 상태가 되면 보안에 매우 취약해진다. 그래서 db를 사용할 때는 외부에서 바로 접속이 불가능하게 해 두는것이 보안상 좋다. RDS 를 외부에 노출 시키지 않는 이유 가장 큰 문제는 역시 보안이다. db는 모든 정보들이 담겨져 있는 공간인데, 이것이 외부 네트워크에 노출이 되어 있으면 보안에 상당히 취약할 것이다. 어디서든 바로 접속할 수 있다는 단점이 있다. 그래서 VPC안에 있는 ec2를 통해서만 접속할 수 있게 한다. 또한 애플리케이션 서버 또한 안전하게 rds에 접속할 수 있다는 장점이 있다. 이러한 설정을 하게 되면 기존의 경우에는 db의 암호, 유저만 알면 쉽게 접..

EC2 리눅스 인스턴스 포트포워딩 하기

현재 내 인스턴스에는 nestjs 기반의 어플리케이션이 구동중이다. 현재 5000번 포트로 구동중인데, 이 서버에 접속하기 위해서는 [서버 주소]:5000 의 형식으로 서버에 접속해야 한다. 웹 서버는 이름이 단순해야 보기 좋은데, 포트 뒤에 5000을 붙여버리면 약간 보기 불편해 진다. 그래서 이 주소를 없애는 작업을 하기로 했다. 모든 가능성을 생각하자! 사실 처음에는 기존의 도메인이 있어서 route53을 통해서 Elastic IP 값을 수동으로 넣어 주었다. 하지만 여기서는 포트 번호를 넣을 수 없었다. 그래서 생각해낸 게 80번 포트를 5000번으로 돌려서 사용할 수 있으면 좋겠다고 생각했다. 그래서 검색을 해서 포트포워딩이 가능한 iptables를 사용하기로 했다. 1 iptables -A P..

Docker 기본 개념

Docker는 가상 운영 체제 환경을 만들어주는 매우 편리한 프로그램이다. 마치 VirtualBox 같은 개념이라고 생각할 수도 있으나, 약간은 다른 개념이다. 개인 공부하는 겸 필요한 기능만 정리해 볼려고 한다. Docker는 각 운영체제에 맞는 버전이 따로 있다. 커널과 관련된 곳까지 관여하는 프로그램이라서 맥의 경우에는 M1 칩셋과 Intel 칩셋을 따로 구분한다. 아직까지 M1 버전은 완벽하게 지원하지 않는다고 한다. 언젠간 완벽하게 지원해 주겠지 뭐. Docker 의 기본 개념 Docker를 사용하는 이유는 간단하다. 특정한 개발 환경에서만 실행되는 애플리케이션을 실제 릴리즈 환경에 올리려고 할 때, 지금까지 했던 설정들을 같이 올려야 한다. 이 때 자신이 설정한 환경들을 수동으로 일일이 세팅하..

AWS S3 파일 전체(일괄) 다운로드 받기

아마존 웹 서비스에는 정말 다양한 서비스들이 있다. 그 중 하나가 s3라는 서비스이다. 간단히 말하면 구글 드라이브 같은 웹서버 운영에 필요한 사진, 동영상 등의 파일들을 저장해 두는 서비스이다. 오늘 이 파일을 일괄 다운로드 할 일이 생겼다. 하지만 aws 홈페이지에서는 객체 하나하나 일일이 다운하는 방법 밖에는 없었다. 이는 s3 구조에 따른 것 같다. 각 파일은 전세계에서 고유한 url 주소를 가지며, 각 폴더의 위치는 prefix처럼 태그 비슷하게 달려 있다. 여튼 파일을 일괄 (전체) 다운로드 하기 위해서는 aws command line (aws cli) 사용이 필요했다. Mac 기준으로 s3 파일 다운로드 방법을 정리해 보았다. aws cli 설치 aws cli을 먼저 설치해야 한다. 다음의 ..