source : GCP qwiklabs

 

Google Cloud Shell 활성화하기

1. GCP Console의 오른쪽 상단 툴바에서 Cloud Shell 열기 버튼 클릭

 

2. 계속(Continue) 클릭

 

(결과)

 

계정 이름 목록 조회

gcloud auth list

 

출력:

Credentialed accounts: - <myaccount>@<mydomain>.com (active)

 

출력 예:

Credentialed accounts: - google1623327_student@qwiklabs.net

 

프로젝트 ID 목록 조회

gcloud config list project

 

출력:

[core] project = <project_ID>

 

출력 예:

[core] project = qwiklabs-gcp-44776a13dea667a6

 

(참고 : gcloud 관련 전체 설명서 Google Cloud gcloud 개요)

 

 

클러스터 만들기

1. 리전 설정 (Cloud Shell에서 다음 명령 실행)

gcloud config set dataproc/region global

 

2. Cloud Dataproc 설정으로 example-cluster라는 이름의 클러스터 생성

gcloud dataproc clusters create example-cluster

 

- 클러스터 영역을 확인하라는 메시지가 표시되는 경우 Y를 입력

- 클러스터는 몇 분 동안 빌드됨

출력 : 

Waiting for cluster creation operation...done. Created [... example-cluster]

 

- '생성됨' 메시지가 나타나면 계속 진행

 

 

작업 제출하기

대략적인 pi 값을 계산하는 샘플 Spark 작업을 제출하기 위해 다음 명령 실행

gcloud dataproc jobs submit spark --cluster 
example-cluster \ 
    --class org.apache.spark.examples.SparkPi \ 
    --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

 

 

  • example-cluster 클러스터에서 spark 작업을 실행하고자 함
  • 작업의 pi를 계산하는 애플리케이션에 대한 기본 메소드가 포함된 class
  • 작업의 코드가 포함된 jar 파일의 위치
  • 작업에 전달할 매개변수(이 경우에는 작업 개수인 1000)

- 작업에 전달되는 매개변수 앞에는 이중 대시(--)가 붙어야 함. (참고: gcloud 문서)

 

출력 : 

Waiting for job output... 
... 
Pi is roughly 3.14118528 
... 
Job finished successfully.

 

 

클러스터 업데이트하기

- 클러스터의 작업자 수를 4로 변경

gcloud dataproc clusters update example-cluster --num-workers 4

 

출력 : 

Waiting on operation [projects/qwiklabs-gcp-
7f7aa0829e65200f/regions/global/operations/b86892cc-
e71d-4e7b-aa5e-6030c945ea67].

Waiting for cluster update operation...done.

 

- 동일한 명령어를 사용하여 작업자 노드의 수 조정 가능

gcloud dataproc clusters update example-cluster --num-workers 2

 

source : GCP qwiklabs

 

Google Cloud Shell 활성화하기

 

1. GCP Console의 오른쪽 상단 툴바에서 Cloud Shell 열기 버튼을 클릭합니다.

 

2. 계속(Continue) 클릭

 

실행 화면 : 

 

사용 중인 계정 이름 목록 표시

gcloud auth list

 

출력:

Credentialed accounts: - <myaccount>@<mydomain>.com (active)

 

프로젝트 ID 목록 조회

gcloud config list project

 

출력:

[core] project = <project_ID>

 

- 참고 : gcloud 관련 전체 설명서 Google Cloud gcloud 개요

 

 

Cloud Shell을 사용하여 Cloud BigQuery 데이터세트 및 테이블 만들기

먼저 BigQuery 데이터세트 및 테이블 생성

- 참고: 이 섹션에서는 bq 명령줄 도구 사용

 

데이터 세트 'taxirides' 생성

bq mk taxirides

 

출력 : 

Dataset '<myprojectid:taxirides>' successfully created

 

 

BigQuery 테이블 인스턴스화

bq mk \ 
--time_partitioning_field timestamp \ 
--schema 
ride_id:string,point_idx:integer,latitude:float,longitude:float,\ 
timestamp:timestamp,meter_reading:float,meter_increment:float,ride_status:string,\ 
passenger_count:integer -t taxirides.realtime

 

출력 결과는 다음과 유사합니다.

Table 'myprojectid:taxirides.realtime' successfully created

 

 

- 참고 - BigQuery 명령줄 설명서를 참고

  • 예: 스키마 - "로컬 JSON 스키마 파일의 경로 또는 [FIELD]:[DATA_TYPE], [FIELD]:[DATA_TYPE] 형식의 쉼표로 구분된 컬럼 정의 목록

 

 

저장소 버킷 만들기

export BUCKET_NAME=<your-unique-name> 

gsutil mb gs://$BUCKET_NAME/

 

 

GCP Console을 사용하여 클라우드 BigQuery 데이터세트 및 테이블 만들기

※ 참고: 명령줄 설정을 완료한 경우에는 이 섹션 스킵

 

1. 왼쪽 메뉴의 빅데이터 섹션에서 BigQuery를 클릭

2. 왼쪽 탐색 창에서 프로젝트 이름을 클릭한 다음, 콘솔의 오른쪽에 있는 CREATE DATASET(데이터세트 만들기)를 클릭

3. 데이터세트 ID로 taxirides 입력

4. 다른 기본 설정은 모두 그대로 두고 데이터세트 만들기 클릭

5. 이제 콘솔 왼쪽의 프로젝트 ID 아래에서 taxiides 데이터세트를 확인하여 클릭

6. 콘솔 오른쪽에 있는 CREATE TABLE(테이블 만들기) 선택

7. 대상 테이블 입력 realtime을 입력

8. 스키마 아래에서 텍스트로 편집 슬라이더를 전환하고 다음을 입력

ride_id:string,point_idx:integer,latitude:float,longitude:float,timestamp:timestamp, meter_reading:float,
meter_increment:float,ride_status:string,passenger_count:integer

 

출력 화면 : 

9. 테이블 만들기 클릭

 

10. 저장소 버킷 만들기

GCP Console로 돌아가서 저장소 > 브라우저 > 버킷 만들기로 이동

