EC2 보안 그룹(Security Group) 설정 확인

  • 접속하려는 서버의 포트에 접근권한이 있는지 확인

 

애플리케이션 권한 확인

  • 포트 3000 : 권한이 필요없는 포트
  • 포트 80 : 시스템 포트 → 루트 권한이 필요하다. 루트 권한 없이 포트 80을 사용하려고 하면 오류가 발생
$ sudo npm run start:prod

- sudo 이용하여 실행 하면 해결된다.

1. 레포지토리 clone

git clone "레포지토리 주소"

 

2. 원격에 있는 모든 브랜치 확인하기

git branch -r

 

3. 모든 브랜치 가져오기 (로컬에 생성)

git fetch --all

 

- 특정 브랜치만 가져오기

git fetch origin 가져올-브랜치명

 

4. 각 브랜치를 로컬에 체크아웃하기

git checkout -b 브랜치명 origin/브랜치명

 

 

(예시)

$ git checkout -b develope origin/develope                                      
branch 'develope' set up to track 'origin/develope'.
Switched to a new branch 'develope'

 

이제 로컬 브랜치 develope가 원격 브랜치 origin/develope와 연결되었다

 

이젠 main 에서 develope 브랜치로 이동하려면 아래만 입력하면된다.

git checkout develope

 

11강 인덱스를 올바르게 운용하기

분산을 고려한 MySQL 운용

  1. OS 캐시 활용
  2. 인덱스(index, 색인) 활용 - 적절하게 설정하면 데이터 검색을 빠르게 가능
  3. 확장을 전제로 한 설계

OS 캐시활용

  • 전체 데이터 크기에 주의 = > 데이터량 < 물리 메모리 유지
    • 메모리가 부족하면 메모리 증설
  • 스키마 설계가 데이터 크기에 미치는 영향 고려
    • 스키마: DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조와 제약조건에 관해 전반적인 명세를 기술한 것

인덱스의 중요성

*인덱스는 주로 탐색을 빠르게 하기 위한 것

 

MySQL 의 인덱스는 B Plus Tree 라는 데이터 구조

 

B Plus Tree ?

데이터 삽입이나 삭제를 반복하는 경우에도 트리의 형태에 치우침이 생기지않는 평형트리

트리를 구성하는 각 노드가 N 개 이상의 자식을 가질 수 없는 다분트리(n‐ary tree)

  • 각 노드가 여러개의 자식을 가질 수 있지만 N 개로 제한되는 트리

→ Seek 횟수를 최소화하는 트리구조

 

인덱스의 효과

4000만 개의 데이터가 있는 경우

인덱스가 없으면 -> 4000만 번 탐색

인덱스가 있으면  -> (B 트리경우) log 4000만 = 25.25번 만 탐색

→ Seek 횟수 개선

 

인덱스가 작용하는지 확인하는 법

    explain 명령 사용

첫 번째는 entryid(eid) 를 쿼리로 던진 경우 - > 1 행 만 조사

두 번째는 use index로 탐색 조건으로 하고자하는 eid 와는 굳이 다른 칼럼의 인덱스를 일부러 사용 -> 962 만 이상의 행 조사

 explain 명령으로 자신이 던지려는 쿼리에 제대로 인덱스가 작용하는지 여부 확인 필요

explain 명령에서 속도 확인도 필요 

12강 MySQL의 분산

- 확장을 전제로 한 시스템 설계-

MySQL의 레플리케이션 기능

정해진 마스터 아래에 슬레이브를 정하고 AP 서버에서는 로드밸랜서를 경유하여 슬레이브로 질의를 하는 구성

 

MySQL의 레플리케이션을 이용하여  위의 그림과 같이 구성이 가능

갱신 / 쓰기 쿼리 : 마스터에서만 수행

select 등 참조 쿼리 : 슬레이브에서 수행

 

마스터/슬레이브 의 특징

 

마스터(갱신/쓰기 계열)는 확장을 하지 않는다. 

  - 웹 애플리케이션에서는 참조 계열 쿼리가 90% 이상 - 병목현상이 일어날 일이 드물다.

 

슬레이브(참고 계열)는 확장을 한다. 

  - 서버를 늘리면 확장가능 동시에 메모리에 맞추는 것 도 중요

13강 MySQL의  스케일아웃과 파티셔닝

MySQL의 스케일아웃 전략 요약

  • 데이터가 메모리에 올라가는 크기?
    • Yes : 메모리에 올린다.
    • No  : 메모리 증설 / 증설이 불가능하면 파티셔닝

파티셔닝 (테이블 분할)에 관한 보충

 - 하나의 테이블 분할  : 특정 알고리즘으로 분할 ( ex> 해쉬태그 단위, 문자열 범위 [a-d, e-h, ..])

 

