Skip to content

Commit

Permalink
업로드 밀린거
Browse files Browse the repository at this point in the history
  • Loading branch information
minyoongi96 committed Aug 25, 2024
1 parent e1ce135 commit 78cec5a
Show file tree
Hide file tree
Showing 33 changed files with 464 additions and 0 deletions.
80 changes: 80 additions & 0 deletions _posts/2024-05-04-OLAP와 OLTP.md
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에 데이터를 제공
45 changes: 45 additions & 0 deletions _posts/2024-05-10-RDS의 ElastiCache.md
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
40 changes: 40 additions & 0 deletions _posts/2024-05-10-aws5_AWS RDS 백업.md
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 엔드포인트가 생성된다.
39 changes: 39 additions & 0 deletions _posts/2024-05-10-aws6_RDS의 Multi AZ, Read Replicas.md
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의 워크로드를 현저히 낮출 수 있으며 성능 개선 효과를 누릴 수 있다.
154 changes: 154 additions & 0 deletions _posts/2024-05-15-aws07_RDS 생성 및 EC2 인스턴스 연결.md
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)
Loading

0 comments on commit 78cec5a

Please sign in to comment.