11. 버킷에 고유한 이름 지정하고, 다른 모든 기본 설정은 그대로 두고 만들기 클릭

 

 

파이프라인 실행

- 탐색 메뉴에서 빅데이터 섹션을 찾아 Dataflow를 클릭

- 화면 상단의 + 템플릿에서 작업 만들기 클릭

- Cloud Dataflow 작업의 작업 이름 입력

- Cloud Dataflow 템플릿에서 Cloud Pub/Sub Topic to BigQuery( BigQuery에 대한 Cloud Pub/Sub 주제) 템플릿 선택

- Cloud Pub/Sub 입력 주제 아래에 다음을 입력

projects/pubsub-public-data/topics/taxirides-realtime

 

- BigQuery 출력 테이블에서 만들어진 테이블의 이름을 다음과 같이 입력

<myprojectid>:taxirides.realtime

 

- 임시 위치로 버킷 추가

gs://Your_Bucket_Name/temp

 

- 작업 실행(Run job) 버튼 클릭

- 리소스가 빌드되어 사용 가능 상태를 확인할 수 있음

- 탐색 메뉴에 있는 BigQuery를 클릭하여 BigQuery에 기록된 데이터 확인

- BigQuery UI가 열리면 프로젝트 이름 아래에 taxirides 테이블이 추가되고 그 아래에 realtime 테이블이 표시됨

 

쿼리 제출

- 표준 SQL을 사용하여 쿼리 제출 가능

- '쿼리 편집기' 필드에 다음 추가. (myprojectid는 Qwiklabs 페이지의 GCP 프로젝트 ID로 변경)

SELECT * FROM `myprojectid.taxirides.realtime` LIMIT 1000

 

- 쿼리 실행 클릭

- '쿼리 결과' 패널에 쿼리 실행 결과 출력

 

 

soruce : GCP qwiklabs

 

프로젝트에 Cloud Storage 버킷 만들기

1. Cloud Platform Console에서 탐색 메뉴 > 저장소 > 브라우저 선택

 

2. 버킷 만들기를 클릭합니다.

 

3. 버킷 만들기 대화상자에서 버킷 이름 지정 (참고: 버킷 이름 요구사항)

 

4. 만들기(Create)  클릭

 

 

Cloud Dataprep 초기화

  1. 탐색 메뉴 > Dataprep 선택
  2. Google Dataprep 서비스 약관에 동의하는 체크박스를 선택하고 동의 클릭
  3. 체크박스를 선택하여 Trifacta와의 계정 정보 공유를 승인한 다음 동의 및 계속하기 클릭
  4. 허용을 클릭하여 Trifacta가 프로젝트 데이터에 액세스하도록 허용
  5. Trifacta에서 제공하는 Cloud Dataprep에 로그인할 때 사용할 GCP 사용자 이름을 클릭. GCP 사용자 이름은 연결 세부정보 패널의 사용자 이름임.
  6. 허용을 클릭하여 GCP 실습 계정에 대한 액세스 권한을 Cloud Dataprep에 부여
  7. 체크박스를 선택하고 동의를 클릭하여 Trifacta 서비스 약관에 동의
  8. '처음 설정' 화면에서 계속을 클릭하여 기본 저장소 위치 생성

 

새 브라우저 탭에서 Dataprep 오픈됨. 시작 페이지의 오른쪽 상단에서 Hide tour 를 클릭

 

 

플로우 만들기

Cloud Dataprep은 flow 작업공간을 사용하여 데이터세트에 액세스하고 조작

1. 오른쪽 상단에 있는 플로우 만들기(Create Flow) 클릭

 

2. 흐름의 이름과 설명 입력 (예: 미국 연방 선거 관리 위원회 2016)

- 이름 : "FEC-2016" / 설명 : "미국 연방 선거 관리 위원회 2016"

 

3. Create(만들기)를 클릭합니다.

- FEC-2016 흐름 페이지가 열림

- "What's a flow?" 슬라이드를 스크롤하여 다음에 수행할 작업에 대한 개요를 보거나, Don't show me any helpers(도우미 표시 안 함)을 클릭하여 건너뜀

 

 

데이터세트 가져오기

이 섹션에서는 데이터를 가져와서 FEC-2016 흐름에 추가

 

1. Import & Add Datasets(데이터세트 가져오기 및 추가)를 클릭

 

2. 왼쪽 메뉴 창에서 GCS 선택 > Google Cloud Storage에서 데이터세트를 가져온 다음 연필을 클릭하여 파일 경로수정

 

3. Choose a file or folder(파일 또는 폴더 선택) 텍스트 상자에 gs://spls/gsp105를 입력한 다음 Go() 을 클릭

- Go(이동) 및 Cancel(취소) 버튼이 보이지 않으면 브라우저 창을 넓힙니다.

 

4. cn-2016.txt 옆의 + 아이콘을 클릭하여 오른쪽 창에 표시되는 데이터세트 만듬

- 데이터세트의 제목을 클릭하고 이름을 "Candidate Master 2016"으로 변경

 

5. 같은 방식으로 itcont-2016.txt 데이터세트를 추가하고 이름을 "Campaign Contributions 2016"으로 변경

 

6. 오른쪽 창에 두 데이터세트가 나열되면 Import & Add to Flow(가져오기 및 플로우에 추가)를 클릭

두 데이터세트가 모두 플로우로 표시됨

 

 

Candidate 파일 준비

1. 기본적으로 Candidate Master 2016 데이터세트가 선택됨. 오른쪽 창에서 Add New Recipe(새 레시피 추가) 클릭

 

2. Edit Recipe(레시피 수정) 클릭

 

Candidate Master 2016-2 변환 페이지가 그리드 뷰로 열림

- 변환 페이지에서는 변환 레시피를 빌드하고 이를 샘플에 적용한 결과를 볼 수 있음

- 각 열 머리글에는 데이터 유형을 지정한 이름과 값 확인 가능. 플래그 아이콘을 클릭하면 데이터 유형이 표시됨.

 

- 플래그 옵션을 클릭하면 오른쪽에 Details(세부 사항) 패널이 활성화됨

- 세부 정보 패널의 오른쪽 위에있는 X 를 클릭하여 세부 정보 패널을 닫음

 