국소성을 고려힌 분산을 통해서 캐시가 유효함(효율이 높아진다) -> 데이터 접근 속도 향상 ->  파티셔닝의 효과가 향상

 

캐시의 효율이 높아지는 이유

  • 국소성(Locality)을 활용한 파티셔닝으로 인해 관련된 데이터가 같은 위치에 저장
  • 프로그램이 필요한 데이터에 접근할 때 캐시에 해당 데이터가 이미 저장되어 있을 확률이 높아짐
  • 캐시 히트(cache hit) 비율이 증가하면 데이터를 빠르게 가져올 수 있어 전체 시스템 성능이 향상

 

파티셔닝을 전제로 한 설계

 

*JOIN 쿼리는 대상이 되는 테이블을 앞으로도 서버 분할하지 않을 것이라고 보장할 수 있을때에만 사용

 

파시셔닝의 장점 과 단점

장점

  • 부하가 내려간다.
  • 국소성이 증가해서 캐시 효과가 높아진다.

단점

  • 운용이 복잡해진다. - 어디서 고장이 났는지 찾는 것이 어렵다.
  • 서버대수가 증가하는 만큼 고장확률이 높아진다.
  • 서버대수를 증가하는데 경제적인 비용이 든다.(메모리가 저렴해서 메모리를 증가하는 편이 더 유용할 수도 있다.)

다중화에 필요한 서버 대수는 ?

마스터 1 대 + 슬레이브 3대 = 총 4대

(이유)  마스터 1 대 + 슬레이브 2대 인 경우  슬레이브 1대가 고장난경우 대체서버에 복사를 하기위해 운영중인 서비스를 중단해야 한다.

 

<인프런 강의 정리>  비전공자도 이해할 수 있는 AWS 입문/실전

1.  AWS Route53 에서 도메인을 등록

 

도메인을 구매하는 과정에서 

정상적으로 도메인을 등록하기 위해서 입력한 이메일로 메일이 날라오기때문에,

이메일을 정확히 입력을 해야한다.

 

2. Route53의 도메인을 EC2에 연결

레코드 생성 1

 

 

레코드 생성 2

 

위와 같이 생성 할 경우

              api.my-gymlogs.com 의 도메인으로 접속했을 때 15.164.52.97IP 주소로 연결시켜준다

 

여기서 

  주 도메인 : my-gymlogs.com

  서브 도메인 : ___.my-gymlogs.com

 

# 레코드 유형

DNS에 공통적으로 있는 설정 중 하나가 레코드 유형이다. 많은 레코드 유형 중 아래 두 가지는 알고 있어야한다.

  1. A 레코드 :  도메인특정 IPv4 주소에 연결시키고 싶을 때 사용
  2. CNAME 레코드 : 도메인특정 도메인 주소에 연결시키고 싶을 때 사용
<인프런 강의 정리>  비전공자도 이해할 수 있는 AWS 입문/실전

S3 에서만 사용하는 용어 정리

버킷(Bucket)

  • S3에 여러개의 저장소를 만들수 있다. 여기서 하나의 저장소를 버킷이라고 한다.

객체(Object)

  • S3 에 업로드한 파일을 보고 S3에서는 객체라고 칭한다. S3 버킷에 업로드된 파일

 

S3 버킷 생성

원하는 S3 버킷이름을 설정

 

이 버킷의 퍼블릭 액세스 차단 설정

  •  그림에 있는 체크를 해제 후

  • 아래와 같이 설정

이유는 용도에 따라 다르지만, 여기서는 다른 사람들이 이미지를 다운 받을 수 있게 설정하기 위해서 이와 같이 설정

 

생성된 S3 버킷 권한 / 정책 설정

  • 정책?  :  권한을 정의하는 json 문서를 의미

해당 메뉴로 이동해서 <편집> 클릭

 

+ 새 문 추가 선택

  • S3 검색 후 선택하여 GetObject 선택

  • 리소스 추가
    • 리소스 유형 : object
    • 리소스 ARN
      • arn:aws:s3:::{내가 생성한 S3 버킷이름}/* : 내가 생성한 S3 버킷 에 있는 모든 object(파일)
      • ARN이란? ⇒ Amazon Resource Number의 약자이다. AWS에 존재하는 리소스를 표현하는 문법

  • 생성된 정책에서 수정
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Principal": "*", // {} -> "*"
			"Effect": "Allow",
			"Action": [
				"s3:GetObject"
			],
			"Resource": [
				"arn:aws:s3:::gymlog-static-files/*"
			]
		}
	]
}

   - "Principal" : 모든 사람에게 권한 허용

 

 

<참고 자료>

비전공자도 이해할 수 있는 AWS 입문/실전

+ Recent posts