아키텍처의 변화
아키텍처의 변화로 데이터베이스가 가벼워지고 더욱 개발에 집중할 수 있는 환경이 됨.
RDBMS vs NoSql
RDBMS
관계형 데이터베이스 관리 시스템 (Relational DataBase Management System)
- 거의 모든 서비스의 메인 데이터베이스
- 엑셀과 같은 표의 형태로 데이터 저장, 정형화된 데이터
- 테이블의 컬럼이 고정되어 있어 데이터 컬럼 수정 어려움
- 테이블끼리 연결 가능(Oracle, Mysql, Mssql 등)
NoSql (Non-relational)
- Json 형태로 데이터 저장(RDBMS의 테이블과 비슷한 도큐먼트라는 곳에 저장)
- 도큐먼트는 컬럼이 고정되지 않기 때문에 변경 용이. 비정형화된 데이터 저장하는 용도
AWS
프론트 | 백엔드 | 데이터베이스 |
---|
S3 | EC2 | RDS |
IAM | ELB | ElastiCache |
Cloudfront | Elastic Beanstalk | ElasticSearch Service |
RDS (Realational Database Service)
AWS에서 관리되는 관계형 데이터베이스 서비스
직접 운영하기 까다로운 RDBMS를 관리해줌
RDS가 MySql을 관리해줌.
생성
- 표준생성, MySql(버전확인), 프리티어
- 이름, 암호설정, db.t2.micro
- 퍼블릭 액세스 기능(예), VPC 보안그룹(새로 생성)
- 엔드포인트 url이 중요!
사용
- DB를 설치하고 조회하고 수정하는게 사용하는 것(설치, 조회, 수정)
- 파이참 - 오른쪽 Database - Mysql 추가 - 테스트 후 생성
(내 컴퓨터에서 AWS의 RDS에 접속 가능하게 됨.)
- Schema 추가 : 한글 사용가능 코드 추가
- Table 추가 : 파일 만들어 관리할 수 있음
- Query 실행
- 보안 그룹 소스 : 소스 범위에 있는 IP만 3306 포트로 접속이 가능
<스키마에 한글 사용코드 추가>
<테이블 추가, 파일 이름 형식>
<쿼리 실행문>
RDS, Python 연동
- RDS 보안 그룹에 아이피 0.0.0.0/0 추가(러프하게 사용하기 위해)
- 백엔드 application.py 코드 추가, 프론트 index.html 코드 추가
- 백엔드에 라이브러리 추가
(pip install install flask-mysql , 로컬)
(pip freeze > requirements.txt , EB 배포용)
- EB에 환경변수에 4가지 추가
- commit and push, cloudfront 주소로 확인
python 연동 코드
Redis(Remote Dictionary Server)
- 인메모리 DB
- RDB가 파일에 데이터를 저장하는 것에 비해 Redis는 메모리에 데이터를 저장하기 때문에 속도 빠름
(RDB의 부하를 덜어주기 위해 Redis를 사용)
- "키-값"구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)
ElasticCache
RDS가 MySql을 관리하는 것처럼
ElasticCache는 Redis를 매니지드해줌.
클러스터 생성
- 보안그룹을 먼저 만들고 생성.(vpc 안에 보안 그룹, 포트 번호 6379)
- 레디스, 아마존 클라우드
- 이름, 포트, 노드, 다중AZ(x)
- 설정해놓은 보안 그룹 설정
ElasticCache 연동
RDS와 달리 외부에서 접속 불가능
내 컴퓨터가 아닌 배포를 해서 같은 VPC내의 인스턴스에서 확인해야 함.
- 백엔드 application.py 코드 추가, 프론트 index.html 코드 추가
- 백엔드에 라이브러리 추가
(pip install redis , 로컬)
(pip freeze > requirements.txt , EB 배포용)
- EB 환경변수에 REDIS_HOST 추가
- commit and push, cloudfront 주소로 확인
python 연동 코드
ElasticSearch
검색엔진 오픈소스
이전에는 검색엔진만으로 사용하였지만 아키텍처의 변화와 분산환경에서 로그의 중요성이 부각되면서 로그를 데이터화하는 ELK 스택을 발전
- 예전에는 로그를 파일에 쌓아 데이터 분석, 수집, 검색 등 어려움(하드디스크나 나스에 보관)
- Kibana와 같은 다양한 분석도구들이 등장
- ELK : 로그 중앙화
- Application -> 로그를 logstash -> ElasticSearch -> Kibana
ElasticSearch Service(OpenSearch service)
ElasticSearch를 쉽게 사용하게 해줌
(위의 RDS, Redis와 같은 형태)
생성
- 개발 및 테스트, 최신 OpenSearch service
- 인스턴스 유형 : t3.small
- 액세스 정책 : 도메인에 대한 개방 액세스 허용
- 엔드포인트 : Elasticsearch에 데이터를 저장, 조회 할때 사용하는 URL
- Kibana : 분석된 로그 데이터를 시각적으로 보여주는 페이지
logstash 설치
sudo apt-get update # 패키지 업데이트
sudo apt-get install openjdk-8-jdk # 설치
# 다운로드
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# 패키지 설치
sudo apt-get install apt-transport-https
# 패키지 리파지토리 추가
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
# 패키지 업데이트 & 설치
sudo apt-get update && sudo apt-get install logstash
# 설정파일 생성
sudo vi /etc/logstash/conf.d/logstash-python.conf
# 설정파일
input { # 로그를 logstash로
tcp {
port => 5044
}
}
output { # logstash에서 ElasticSearch로
elasticsearch {
hosts => ["https://search-elasticsearch-sparta-tedvy7ev365r74opwxg2eumxn4.ap-northeast-2.es.amazonaws.com:443"]
index => "flask-logs-%{+YYYY.MM.dd}"
user => "admin"
password => "Aa12345!"
ssl => true
ilm_enabled => false
}
}
# 실행
sudo systemctl start logstash.service
# 실행 확인
netstat -tnlp
# 명령모드에서 i: insert 모드(키 입력) , esc : delete 모드(x로 지우기)
# :wq 로 저장 후 나가기
vi 명령어 참고
ElasticSearch Service, Python 연동
- EC2에사 보안 - 5044 포트 열기
- 백엔드 application.py 코드 추가
- 백엔드에 라이브러리 추가
(pip install python-logstash-async , 로컬)
(pip freeze > requirements.txt , EB 배포용)
- EB에 환경변수에 LOGSTASH_HOST 추가(프라이빗 IPv4 주소)
- commit and push, cloudfront 주소로 확인
+ 간단정리
- RDS : RDBMS를 쉽게 운영하여 개발에 집중하게 해주는 서비스
- ElastiCache : Redis를 다루어 RDBMS + Cache를 사용하여 서비스를 더 안정적으로 운영하게 해주는 서비스
- Elasticsearch Service : 로그를 저장하고, 데이터화 할 수 있게 해주는 DB 서비스