다음, 격자보기에서 데이터를 탐색하고 레시피에 변환 단계를 적용

1. Column5는 1990-2064년의 데이터를 제공

-  스프레드시트에서와 같이 column5를 넓히면 각 연도가 분리됨

- 2016년을 나타내는 가장 큰 빈을 클릭하여 선택

- 그러면 이 값을 선택하는 단계가 만들어짐

 

2. 오른쪽의 Suggestions(추천) 패널에 있는 Keep rows(행 유지) 섹션에서 Add(추가) 를 클릭하여 이 단계를 레시피에 추가

- 오른쪽의 레시피 패널에 다음 단계가 있음

- Keep rows where(date(2016, 1, 1) <= column5) && (column5 < date(2018, 1, 1))

 

3. Column6(State)을 마우스로 가리킨 다음 헤더에서 일치하지 않는 부분(빨간색)을 클릭하여 일치하지 않는 행을 선택

- 아래로 스크롤하여 일치하지 않는 값을 찾으면 해당되는 레코드 대부분에 column7의 값이 'P', column6의 값이 'US'로 되어 있음을 확인 가능.

- 이 불일치는 'State' 열(플래그 아이콘으로 표시)로 표시되어 있는 column6에 State가 아닌 값(예: 'US')이 포함되어 있기 때문에 발생

 

4. 불일치를 수정하려면 제안 패널 맨위에서 X 를 클릭하여 변환을 취소한 다음, Column6에서 플래그 아이콘을 클릭하고 "String"열로 변경

- 더 이상 불일치 항목이 없으먄 열이 녹색으로 바뀜

 

5. 대선 후보자 필터링 (column7에 값 'P' 레코드)

- column7의 히스토그램에서 두 개의 빈을 가리키면 'H'와 'P' 값을 갖는 빈 확인 가능

- 'P' 빈을 클릭

 

6. 오른쪽 제안 패널에서 Add(추가) 를 클릭하여 레시피 단계 승인

 

 

Contributions 파일 조인하기

- 조인 페이지에서 두 데이터세트의 공통 정보에 따라 현재 데이터세트를 다른 데이터세트나 레시피에 추가 가능

- Contributions 파일을 Candidates 파일에 조인하기 전에 Contributions 파일을 정리해야 함

 

1. 그리드 뷰 페이지 상단에서 FEC-2016(데이터세트 선택기)을 클릭

 

2. 회색으로 표시된 Campaign Contributions를 클릭하여 선택

3. 오른쪽 창에서 Add New Recipe(새 레시피 추가) 를 클릭한 다음 Edit Recipe(레시피 수정)  클릭

4. 페이지 오른쪽 상단의 recipe(레시피) 아이콘을 클릭한 다음 New step 추가 클릭

- 데이터세트에서 불필요한 구분 기호를 제거

 

5. 검색창에 다음과 같은 Wrangle 언어 명령어 삽입

replacepatterns col: * with: '' on: `{start}"|"{end}` global: true

 

변환 빌더가 Wrangle 명령어를 파싱하여 찾기 및 바꾸기 변환 필드를 채움

 

6. Add(추가) 를 클릭하여 해당 변환을 레시피에 추가

 

7. 레시피에 또 다른 New step 를 추가한 다음 New step(새 단계)를 클릭하고 검색창에 'Join'을 입력

 

8. 조인 페이지를 열려면 Join datasets(데이터세트 조인하기) 클릭

 

9. "Candidate Master 2016-2"를 클릭하여 Campaign Contributions-2에 조인한 다음 오른쪽 하단에 있는 Accept(수락) 클릭

 

10. 조인 키 섹션에 마우스를 올려 놓고 연필(수정 아이콘) 클릭

- Dataprep은 공통 키를 유추하는데 다양한 공통 값을 조인 키로 추천

 

11. 키 추가 패널의 추천 조인 키 섹션에서 'column2 = column11' 클릭

 

12. Save and Continue(저장 후 계속) 을 클릭 - 검토할 수 있도록 열 2, 11이 열림

 

13. Next(다음) 을 클릭하고 '열' 레이블의 왼쪽에 있는 체크박스를 선택하여 두 데이터세트의 모든 열을 조인된 데이터세트에 추가

 

14. Review(검토) 를 클릭 한 다음 Add to Recipe(레시피에 추가) 를 클릭하여 격자보기로 돌아갑니다.

 

 

데이터 요약

- 열 16에 입력된 선거 자금 데이터의 총계, 평균, 항목 수를 계산하고 열 2, 24, 8의 ID, 이름, 소속 정당 데이터로 후보자를 그룹화해서 요약 생성

 

1. New step(새 단계)를 클릭하고 Transformation(변환) 검색창에 다음 수식을 입력하여 집계된 데이터를 미리봅니다.

pivot 
value:sum(column16),average(column16),countif(column16 > 0) 
group: column2,column24,column8

 

- 조인되어 집계된 데이터의 초기 샘플이 표시됨

- 이 샘플은 미국의 주요 대선 후보자들에 대한 요약표와 2016년 선거 자금 통계를 나타냄

 

2. Add(추가) 를 클릭하여 미국의 주요 대선 후보자들에 대한 요약표와 2016년 선거 자금 통계 확인

 

 

열 이름 변경

- 열 이름을 변경하면 데이터를 더 쉽게 해석 가능

- New step(새 단계) 클릭 > 이름 바꾸기 및 라운딩 단계를 레시피에 개별적으로 추가 > 아래 내용 입력 > Add(추가) 클릭

rename type: manual mapping: 
[column24,'Candidate_Name'], 
[column2,'Candidate_ID'],
[column8,'Party_Affiliation'], 
[sum_column16,'Total_Contribution_Sum'], 
[average_column16,'Average_Contribution_Sum'], 
[countif,'Number_of_Contributions']

 

- 선거 자금 평균값을 라운딩하는 마지막 New step(새 단계) 추가

set col: Average_Contribution_Sum value: 
round(Average_Contribution_Sum)

 

- Add(추가) 클릭

 

출력 화면 :

source : GCP qwiklabs

 

Google Cloud Shell 활성화하기

 

