1. '구글 클라우드 플랫폼 입문' 책보며 공부하기

뭐해먹고살지·2021년 5월 29일
0
post-thumbnail

상반기 고과를 위한 목적으로 따는 GCP 자격증.
요즘 왜이렇게도 공부가 하기 싫은건지..
이 책을 e-BOOK으로 결제하고도 도서관에서 실물 책을 빌려오고도
펴서 실습하기가 쉽지 않았다..ㅠ

드디어 5월의 마지막 주말에 몰아서 한 책을 끝내버리려고 책을 폈다.
다행히 정말 입문자를 위해 상세히 써준 책이라 너무 감사하다 ㅠㅠ
남들 다 하는 AWS보다 왠지모르게 Google의 많은 서비스를 이용하고 있는 유저로서, GCP를 따고 싶어서 도전했는데..
영어로 나오는 시험 문제와 AWS에 비해 준비/시험에 대한 상세 정보가 없어서 고군분투가 예상된다.

암튼, 회사에서 지원해줬던 GCP 속성강의를 본 뒤라 그런지
이 책의 상세한 설명들이 쏙쏙들이 이해됐다. 물론 그렇다고 다 기억나는건 아니지만... 어느정도 프로세스를 익혀가고 있달까..?

아래부터는 기억력이 좀 딸리는 내가 미래의 나에게 주는 메모장이다.
보고 또 봐야 하니까

GAE : Google App Engine
GCE : Google Compute Engine
GKE : Google Kubernetes Engine
GCP : Google Cloud Platform

GCP가 제공하는 서비스는 App 개발과 실행에 필요한 컴포넌트를 추상화된 API 서비스로 제공한다.

PoP (Point of Presence)
외부사용자가 GCP 리소스에 접근하는 경우, 출발지에서 가장 적합한 PoP을 경유하여 내부 네트워크를 통해서 목적지의 리소스에 도달.
GCP 위에 App을 배포하면 Google이 가진 내부 네트워크를 이용해 전 세계 사용자에게 app 서비스를 제공.

Google Cloud SDK : GCE/GAE/Cloud Storage/BigQuery/CloudSQL/CloudDNS 등의 GCP 서비스를 관리하기 위한 도구와 라이브러리를 포함한 것
(※SDK : Software Development Kit)

Web app과 Native app

  • Web app :
    네트워크에 있는 웹 서버에서 처리가 이뤄진 다음, 처리 결과가 브라우저에표시
    서버에 대한 네트워크 통신이 가능한 환경이라면 컴퓨터, 스마트폰, 태블릿 등 브라우저가 이용할 수 있는 단말기에서 플랫폼 상관없이 이용할 수 있음
  • Native app
    app을 설치한 단말기나 컴퓨터에서 처리를 수행(즉, 실행하는 플랫폼의 H/W나 OS에 의존)
    플랫폼의 고유 기능을 이용할 수 있는 개발의 자유도가 높고, 처리속도가 빠르지만 각 플랫폼마다 다르게 개발해야함

HTTP (Hyper Text Transfer Protocol)
: 브라우저와 웹서버 사이에서 html 등의 콘텐츠 송수신에 이용되는 통신 프로토콜
(※ http통신은 데이터를 암호화하지 않기에 통신 경로중 어딘가에서 내용이 도청될 가능성 있음 => 암호화된 HTTPS 사용해야함)

SQL의 명령어
1) DDL (Data Definition Language) : creat, drop, alter
2) DML (Data Manipulation Languate) : insert, update, delete, select
3) DCL (Data Control Language) : 접근 제어, 상태관리, 권한 설정, 트랙잭션 처리 등

저장 프로시저(Stored Procedure)
: 여러 SQL문에서 비롯된 처리를 하나의 절차로 다시금 DB에 등록해두고 임의의 타이밍에 실행하는 구조

서버 가상화 관련해서 이해가 안되는데 뒤에서 배울때 다시 한번 확인해보자 (p.73-75 2.1.3 서버 가상화 기술의 기초)

웹 시스템에서 이용하는 주요 GCP 서비스
1. 가상머신에 접속가능한 저장소
1) 영구디스크 : 네트워키 경유로 접속
2) 로컬 SSD : 가상머신이 동작하는 물리 서버에 직결, IOPS 매우 높고 레이턴시 매우 낮음
(※ IOPS : 디스크가 1초에 처리할 수 있는 I/O 접근 횟수)

오브젝트 저장소인 Cloud Storage
전 세계에 엣지 캐시를 가지기 때문에 사용자가 어디에 있어도 오브젝트에 빠르게 접근할 수 있다
(※ 엣지 서버 캐시 : 이미지, HTML 및 Javascript 파일과 같은 정적 자산을 요청 클라이언트 시스템에 최대한 가깝게 이동시켜 웹 자원로드에 소요되는 시간을 줄일 수 있음
-> 그럴싸한 설명이지만 정확한 것인지는 모르겠음

데이터 복제본을 여러 곳에 배치한 다음, 체크섬으로 데이터 부정합의 회복 기능을 사용하여 높은 확장성을 만들어냄.
1) Bucket : 오브젝트 저장하기 위한 바구니
2) Object : 버킷안에 저장하는 파일

네트워크 설정
기본적으로 SSH, RDP, ICMP를 제외한 외부 네트워크에서 받는 모든 트래픽이 블록되어있음

  • HTTP 트래픽 허용 : VM인스턴스에 'http-server' 태그가 붙음

