forked from mmistakes/minimal-mistakes
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e1ce135
commit 78cec5a
Showing
33 changed files
with
464 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
--- | ||
layout: single | ||
title: "OLAP와 OLTP" | ||
categories: [CS] | ||
tag: [cs] | ||
toc: true | ||
toc_sticky: true | ||
post-header: false | ||
|
||
--- | ||
|
||
<head> | ||
<style> | ||
table.dataframe { | ||
white-space: normal; | ||
width: 100%; | ||
height: 240px; | ||
display: block; | ||
overflow: auto; | ||
font-family: Arial, sans-serif; | ||
font-size: 0.9rem; | ||
line-height: 20px; | ||
text-align: center; | ||
border: 0px !important; | ||
} | ||
|
||
</style> | ||
</head> | ||
|
||
## 1. OLTP (Online Transaction Processing) | ||
|
||
### OLTP 정의 | ||
|
||
- ‘운영’계 데이터 및 데이터를 처리하는 방법을 의미한다. | ||
- 복수의 사용자 PC에서 발생되는 트랜잭션을 DB서버가 처리, 그 결과를 요청한 사용자에게 실시간으로 결과값을 되돌려주는 과정 | ||
- 1개의 트랜잭션에서 발생되는 INSERT, UPDATE, DELETE를 무결성 보장하여 처리하고 결과를 SELECT하는 과정 | ||
|
||
### OLTP의 특징 | ||
|
||
- 과거에는 주로 RDBMS 기반의 시스템을 근간으로 했으나 NoSQL도 운영계 데이터의 성격을 띤다면 OLTP로 분류 가능 | ||
- 현재 데이터가 처리가 얼마나 정확하고 무결한지가 중요 | ||
- 실질적인 데이터의 저장, 삭제, 수정 등의 작업을 의미 | ||
- 비교적 작은 규모의 트랜잭션들로 구성 | ||
- CRUD와 관련된 쿼리들이 주를 이룸 | ||
- 전통적인 DBMS들이 주로 사용됨 | ||
|
||
## 2. OLAP (Online Analytical Processing) | ||
|
||
### OLAP의 정의 | ||
|
||
- ‘분석’계 데이터 및 데이터를 처리하는 방법을 의미한다. | ||
- 데이터 웨어하우스(DW), DB에 저장되어 있는 데이터를 분석, 사용자에게 유의미한 정보를 제공해주는 처리 방법이다. | ||
- 기존에 저장되어 있는 데이터를 사용자의 요구와 목적에 맞게 분석하여 정보를 제공하는 개념 | ||
|
||
### OLAP의 특징 | ||
|
||
- 분석을 통해 BI(Business Intelligence)와 연계하여 특정 지표 추출, 리포트 생산, 의사 결정에 도움 | ||
- 이미 저장된 데이터를 바탕으로 어떤 정보를 제공하는지가 중요 | ||
- 데이터가 무결, 정확하다는 전재 하에 정보를 어떤 식으로 표현하고 제공하는지를 의미 | ||
- 대용량 데이터를 취급 | ||
- 통계/집계 등의 복잡한 쿼리들이 주를 이룸 | ||
- DW(Data Warehouse)를 구축 | ||
- 데이터가 어느정도 중복이 되더라도 별 상관이 없으며 많은 데이터 수집이 필요 | ||
|
||
## OLTP와 OLAP 비교 | ||
|
||
| 구분 | OLTP | OLAP | | ||
| --- | --- | --- | | ||
| 목적 | 비즈니스 활동 지원 | 비즈니스 활동에 대한 평가, 분석 | | ||
| 주 트랜잭션 형태 | SELECT, INSERT, UPDATE, DELETE | SELECT | | ||
| 속도 | 수 초 이내 | 수 초 이상 수 분 이내 | | ||
| 데이터 표현 시간 | 실시간 | 과거 | | ||
| 관리 단위 | 테이블 | 분석된 정보 | | ||
| 최적화 방법 | 트랜잭션 효율화, 무결성 극대화 | 조회 속도, 정보의 가치, 편의성 | | ||
| 데이터의 특성 | 트랜잭션 중심 | 정보 중심 | | ||
| 중요점 | 데이터의 정확도, 무결성 | 결과의 속도, 표현 방식 | | ||
| 활용자 | 운영자 | 분석가, 의사결정자1 | | ||
|
||
- OLTP와 OLAP 중 가장 선행되어야 할 부분은 OLTP (데이터 처리 과정 및 데이터 자체의 무결성 중요) | ||
- OLTP가 원천 데이터의 제공처이며 ETL작업을 통해 OLAP에 데이터를 제공 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
--- | ||
layout: single | ||
title: "RDS의 ElastiCache" | ||
categories: [AWS] | ||
tag: [AWS, RDS] | ||
toc: true | ||
toc_sticky: true | ||
post-header: false | ||
|
||
--- | ||
|
||
## ElastiCache | ||
|
||
- 클라두으 내에서 In-memory 캐시를 만들어줌 | ||
- 데이터베이스에서 데이터를 읽어오는것이 아니라 캐시에서 빠른 속도로 데이터를 읽어옴 | ||
- 수백, 수천만 개의 프로세싱을 동시다발적으로 처리할 경우 큰 차이가 생김 | ||
- 종종 불러오는 레코드들은 예를 들면 SNS, 네이버 실시간 검색어 Top10 등 많은 사람들에 의해서 읽혀지는 데이터들을 캐시에 넣음으로써 빠른 로딩을 가능하게 함 | ||
- Read-Heavy 어플리케이션에서 상당한 Latency 감소 효과가 있음 | ||
- 초반 어플리케이션 개발 및 테스트 용도로는 적합하지 않음 | ||
- Elasti Cache는 Memcached와 Redis가 존재한다. | ||
|
||
## Memcached | ||
|
||
- Object 캐시 시스템으로 잘 알려져 있음 | ||
- ElastiCache는 Memcached의 프로토콜을 디폴트로 따름 | ||
- EC2 Auto Scaling처럼 데이터 처리 사용량에 따라 캐시의 크기가 커졌다 작아졌다 가능함 | ||
- Memcached는 오픈 소스이다. | ||
|
||
### Memcached는 이럴때 사용하면 좋다! | ||
|
||
1. 가장 단순한 캐싱 모델이 필요한가요? Yes | ||
2. Object caching이 주된 모기적인가요? Yes | ||
3. 캐시 크기를 마음대로 scaling하기를 원하나요? Yes | ||
|
||
## Redis | ||
|
||
- Key-Value, Set, List와 같은 형태의 데이터를 In-Memory에 저장 가능함 | ||
- 오픈 소스이다. | ||
- Multi-AZ 기능을 지원한다. (Disaster Recovery 기능) | ||
|
||
### Redis는 이럴때 사용하면 좋다! | ||
|
||
1. List, Set과 같은 데이터셋을 사용하나요? Yes | ||
2. 리더보드처럼 데이터셋의 랭킹을 정렬하는 용도가 필요한가요? Yes | ||
3. Multi AZ기능이 필요하나요? Yes |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
--- | ||
layout: single | ||
title: "AWS RDS 백업" | ||
categories: [AWS] | ||
tag: [AWS, RDS] | ||
toc: true | ||
toc_sticky: true | ||
post-header: false | ||
|
||
--- | ||
|
||
AWS RDS에는 두 가지 백업 기능이 존재한다. | ||
|
||
- Automated Backups (자동 백업) | ||
- DB Snapshots (데이터베이스 스냅샷) | ||
|
||
## Automated Backups(AB) - 자동 백업 | ||
|
||
1. Retention Period(1 ~ 35일) 안의 어떤 시간으로 돌아가게 할 수 있음 | ||
- 현 시점부터 35일 전까지가 Retenntion Period에 해당 | ||
2. AB는 그날 생성된 스냅샷과 Transaction logs(TL)을 참고함 | ||
- AB는 복원을 대비하기 위해 매일 스냅샷과 트랜잭션 로그를 끊임없이 생성함 | ||
- 유저가 고른 날짜로 돌아가길 원한다면 그 날짜에 해당하는 스냅샷과 트랜잭션 로그를 참조한다. | ||
3. 디폴트로 AB기능이 설정되어 있으며 백업 정보는 S3에 저장됨 | ||
- RDS 인스턴스 크기만큼에 해당되는 용량까지만 무료로 사용 가능 | ||
4. AB동안 약간의 I/O suspension이 존재할 수 있음(체감상 크게 느껴지지는 않지만 어느정도 딜레이 존재) | ||
|
||
## DB Snapshots - 데이터베이스 스냅샷 | ||
|
||
1. 주로 사용자에 의해 실행됨 | ||
2. 원본 RDS Instance를 삭제해도 스냅샷은 존재함 | ||
- 원본 RDS 인스턴스를 삭제해도 스냅샷은 S3에 존재함 | ||
- AB 기능은 원본 인스턴스를 삭제할 시 사라짐 | ||
|
||
## 데이터베이스 백업했을 때 | ||
|
||
![스크린샷 2024-08-24 오후 9.52.55.png](/assets/images/aws05/1.png) | ||
|
||
- 전혀 다른 RDS 인스턴스가 생성된다. | ||
- 전혀 다른 RDS 엔드포인트가 생성된다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
--- | ||
layout: single | ||
title: "RDS의 Multi AZ, Read Replicas" | ||
categories: [AWS] | ||
tag: [AWS, RDS] | ||
toc: true | ||
toc_sticky: true | ||
post-header: false | ||
|
||
--- | ||
|
||
## Multi AZ | ||
|
||
- 원래 존재하는 RDS DB에 무언가 변화(ex. write)가 생길 때 다른 Availability Zone에 똑같은 복제본이 만들어짐 = Synchronize | ||
- AWS에 의해서 자동으로 관리가 이루어짐 (No admin intervention) | ||
- 원본 RDS DB에 문제가 생길 시 자동으로 다른 AZ의 복제본이 사용됨 (Disaster Recovery) | ||
- 성능 개선을 위해서 사용되지는 않음 → 성능 개선을 기대하기 위해선 Read Replica 사용 | ||
|
||
![스크린샷 2024-08-24 오후 10.00.31.png](/assets/images/aws06/1.png) | ||
|
||
- 3개의 인스턴스가 하나의 프로덕션 RDS DB에 연결되어 있고 쓰기 기능이 실행된다면, | ||
- 현재 RDS 엔드포인트는 ap-northeast-2a 이지만 쓰기 기능이 실행된 후 똑같은 복제본이 다른 AZ(ap-northeast-2b)에 쓰여진다. | ||
- 만약 AZ 2a의 RDS에 문제가 생긴다면 RDS는 자동으로 AZ 2b로 failover를 한다. | ||
|
||
## Read Replica | ||
|
||
- 프로덕션 DB의 읽기 전용 복제본이 생성됨 | ||
- 주로 Read-Heavy DB 작업시 효율성의 극대화를 위해 사용된다 (Scaling) | ||
- Disaster Recovery 용도가 아님 | ||
- 최대 5개의 Read Replica DB가 허용됨 | ||
- Read Replica의 Read Replica 생성이 가능(단, 약간의 Latency 발생) | ||
- 각각의 Read Replica는 자기만의 고유 엔드포인트가 존재한다. | ||
- RDS DB는 IP 주소가 아닌 엔드포인트로 고유 식별을 할 수 있다. | ||
|
||
![스크린샷 2024-08-24 오후 10.29.56.png](/assets/images/aws06/2.png) | ||
|
||
- 3개의 인스턴스가 하나의 메인 프로덕션 RDS에 연결되어 있을 때 쓰기 작업이 실행될 시 read replica에 의해 똑같은 RDS 복제본이 생성된다, | ||
- 그리고 3개의 인스턴스에서 Read Traffic이 일어날 때, 메인 프로덕션 DB로 모두 연결시키는것이 아니라 하나의 EC2 인스턴스를 각각의 Read Replica로 연결시켜줌 | ||
- 따라서, 메인 DB의 워크로드를 현저히 낮출 수 있으며 성능 개선 효과를 누릴 수 있다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
--- | ||
layout: single | ||
title: "RDS 생성 및 EC2 인스턴스 연결하기" | ||
categories: [AWS] | ||
tag: [AWS, RDS] | ||
toc: true | ||
toc_sticky: true | ||
post-header: false | ||
|
||
--- | ||
|
||
## RDS 생성 | ||
|
||
RDS > 데이터베이스 생성 > MySQL로 생성 > 버전은 기본으로 선택(MySQL 8.0.35) | ||
|
||
![스크린샷 2024-08-26 오전 12.24.32.png](/assets/images/aws07/1.png) | ||
|
||
템플릿에서 프로덕션과 개발/테스트 를 선택하면 아래에 Multi AZ 기능을 사용할 수 있다. | ||
|
||
프리티어에서는 사용 불가. | ||
|
||
![스크린샷 2024-08-26 오전 12.25.56.png](/assets/images/aws07/2.png) | ||
|
||
DB인스턴스 이름과 어드민 사용자 이름, 암호를 설정한다. | ||
|
||
![스크린샷 2024-08-26 오전 12.27.22.png](/assets/images/aws07/3.png) | ||
|
||
그다음에 인스턴스 구성을 한다. 프리티어를 선택했기 때문에 버스터블 클래스 이외에는 선택사항이 없다. | ||
|
||
버스터블 클래스란 상황에 따라서 CPU의 성능을 버스트시킬 수 있다는 뜻이다. | ||
|
||
![스크린샷 2024-08-26 오전 12.34.24.png](/assets/images/aws07/4.png) | ||
|
||
스토리지 유형은 범용 SSD(gp2)로 선택한다. 스토리지 유형 목록을 보면 GP3란게 있는데, 이건 추가 비용을 냄으로써 IOPS 처리량을 늘릴 수 있다. | ||
|
||
할당된 스토리지의 크기는 간단한 시스템을 유지하기 위해 20GIB로 설정한다. | ||
|
||
스토리지 자동 조정 활성화란게 있는데 오토 스케일링을 뜻한다. 최대 스토리지 임계값은 디폴트(1000GIB)로 설정해준다. | ||
|
||
![스크린샷 2024-08-26 오전 12.35.57.png](/assets/images/aws07/5.png) | ||
|
||
## EC2 인스턴스 연결 | ||
|
||
그 다음은 컴퓨팅 리소스에 대해서 묻는데, 최근 UI 업데이트를 통해 여기서 직접 EC2 인스턴스를 만들어서 RDS와 바로 연결시킬 수 있다. | ||
|
||
![스크린샷 2024-08-26 오전 12.40.32.png](/assets/images/aws07/6.png) | ||
|
||
여기서 RDS와 연결해줄 EC2 인스턴스를 생성해둔다. | ||
|
||
- 인스턴스명 : aws-learner-rds-ec2-instance, 내가 가지고 있는 기존 키페어(testkey.pem) 선택 | ||
- 보안 그룹 : http 80포트와 ssh 22포트를 위치무관 접속할 수 있게 설정. | ||
|
||
![스크린샷 2024-08-26 오전 12.50.23.png](/assets/images/aws07/7.png) | ||
|
||
- 고급 세부 정보 > 사용자 데이터 에서 편리한 설정을 위해 EC2 인스턴스가 생성되면서 실행될 스크립트 내용을 넣어준다. | ||
- EC2 인스턴스 생성 후 apache, php, mysql을 yes 옵션으로 설치 후 아파치 실행 | ||
- 간단한 php파일을 아파치 서버 디렉토리 내에 index.php로 저장 | ||
- wget 명령어로 S3내의 connect.php 파일을 다운로드 | ||
|
||
connect.php 파일 내용 | ||
|
||
```php | ||
<?php | ||
$username = "admin"; | ||
$password = "awslearner"; | ||
$hostname = "yourhostnameaddress"; | ||
$dbname = "awslearner"; | ||
|
||
//connection to the database | ||
$dbhandle = mysql_connect($hostname, $username, $password) or die("MySQL에 연결할 수 없습니다"); | ||
echo "MySQL 접속 성공! username - $username, password - $password, host - $hostname<br>"; | ||
$selected = mysql_select_db("$dbname",$dbhandle) or die("MySQL DB 연결 실패... - 다시 시도해보세요!"); | ||
?> | ||
``` | ||
|
||
EC2 인스턴스 생성이 완료되었으면 다시 RDS 생성 화면으로 돌아와서 방금 생성한 EC2 인스턴스를 선택해준다. | ||
|
||
![스크린샷 2024-08-26 오전 12.53.56.png](/assets/images/aws07/8.png) | ||
|
||
VPC는 디폴트로 만들어질것이고, DB 서브넷 그룹은 기존 항목을 선택하거나 자동설정으로 선택해준다. | ||
|
||
VPC 보안 그룹은 선택/생성이 있는데 기존에 생성했던 ssh, http 접근이 가능한 보안그룹으로 선택해줬다. | ||
|
||
![스크린샷 2024-08-26 오전 12.57.35.png](/assets/images/aws07/9.png) | ||
|
||
다음으로 가용영역이 있는데, 지금은 프리티어 용이라 Multi-AZ 기능을 사용할 수 없으므로 선택 권한이 없다. | ||
|
||
추가 구성에서 데이터베이스 포트를 지정할 수 있다. (MySQL default 포트는 3306) | ||
|
||
![스크린샷 2024-08-26 오전 12.58.21.png](/assets/images/aws07/10.png) | ||
|
||
다음은 데이터페이스 암호 인증을 선택할 수 있는 곳이다. 여기선 위에서 부여했던 어드민 사용자, 암호를 가지고 데이터베이스에 접속할 수 있게끔 ‘암호 인증’을 선택해 줬다. | ||
|
||
![스크린샷 2024-08-26 오전 1.00.07.png](/assets/images/aws07/11.png) | ||
|
||
마지막으로 추가구성에서 데이터베이스 옵션에서는 초기 데이터베이스 이름을 설정해주고 나머지는 디폴트로 설정해줬다. | ||
|
||
![스크린샷 2024-08-26 오전 1.03.15.png](/assets/images/aws07/12.png) | ||
|
||
## EC2 인스턴스 확인 | ||
|
||
방금 RDS와 연결한 인스턴스를 퍼블릭 IP주소로 접속해보면 php 화면이 뜬다. | ||
|
||
![스크린샷 2024-08-26 오전 1.54.05.png](/assets/images/aws07/13.png) | ||
|
||
이제 이 EC2 인스턴스에 터미널로 접속해본다. | ||
|
||
![스크린샷 2024-08-26 오전 1.56.45.png](/assets/images/aws07/14.png) | ||
|
||
아까 EC2를 생성할 때 입력했던 구문중 connect.php 파일 내용 확인 | ||
|
||
/var/www/html 폴더에 wget 이동 | ||
|
||
![스크린샷 2024-08-26 오전 1.58.31.png](/assets/images/aws07/15.png) | ||
|
||
- vi connect.php | ||
- hostname 값을 생성한 RDS 인스턴스의 엔드포인트명으로 바꿔준다. | ||
|
||
![스크린샷 2024-08-26 오전 3.20.47.png](/assets/images/aws07/16.png) | ||
|
||
|
||
수정 한 후 ec2 DNS명/connect.php로 확인해보기 | ||
|
||
확인해보면 아래와 같이 MySQL에 연결할 수 없다고 나온다. | ||
|
||
![스크린샷 2024-08-26 오전 2.06.19.png](/assets/images/aws07/17.png) | ||
|
||
이유는 현재 RDS 보안그룹은 RDS 인스턴스 안에서만 존재하며, | ||
|
||
우리가 웹에서 접속한 EC2 인스턴스에서는 별개의 보안그룹이 존재한다. | ||
|
||
두 개의 서로 다른 클라우드에서 다른 보안 그룹이 존재하므로 현재 EC2에서 RDS로 통신이 불가능한 상태이다. | ||
|
||
## RDS 보안 그룹 확인하기 | ||
|
||
생성한 RDS의 보안 그룹 > 인바운드 규칙 확인 | ||
|
||
그다음, 이 소스를 지우고 아까 EC2 인스턴스가 속해 있는 보안 그룹을 찾아서 연결해준다. | ||
|
||
![스크린샷 2024-08-26 오전 2.34.04.png](/assets/images/aws07/18.png) | ||
|
||
그러면 이렇게 ‘기존 IPv4 CIDR 규칙에 a 참조된 그룹 ID를 지정할 수 없습니다.’ 라는 에러가 뜬다. | ||
|
||
위 에러를 해결하려면, 이 규칙을 삭제하고 다시 똑같이 만들어주면 지정이 된다. | ||
|
||
![스크린샷 2024-08-26 오전 2.36.24.png](/assets/images/aws07/19.png) | ||
|
||
다시 똑같이 만들어 준 후에 저장을 누른다. | ||
|
||
(DB 파라미터 그룹은 따로 정리.) | ||
|
||
다시 /connect.php 화면을 로딩해서 접속 성공 여부를 확인한다. | ||
|
||
![스크린샷 2024-08-26 오전 3.21.41.png](/assets/images/aws07/20.png) |
Oops, something went wrong.