1. GCP Console의 오른쪽 상단 툴바에서 Cloud Shell 열기 버튼을 클릭

 

2. 계속 (Continue) 클릭

 

3. 연결 확인

 

사용 중인 계정 이름 목록 표시

gcloud auth list

 

출력:

Credentialed accounts: - <myaccount>@<mydomain>.com (active)

 

출력 예:

Credentialed accounts: - google1623327_student@qwiklabs.net

 

프로젝트 ID 목록 표시

gcloud config list project

 

출력:

[core] project = <project_ID>

 

출력 예:

[core] project = qwiklabs-gcp-44776a13dea667a6

 

기본 리전 및 영역(zone) 설정

 

Cloud Shell에서 기본 영역 설정

gcloud config set compute/zone us-central1-a

 

기본 리전 설정

gcloud config set compute/region us-central1

 

- 리전 및 영역 관련 참고 : 리전 및 영역 문서

- 참고: 내 머신에서 gcloud를 실행하면 다른 세션에서도 config 설정이 유지됨. Cloud Shell에서는 신규 세션 시작 또는 재연결 시마다 새로 설정해야 함.

 

 

다중 웹 서버 인스턴스 만들기

- 머신 클러스터 제공을 시뮬레이션 : 인스턴스 템플릿  관리형 인스턴스 그룹을 사용하여 정적 콘텐츠를 제공하는 간단한 Nginx 웹 서버 클러스터를 생성.

- 인스턴스 템플릿 : 클러스터의 모든 가상 머신(디스크, CPU, 메모리 등)의 스타일 정의

- 관리형 인스턴스 그룹 : 인스턴스 템플릿을 사용하여 여러 가상 머신 인스턴스를 인스턴스화 함

 

Nginx 웹 서버 클러스터 생성

  • 모든 가상 머신 인스턴스 시작 시 Nginx 서버를 설정하는 데 사용할 시작 스크립트
  • 시작 스크립트를 사용하기 위한 인스턴스 템플릿
  • 대상 풀
  • 인스턴스 템플릿을 사용하는 관리형 인스턴스 그룹

Cloud Shell에서 모든 가상 시스템 인스턴스에서 사용할 시작 스크립트 생성 (스크립트는 시작 시 Nginx 서버 설정)

cat << EOF > startup.sh 
#! /bin/bash 
apt-get update 
apt-get install -y nginx 
service nginx start 
sed -i -- 's/nginx/Google Cloud Platform - 
'"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html 
EOF

 

시작 스크립트를 사용하는 인스턴스 템플릿 생성

gcloud compute instance-templates create nginx-template \ 
--metadata-from-file startup-
script=startup.sh

 

출력 : 

Created [...]. 
NAME MACHINE_TYPE PREEMPTIBLE 
CREATION_TIMESTAMP nginx-template n1-standard-1 2015-11-09T08:44:59.007-08:00

 

대상 풀 생성

대상 풀은 그룹의 모든 인스턴스에 단일 액세스 포인트를 사용할 수 있도록 하며 이후 단계에서 부하를 분산할 때 필요

gcloud compute target-pools create nginx-pool

 

출력 : 

Created [...]. 
NAME REGION SESSION_AFFINITY BACKUP 
HEALTH_CHECKS 
nginx-pool us-central1

 

인스턴스 템플릿을 사용하는 관리형 인스턴스 그룹 생성

gcloud compute instance-groups managed create 
nginx-group \ 
         --base-instance-name nginx \ 
         --size 2 \ 
         --template nginx-template \ 
         --target-pool nginx-pool

 

출력 : 

Created [...]. 
NAME LOCATION SCOPE 
BASE_INSTANCE_NAME SIZE TARGET_SIZE 
INSTANCE_TEMPLATE AUTOSCALED 
nginx-group us-central1-a zone nginx 
0 2 nginx-template no

 

이름이 nginx-로 시작되는 2개의 가상 머신 인스턴스가 생성됨 (몇 분 정도 소요될 수 있음)

 

Compute Engine 인스턴스 목록을 출력 (위에서 생성한 모든 인스턴스가 표시됨)

gcloud compute instances list

 

(결과)

NAME ZONE MACHINE_TYPE PREEMPTIBLE 
INTERNAL_IP EXTERNAL_IP STATUS 
nginx-7wvi us-central1-a n1-standard-1 
10.240.X.X X.X.X.X RUNNING 
nginx-9mwd us-central1-a n1-standard-1 
10.240.X.X X.X.X.X RUNNING

 

EXTERNAL_IP 주소를 통해 포트 80으로 머신과 연결할 수 있도록 방화벽을 구성

gcloud compute firewall-rules create www-firewall --allow tcp:80

 