$sudo apt-get -y update
: 게스트OS인 Debian 패키지 관리 시스템의 인덱스 업데이트
※ 패키지 관리 시스템 : app설치시에 발생하는 의존 관계를 한번에 관리하는 시스템

  • YUM(Yellodog Updater Modified) : Red Hat 계열(CentOS, Fedora)의 배포판에서 이용되는 패키지 관리 시스템
  • yum 명령어로 저장소에서 패키지를 ㅐ려받아 app 설치, 삭제, 업데이트 등을 진행 (의존관계 확인하여 관련 패키지도 자동 설치됨)
  • APT(Advanced Packaging Tool) : Debian 계열(Ubuntu, Debian)의 배포판에서 이용되는 패키지 괄 ㅣ시스템

Cloud SQL Proxy
: VM인스턴스와 Cloud SQL 인스턴스 사이의 통신을 중계

  • VM인스턴스의 어플리케이션에서는 로컬호스트 UNIX 소켓을 거쳐서 Cloud SQL 인스턴스의 접속 이름으로 DB 접속
    (송수신되는 데이터는 자동 암호화)
  • Cloud SQL Proxy, 인스턴스 연결 이름 : gcp-compute-engine-0523:asia-northeast3:websql

$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
proxy 바이너리 파일을 내려받을려고 명령어를 치니까 '-bash : wget : command not found' 가 떠서 wget을 인식못하는거 같았음
-> $ sudo apt-get install wget 내려받음

$ chmod +x cloud_sql_proxy
$ sudo chmod 777 /cloudsql
파일 권한 구분 : 읽기(4), 쓰기(2), 실행(1)

  • 777 : 소유자권한/그룹사용자권한/기타사용자권한 모두 읽기+쓰기+실행 권한 부여
    -rwxr-xr-x 1 jinny7595 jinny7595 15638195 Apr 21 21:26 cloud_sql_proxy

ACL (Access Control List)
: 패킷 필터링 룰을 모은 목록

  • 패킷 : 네트워크를 흐르는 데이터 덩어리 (통신에 필요한 송/수신처의 IP주소와 포트번호 포함)

라우터 : 두 개 이상의 다른 서브넷 사이의 패킷을 중계하기 위한 기기

부하 분산기(Load Balancer)
: 클라이언트에서 요청을 일정 알고리즘에 따라 여러 서버로 분담시키는 부하 분산 전용 네트워크 기기

  • Round Robin : 요청을 균등하게 분담시키는 알고리즘
  • Health Check : 서버의 상태 확인
  • SPOF (Single Point Of Failure) : 단일 장애점

OpenFlow : 네트워크 제어를 관리하는 컨트롤 플레인을 네트워크 기기에서 뗴어내 서버에 실행하는 소프트웨어로 구현
OpenFlow에서 네트워크 기기를 집중적으로 제어함으로써 단일 물리 네트워크에 마치 여러 네트워크가 존재하는 것처럼 보이게 함

Name Resolving (이름 해결) : 도메인이름 <-> IP주소 변환

Docker
핫한 Docker에 대한 설명을 읽어보니까 현재 나의 상황과 대비대면서 너무 편리할 거 같은 기능이다
ex) 개발 협력사에게 운영중인 소스를 전달해야할때 환경설정파일을 Docker 이미지파일로 설정해서 전달해주면, 협력사원들은 Docker 이미지를 다운받아서 개발할 수 있는, 굉장히 효율적인 방법인거 같은데..

1) App개발 : 개발한 Web app 소스코드를 Git에 저장 & app 실행 모듈 빌드 준비 & Dockerfile 생성(실행모듈과 app실행에 필요한 OS, Network, storage 등의 구성정보를 명시한 파일)

2) 테스트 :
git의 코드를 바탕으로 app 실행 모듈 빌드
☞ Dockerfile을 사용해 실행모듈을 포함한 Docker 이미지(app실행에 필요한 인프라설정, 빌드가 끝난 실행 모듈=설치 이미지) 빌드

3) 실제 운영환경으로 배포

Provisioning Tool(프로비저닝 도구)
: 네트워크와 OS를 포함한 서버구성을 자동으로 구축하고 관리하거나 미들웨어나 app의 정의파일을 자동으로 만들고 여러 서버에 대해 app일괄 배포 등의 구성 관리를 위한 도구까지 다양함.

Immutable Infrastructure
app 실행환경을 변경할때 Dockerfile을 수정해서 새롭게 빌드한 Docker 이미지로 실행환경을 바꾸지, 직접 실행환경 인프라를 변경할 필요없는 방법

Clustering (클러스터링)
여러 서버를 엮어서 이용자나 외부 시스템에 대해서 전체로 한 대의 컴퓨터인 것처럼 보이게 하는 기술
-> 서버 한 대가 장애가 나더라도 시스템이 멈추지 않도록 여러 대의 서버를 엮는 것

  • 장애 시스템 전환 방식
    ① Cold Standby : 구성/설정이 같은 서버 or 네트워크 기기를 백업으로 준비(전원 off)
    ② Hot Standby : 동일 구성의 서버를 동시에 운용, 장애 발생 시, 다른 한 대가 교대해서 처리를 이어서 계속하는 구성방식
  • Failover(페일오버) : 장애가 발생한 서버 or 네트워크 기기를 시스템에서 자동으로 분리해 예비기로 전환하는 것(by software)
  • Health Check(상태확인) : 운용 장비에서 장애가 발생하는 것을 감지하는 구조 (ex. ping 응답확인, 80포트 응답확인 등)

컨테이너 오케스트레이션 도구
: 컨테이너의 시작/정지 등의 제어 & 호스트끼리의 네트워크 접속과 스토리지 관리, 스케줄링 기능 등 컨테이너를 통합 관리할 수 있는 도구
ex) Docker Engine, Apache Mesos/Marathon, Kubernetes

profile
조금 부족한 내 기억력을 위해

0개의 댓글