위의 명령어를 실행함으로써 표시되는 외부 IP 주소(http://EXTERNAL_IP/)를 통해 각 인스턴스에 연결 가능.

 

 

네트워크 부하 분산기 만들기

- 네트워크 부하 분산을 사용하면 주소, 포트, 프로토콜 유형과 같은 수신 IP 프로토콜 데이터를 기준으로 시스템의 부하를 분산할 수 있으며, HTTP/HTTPS 부하 분산을 통해 제공되지 않는 옵션을 사용할 수 있음.

- 예 : SMTP 트래픽과 같은 추가 TCP/UDP 기반 프로토콜의 부하를 분산 가능하며, 애플리케이션이 TCP 연결 관련 특성을 사용하는 경우 네트워크 부하 분산을 통해 패킷을 검사할 수 있음. 이에 반해 HTTP/HTTPS 부하 분산은 이와 같은 작업을 지원하지 않음

(참조 : 네트워크 부하 분산 설정)

 

인스턴스 그룹을 대상으로 하는 L3 네트워크 부하 분산기 생성

gcloud compute forwarding-rules create nginx-lb \ 
          --region us-central1 \ 
          --ports=80 \ 
          --target-pool nginx-pool

 

출력 :

Created
[https://www.googleapis.com/compute/v1/projects/...].

 

프로젝트의 모든 Google Compute Engine 전달 규칙의 목록 출력

gcloud compute forwarding-rules list

 

출력 : 

NAME REGION IP_ADDRESS IP_PROTOCOL TARGET 
nginx-lb us-central1 X.X.X.X TCP us-central1/targetPools/nginx-pool

 

브라우저에서 http://IP_ADDRESS/로 부하 분산기에 접속 가능. IP_ADDRESS는 위 명령어를 실행하면 표시되는 주소

 

 

HTTP/HTTPS 부하 분산기 만들기

- HTTP/HTTPS 부하 분산은 인스턴스를 대상으로 하는 HTTP(S) 요청에 관한 글로벌 부하 분산을 제공.

- 일부 URL을 여러 특정 인스턴스로 전달하고 다른 URL은 다른 인스턴스로 전달하도록 URL 규칙을 구성할 수 있음

- 그룹의 용량이 충분하고 요청에 적합하다면 요청은 언제나 사용자와 가장 가까운 인스턴스 그룹으로 전달. 가장 가까운 그룹에 용량이 부족하다면 요청은 충분한 용량이 있는 그룹 중에서 가장 가까운 그룹으로 전송됨

- 참조 : HTTP/HTTPS 부하 분산기

 

상태 확인 생성

- 상태 확인을 통해 인스턴스가 HTTP/HTTPS 트래픽에 응답하는지 확인할 수 있음.

gcloud compute http-health-checks create http-basic-check

 

출력 : 

Created 
[https://www.googleapis.com/compute/v1/projects/...]. 
NAME HOST PORT REQUEST_PATH 
http-basic-check 80 /

 

인스턴스 그룹에 관한 HTTP 서비스를 정의하고 관련 포트에 포트 이름을 매핑 : 부하 분산 서비스가 이름이 지정된 포트로 트래픽을 전달함)

gcloud compute instance-groups managed \ 
       set-named-ports nginx-group \ 
       --named-ports http:80

 

출력 : 

Updated 
[https://www.googleapis.com/compute/v1/projects/...].

 

백엔드 서비스 생성

gcloud compute backend-services create nginx-backend \ 
        --protocol HTTP --http-health-checks http-basic-check --global

 

출력 : 

Created 
[https://www.googleapis.com/compute/v1/projects/...]. 
NAME BACKENDS PROTOCOL 
nginx-backend HTTP

 

백엔드 서비스에 인스턴스 그룹 추가

gcloud compute backend-services add-backend nginx-backend \ 
       --instance-group nginx-group \ 
       --instance-group-zone us-central1-a \ 
       --global

 

출력 : 

Updated 
[https://www.googleapis.com/compute/v1/projects/...].

 

수신되는 모든 요청을 모든 내 인스턴스로 전달하는 기본 URL 맵을 만듬

gcloud compute url-maps create web-map \ 
       --default-service nginx-backend

 

출력 : 

Created 
[https://www.googleapis.com/compute/v1/projects/...].
NAME    DEFAULT_SERVICE
Web-map nginx-backend

 

- 요청된 URL에 따라 트래픽을 여러 인스턴스로 보내려면 콘텐츠 기반 라우팅을 참조

 

대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅

gcloud compute target-http-proxies create http-lb-proxy \ 
      --url-map web-map

 

출력 : 

Created 
[https://www.googleapis.com/compute/v1/projects/...]. 
NAME URL_MAP
http-lb-proxy web-map

 

들어오는 요청을 처리하고 라우팅하는 글로벌 전달 규칙 생성

- 전달 규칙 : 명시된 IP 주소, IP 프로토콜 및 포트에 따라서 특정 대상 HTTP/HTTPS 프록시로 트래픽을 전송

- 글로벌 전달 규칙은 다중 포트를 지원하지 않음

gcloud compute forwarding-rules create http-content-rule \ 
       --global \ 
       --target-http-proxy http-lb-proxy \ 
       --ports 80

 

출력 : 

Created
[https://www.googleapis.com/compute/v1/projects/...].

 

전역 전달 규칙을 만든 후에 구성이 적용되는 데 몇 분 정도 소요될 수 있음

gcloud compute forwarding-rules list

 

출력 : 

NAME REGION IP_ADDRESS IP_PROTOCOL TARGET 
http-content-rule X.X.X.X TCP http-lb-proxy 
nginx-lb us-central1 X.X.X.X TCP us-central1/....

 

- 전달 규칙에 사용할 http-content-rule의 IP_ADDRESS를 기록해 두고, 브라우저에서 http://IP_ADDRESS/로 연결

- 3~5분정도 소요 (연결되지 않으면 잠시 기다렸다가 브라우저를 새로고침)

 

 

- 석유 (Petroleum) : Petra (돌) + Oleum (기름) - 탄화수소의 혼합물

- 원유 (Crude Oil) : 유정에서 생산된 정제하지 않은 석유

- 주요 단위

  . 1 톤(Tone) = 7.3 배럴(Barrel) = 1,160 리터(L)

  . 1 드럼(Drum) = 200 리터(L)

  . 1 배럴(Barrel) = 159 리터(L)

 

The long history of oil prices (Source: Goldman Sachs)

※ 그래프(Real Price)는 과거 명목 가격에 인플레이션을 반영한 현재의 기준을 환산한 가격

 

 

석유의 발견 (Discovery of Petroleum But Confused market)과 오일 시대의 탄생 (Birth of Oil Age)

⊙ 1859 - Edwin Drake(미국 펜실베니아) 최초로 원유 생산 성공

⊙ 1870 - 존 록펠러(John D. Rockefeller)에 의해 스탠더드 오일(Standard Oil) 설립, 석유중개 사업 → 19세기 말까지 미국 석유시장의 90% 이상 장악

⊙ 당시 펜실베니아에 설립된 석유거래시장 뉴욕 등 여러 지역으로 확장 → 현물(spot)과 선물(futures) 거래 본격적 시작

⊙ 1908 - 중동지역(이란)에서 처음으로 석유 발견

⊙ 1911 - 반트러스트법에 의해 스탠다드 오일이 34개로 분할 → 2차 대전 이후 엑슨, 모빌 등이 오일 메이저(Oil Major)로 성장

 

 

오일 시대 도래 (Advent of Oil Age), 오일메이저의 패권

 국제유가 : 1948~1968년까지, 배럴당 2.5~3$ 수준

 오일메이저 7 자매 (Seven Sisters)가 지배하는 과잉공급의 시대

  - 미국계 : 엑손(Exxon, 스탠다드 오일 뉴저지), 모빌(Mobil, 스탠다드 오일 뉴욕), 쉐브론(Chevron, 스탠다드 오일 캘리포니아), 텍사코(Texaco), 걸프오일(Gulf)

  - 영국계 : 비피(BP, 앵글로 페르시안 오일) - 이란 유전개발을 통해 성장

  - 영국+네덜란드 합작 : 로얄더치셸(Royal Dutch Shell) - 인도네시아 유전개발을 위해 네덜란드 왕립회사 설립(로얄더치)

  - 7자매는 석유개발 상류(Upstream)부터, 하류(Downstream)까지 수직, 지속적 기술개발, 석유자원 보유국과 긴밀한 관계를 통한 진입장벽 형성 → 국제 석유시장의 지배적 위치 유지

  - 원유 생산이 가장 많은 텍사스 인근 주에서 텍사스철도위원회(TRRC, Texas Railroad Commission)가 생산량 통제

  - 1949 - 오일메이저 7자매가 전세계 석유거래 88% 수준 유정 소유

  - 오일메이저 7자매가 주도하는 America 계열 중심의 과점적 국제석유산업 → 추후 자원민족주의에 영향을 줌

  - 국제유가 결정 : 산유국과 오일메이저 7자매가 정한 공시가격(Posted Price)으로 결정 → 국제유가 주도권 미국(당시 세계 석유생산의 25%)

  - 1960년대부터 약 10년 사이 - 50여개 국영 석유기업과 300여개 독립계 E&P 가세

  - 전세계 석유소비 증가 : 1960년, 21.4백만 배럴 → 1970년, 46만 배럴 (2배 이상)

  - 1971 - 미국 텍사스철도위원회 생산량 통제 중단

 

 

OPEC의 지배와 자원민족주의 탄생 (Rise and Collapse of OPEC)

 국제유가 : 3$ → 13$ → 34$ (폭등)

 자원민족주의 본격화 : OPEC 국가 주도

 오일쇼크 (1차 1973년, 2차 1978년) : 금수, 감산, 가격 인상

 석유자산 국유화 : 석유 계약 구조 변화

 

석유수출국 기구 (OPEC, organization of the Petroleum Exporting Contries)

 1960년 9월 - 5개 산유국(베네수엘라, 이란, 이라크, 사우디아라비아, 쿠웨이트)에 의해 석유 정책을 조정하기 위해 결성

 OPEC에 신규 회원국 추가 가입 : 1961(카타르), 1962(인도네시아, 리비아), 1967(아부다비), 1969(알제리), 1971(나이지리아), 1973(에콰도르), 1975(가봉)

 OPEC 본부는 오스트리아 빈에 위치, 최고 의결기관인 총회와 이사회, 사무총장, 사무국, 경제위원회 등으로 구성

 오일쇼크 이후 막강한 영향력 행사

 

1차 오일쇼크(Oil Shork)

 국제유가 : 1960년대, 3$ → 1974년, 13$

 1973 - 욤 키푸르 전쟁(Yomkippur War, 이스라엘-아랍間 전쟁) : 아랍 국가들의 석유 무기화(이스라엘 지원국에 대한 석유 금수조치 단행)로 인한 세계 석유시장 구조 재편의 계기

  - 이스라엘 승리(미국과 협공하여 팔레스타인 공격)

  - 산유국들이 이스라엘 철수 후 팔레스타인 권리 회복될 때까지 석유로 경제보복(매월 원유 생산 전월대비 5% 감산)

  - 원유 가격 4배 폭등하여 전 세계 불황

  - 1974 - 국제유가 배럴당 12$까지 상승 (기존 : 배럴당 3$ 수준), 국제유가는 전적으로 OPEC에 의해 결정

  - 1978년까지 국제유가 안정적 수준 유지 (배럴당 13$)

 

2차 오일 쇼크(Oil Shrok)

 국제유가 : 1978년, 12$ → 1980년, 30$ → 1981년, 34$

 1978 - 이란 국내 혼란 및 이슬람 혁명

  - 이란의 반미 성향 혁명정부가 친미정권을 처단하고 석유수출 중단

  - 이란(세계 석유 공급량 15%)의 석유수출 금지는 세계 각국 경제 혼란 야기

 1980 - 이란-이라크間 전쟁 (국경문제)

  - 국제유가 배럴당 30$까지 상승

  - 한국 경제성장률도 2차 오일쇼크로 큰 타격을 받아 1980년 마이너스 성장률 기록

  - 1985년까지 OPEC 국가들의 쿼터 조정을 통해 국제유가 30$대 유지

  - 1,2차 오일쇼크를 거치며 국제유가는 7년간 10배 상승, 미국 달러가 기축통화로 완전히 자리 잡게 됨

 

오일쇼크 이후, 1980년대 세계 석유시장의 구조적 변화

 국제유가 : 오일쇼크 이후 한동안 20~30$ 수준 → 2001년, 23$ → 2003년, 27$ → 2005년, 49$ → 2007년, 72$ → 2008년, 92$

1) OPEC 분열과 영향력 약화

 1985 - OPEC내에서 잔여 생산자(Swing producer) 역할을 하던 사우디아라비아가 생산량 억제를 포기하고 증산 결정에 따른 OPEC 결속력 약화 국제유가 급락(30$ → 10$ 수준)

2) 석유 소비량 감소

 1,2차 오일쇼크 이후 미국, 서유럽, 일본 등 대형 석유 소비국들이 에너지 절약과 에너지 효율성 향상 노력을 통해 석유 소비량을 줄임

 각국이 석유의존형 경제의 심각한 위험을 인식하고 에너지 소비량 억제와 안정적 공급 확보가 에너지 정책 목표가 됨

3) 고유가로 인한 중동 외 다른 지역(非OPEC)에서 석유개발 및 탐사를 촉진 시키는 계기

 과거에는 높은 생산비용으로 경제성이 없었던 유전이 개발되기 시작 → 브렌트유 생

 천연가스 개발과 원자력 발전의 확대 → 에너지원 다변

 러시아와 북해를 비롯한 다른 지역 석유 생산량 증가 → OPEC의 생산비중 꾸준히 감소

 석유시장 점유율 변동 - (오일쇼크 전) OPEC:비OPEC 비율, 6:4 → (1980년 무렵) OPEC:비OPEC 비율, 3:7 수준으로 반전

4) 현물시장 발달로 국제유가 결정구조가 변함

 1980년대 초반까지 국제시장에서 OPEC의 영향력이 절대적이었고, 유가는 정부 판매 가격(Govenrment Selling Price, GSP)에 의해 결정되는 구조였으나, 1980년대 중반부터 비 OPEC 지역에서 생산된 석유가 현물시장으로 더 많이 공급되며 현물시장 상승

 1981 - 영국 런던 국제석유거래소(IPE, International Petroleum Exchange of London Ltd. - 에너지 선물(futures, 先物)및 옵션 거래소) 설립

 1983 - 미국 뉴욕 상품거래소(NYMEX)에서 WTI 선물 거래 시작

 1988 - 국제석유거래소에서 북해산 브렌트유 선물 거래 시작

 1985년 기점으로 세계 석유시장 개편

    1. 생산자 시장/소비자 시장으로 변화

    2. 고유가 시기에서 저유가 시기로 진입

    3. 정치재(Political goods)의 성격을 점차 벗어나, 경제재(economic goods)의 성격을 띠기 시작

 

 

황금 시대와 신고유가 (Golden Age and High Price Boomerang)

 국제유가 : 2000년, 30$ → 2010년, 120$ (지속상승) → 2011~2014년 초반까지, 100~130$ 박스권 유지

 사우디 중심 산유국의 고유가 향유

 중국 등 신흥국 수요 급증

 

국제유가 지속상승

 오일쇼크 이후 한동안 20~30$ 수준 유지

 연평균 국제유가 : 2003년, 29$ → 2004년, 38$ → 2005년, 55$ → 2006년, 65$ → 2007년, 72$ → 2008년, 97$

 2008년 9월 - 리먼브러더스 사건 → 글로벌 금융위기

  ㄴ 국제유가 급변 : 2008년 7월, 147.27$ → 2008년 12월, 40$ 붕괴 → 2009년 초, 33$

 2011 - 이집트 민주화 시위 → 아랍의 봄

  ㄴ연평균 국제유가 : 2011년, 111$ → 2012년, 112$2014년 12월, 100$ 붕괴

 

세계 석유시장의 구조적 변화

1) 중국, 인도 등 대규모 신흥 석유 소비국 등장

 중국의 석유 소비 급등 (2002~2005, 3년 만에 100만 배럴 증가)

 중국의 석유소비 증가율 2000~2001년 연평균 10% 수준, 2003년 12%, 2004년 16% - 통계: 국제 에너지 기구(IEA, International Energy Agency)

 BRICS(브라질, 러시아, 인도, 중국, 남아프리카공화국) 에너지 수요 증대로 산유국의 여유분 즉, OPEC의 여유 생산능력 규모 감소

 중국 페트로차이나(PetroChina), 브라질 페트로브라스(Petroleo Brasileiro, 페트롤레우 브라질레이루) 국영 석유회사의 지속적 Upstream 개발 통한, 슈퍼 메이저와의 경쟁능력을 갖춤

2) 유가의 자기 조정 메커니즘 약화

 밀레니엄 전후로 주요국에서 저금리 기조 형성으로 인한 상품시장 투자 촉발 → 국제유가 상승

3) 지정학적 위험 만성화

 2001 - 9.11 테러

 2002 - 미국 부시 대통령 '악의 축' 발언

4) OPEC을 비롯한 석유 공급자 영향력 강화

 

 

셰일 혁명 (Shale Revolution)

국제유가 (고유가 붕괴) : 2014년 상반기, 100$대 유지 전망2014년 6월, 114$ → 2014년말부터 급락, 70$대 → 2015~2016, 30$ → 2016년 하반기, 20$대 → 2017~2019년 상반기,  50~60$ 박스권 유지

 2004 - 미국 미첼에너지(Mitchell Energy)가 수압파쇄를 통한 천연가스 개발 기술 개발/적용으로 채산성 ↑

 2014 - 유가 전쟁 & 미국 셰일가스 개발 붐 절정 → 석유패권 재편, 공급과잉으로 상대적 저유가 유지 중

 셰일혁명(2010~2014) 기간 : 미국 셰일 개발 사업은 GDT $4,340억 증가, 일자리 270만개 창출, 세수 $1,110억 증가

 2019.09 - 미국 석유 수입량보다 수출량이 앞서기 시작, 1일 평균 생산량 1,200만 배럴 돌파

 2016.11 - OPEC 감산합의 (2017~2019, 감산합의 지속 연장 → 2020년초, 러시아 거부로 감산합의 실패)

 

셰일 혁명發 유가전쟁 → 사우디의 완패

 2014년 상반기  - Shale 증산/공급 과잉
 - 유가 하락 시작
 - 전문기관은 하반기 100$대 유지 전망
 2014년 하반기 ~ 2015년  - 2014년 말, 70$대까지 하락
 - OPEC 생산 동결 (사우디) : 증산 결정과 동일, 유가 급락
 - 2015년 초저유가 유지
 - Shale 생산은 감소하나, 산업 체질은 개선 : 일시 생산 감축/중단, 고비용 업체 파산, 구조조정, M&A
 2016년 상반기  - 유가 Free Fall, 20$대까지 하락
 - 사우디의 위기 증폭 : 재정 악화, 외환보유고 급감, 셰일/샌드오일 고사 실패, 시장통제력 상실
 - 타 산유국들 사우디 외면
 2016년 하반기  - Exit 전략과 명분 부재
 - 감산으로 유가 회복 필사적 추구 : 사우디만의 감산
 - 사우디 리더십, 통제력 상실 : 국채 발행, 국가 자산 매각
 2017년 ~ 2019년 상반기  - 유가 일부 회복 : $50~60$ ($40~$80) 박스권 돌입
 - Shale 구조 혁신으로 생산 회복
 - Shale을 필두로 한 미국의 시장 지배력 확대

 

 

비전통적 오일 (Unconventional Oil) - 셰일 오일 (Shail Oil)

 셰일 (Shale) : 지하 3,000m 지역 암반층

 셰일 자원 : 오랜 세월동안 모래와 진흙이 수평으로 퇴적하여 굳어진 암석층(혈암, Shale)에 함유된 자원

 셰일 가스 (Shale Gas) : 탄화수소가 풍부한 셰일층에서 개발, 생산하는 천연가스 (메탄 70~90%, 에탄 5%, 콘덴세이트 5~25%)

 셰일 오일 (Shale Oil) : 원유 성분 물질인 케로겐(Kerogen)을 함유한 퇴적암에서 추출하는 석유로 탄소함유량이 많고 황 함량이 적은 경질유

 Shale층(이판암/혈암: 점토)에 Pocket 형태의 Oil 존재하며 저류층, 구조, 덮개암이 필요 없음 → No Porosity, No Permeability → No Flow 

 전통 오일(Conventional Oil)에 비해 개발 단가가 비쌈 : 상대적으로 더 깊게 작업해야 하고, 심부까지 시추하기 위해 많은 기술이 필요함

 

셰일 오일 생산 핵심 기술

1) 수평시추법 (Horizontal Drilling)

 수직시추 후 문어발식으로 수평 시추하는 기술

 셰일과 같은 퇴적층에 철근 콘크리트 관과 같은 관체 자체를 수평으로 밀면서 굴착하는 방법

2) 수압파쇄법 (Hydraulic Fracturing)

 고압의 물을 주입하여 지하의 암석을 파쇄하는 기술

 지하 일정 지역의 Shale층을 파쇄 → Poketed Oil의 Flow → 자연압에 의해 시추관으로 분출 (생산)

 

셰일(Shale) 오일/가스 생산 과정 (source: chosun.com)

 

셰일 오일 최대 생산국 '미국'의 성공 원인

 장기간 축적된 석유개발 기술력

 풍부한 자금력 기반 민간주도 (시장/자본에 의한 주도)

 정부 세제 혜택 

 땅 주인(Land Owner)에 대한 광물권 인정

 파이프라인 등 인프라 경쟁력

 셰일 개발에 필수적인 물 자원 접근성

 저인구 밀도지역의 개발 용이성

 

셰일자원의 국가별 현황

(출처: 2017, 한국에너지공단)

 생산량 : 대부분 미국에서 생산, '17년 기준 셰일오일 18억 배럴, 셰일가스 4,200억 입방미터 생산

 부존잠재량 : 전 세계(46개국)의 셰일오일과 셰일가스 매장량은 각각 3,350억 배럴, 207조 입방미터, 상위 10개국에 77% 이상 분포

 

미국의 셰일가스, 오일 생산실적 

구분

2010

2011

2012

2013

2014

2015

2016

2017

셰일오일 (단위: 백만 Bbl)

229

478

799

1,150

1,562

1,784

1,664

1,814

셰일가스 (단위: 십억 ㎥)

138

225

288

321

348

386

403

418

 

국가별 셰일오일 부존량 (단위: 십억 Bbl)

1. 러시아 : 75

2. 미국 : 48

3. 중국 : 32

4. 아르헨티나 : 27

5. 리비아 : 26

6. 베네수엘라 : 13

7. 멕시코 : 13

8. 파키스탄 : 9

9. 캐나다 : 9

10. 인도네시아 : 8

 

국가별 셰일가스 부존량 (단위: bcm, billion cubic meter)

1. 중국 : 31,573

2. 아르헨티나 : 22,710

3. 알제리 : 20,020

4. 미국 : 18,831

5. 캐나다 : 16,226

6. 멕시코 : 15,433

7. 호주 : 12,374

8. 남아프리카 공화국 : 11,044

9. 러시아 : 8,070

10. 브라질 : 6,938

 

셰일혁명 이후, 글로벌 석유 권력 이동

⊙ 패배 그룹 : 사우디, 러시아, 베네수엘라, 이란, 이라크, 나이지리아

   - 올드 패러다임 : 소수 국가의 독과점/가격통제

⊙ 유일한 승자 : 미국 - 석유 최대 생산국 

  - 혜택 그룹 : 중국, 일본, 미국, 유럽(EU)

  - 새로운 패러다임 : 미국 주도 시장/자본의 수요/공급에 의한 결정

 

 

역(逆) 오일쇼크 - 2020년 상반기 진행중

 국제유가 급락 : 2020년 3월 현재, 장중 20$ 붕괴

 

코로나19發 유가전쟁 진행중

1) 코로나19 (COVID-19) 대유행(Pandemic, 팬데믹)으로 인한 전세계 에너지 수요 급감

2) 사우디-러시아 '증산 경쟁'

 2020.03.04 - (OPEC+) 감산합의 실패 : 러시아 감산 거부 → 사우디 증산 맞대응으로 '증산 경쟁'

3) 낮은 채산성, 상대적으로 높은 손익분기점(BEP) 을 가진 미국 셰일업계 손실 막대

 2014년 셰일 혁명 이후, 지속된 저유가로 셰일업계 영업이익 지속적 악화

 2015~2016 - 유가 급락으로 100여개 셰일업체 파산 → 비용삭감, 생산거점 이전, 기술개발 등으로 위기 극복했으나

 월가의 고배당 요구, 광구 생산성 한계 도래 등 악재 다수

 미국 셰일업체 4년 만기 도래 회사채 860억$, 이 중 부적격 회사채 60% 수준

 2020.03.20 - 미국 석유 감산 결정 검토 & 양국(러시아, 사우디) 설득 진행중, 경제 제재 등 후속조치 고려 중

 

미국 셰일오일 손익분기점(BEP) 추이 (source : Bloomberg, 이베스트투자증권, 이데일리)

 

미국 셰일업체 주가 추이 (source : 머니투데이)

 

- 작성 2020. 03. 28

+ Recent posts