[9-1] Cloud SQL 생성하기

1. Cloud SQL 서비스로 이동한다.

2. 인스턴스 만들기를 클릭하여 인스턴스 생성 작업을 진행한다.

3. MySql/SqlServer/PostgreSQL 중 PostgresSQL을 선택 하고 Cloud SQL 버전을 선택한다. 여기서는 테스트 용도 이므로 Enterprise를 선택 후 버전 사전 설정은 샌드박스를 선택한다. 그리고 데이터베이스 버전은 15버전을 선택한다.

4. 인스턴스 ID와 비밀번호를 지정한다. 인스턴스 ID는 고유한 ID 값을 넣는다. (may9noy2-tester-02), 그리고 패스워드도 알맞게 지정한다.

5. 리전 및 가용영역 선택에서 리전은 ap-northeast-3 서울 리전을 선택하고 가용영역은 단일 영역으로 지정한다.

6. 구성 옵션 표시를 클릭하여 세부 구성 정보를 설정한다.
- 머신 구성에서 비용을 최소화 하기 위해 공유 코어와 vCPU 1개, 1.7GB를 선택한다.

- 저장 용량은 10GB로 하고 타입은 HDD로 설정한다. 그리고 저장 용량 자동 증가 사용 설정 옵션은 해제한다.

7. 인스턴스 IP 할당에서 비공개 IP에 체크를 하고, 공개 IP는 체크를 해제한다.

- 현재 환경이 테스트 환경이므로 자동 일일 백업 체크해제, 삭제 보오 사용 설정을 해제한다. (운영 환경에서는 필수로 적용 해야됨.)

그리고 비공개 IP에 체크하면 아래와 같이 설정 페이지가 나온다. 비공개 서비스 액세스 리소스가 없다면 아래의 캡처를 참고로 생성하면 된다.

VPC 네트워크 세부정보는 아래와 같다.

8. 유지보수 부터 나머지 옵션은 Default로 설정 후 DB 인스턴스를 생성한다.

위의 작업이 모두 완료되면 Private 환경의 DB 인스턴스를 생성 할 수 있다.

 

[9-2] Cloud SQL Studio에 대해서 알아보기

Cloud SQL Studio는 Cloud SQL 인스턴스를 관리하고 쿼리를 실행할 수 있는 웹 기반 도구입니다.
이를 통해 사용자는 SQL 데이터베이스를 쉽게 관리하고, 데이터베이스 쿼리를 실행하며, 결과를 시각화할 수 있습니다.
Cloud SQL Studio는 GCP 콘솔 내에서 제공되며, 별도의 클라이언트 소프트웨어 설치 없이 브라우저를 통해 접근할 수 있습니다. 😀

Cloud SQL Studio를 통해서 DB Table과 데이터를 Insert 하는 과정은 아래와 같습니다.

테이블 생성

CREATE TABLE "USER" (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

데이터 Insert

INSERT INTO "USER" (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO "USER" (name, email) VALUES ('Jane Smith', 'jane.smith@example.com');
INSERT INTO "USER" (name, email) VALUES ('Sion Kim', 'may9noy@gmail.com');

Cloud SQL Studio를 사용하는 이유는 다음과 같습니다.

  • 편리한 사용성: 웹 브라우저에서 바로 사용할 수 있어 별도의 클라이언트 설치가 필요 없습니다.
  • 직관적인 인터페이스: 코드 완성 기능, 쿼리 결과 시각화 등 다양한 기능을 제공하여 개발 생산성을 높여줍니다.
  • 통합된 환경: GCP 콘솔 내에서 Cloud SQL과 연동되어 있어 다른 GCP 서비스와의 협업이 용이합니다.
  • 데이터 시각화: 간단한 차트를 통해 쿼리 결과를 시각화하여 데이터 분석을 쉽게 할 수 있습니다.
  • 다양한 데이터베이스 지원: MySQL, PostgreSQL 등 다양한 데이터베이스 엔진을 지원합니다.

하지만 Cloud SQL Studio만 사용하는 것은 항상 최선의 선택은 아닙니다.

  • 복잡한 쿼리 및 스크립트: 복잡한 SQL 쿼리나 스크립트를 작성하고 실행해야 할 경우, 강력한 기능을 제공하는 별도의 SQL 클라이언트(예: pgAdmin, MySQL Workbench)를 사용하는 것이 더 효율적일 수 있습니다.
  • 대규모 데이터 처리: 대규모 데이터를 처리하거나 복잡한 분석 작업을 수행할 경우, 더 전문적인 데이터 분석 도구를 사용하는 것이 좋습니다.

결론적으로, Cloud SQL Studio는 간단한 쿼리 작성, 데이터 탐색, 시각화 등을 위한 편리한 도구입니다.
하지만 프로젝트의 규모와 복잡성에 따라 다른 도구와 함께 사용하거나, 필요에 따라 다른 도구로 전환하는 것이 좋습니다. 😀


Cloud SQL Studio의 비용관련 내용 정리

Cloud SQL Studio를 사용하는 것 자체는 일반적으로 추가적인 비용이 발생하지 않습니다.
즉, Cloud SQL Studio를 통해 데이터베이스에 접속하고 쿼리를 실행하는 것은 무료입니다.

결론적으로, Cloud SQL Studio 자체는 무료이지만, Cloud SQL 서비스를 이용하기 위한 비용은 발생할 수 있습니다. 😀

 

<<실습 Start>>

- Cloud SQL 서비스 이동

- 생성된 DB 상세 이동

- 좌측 "Cloud SQL Studio" 선택하여 접속 후, 데이터베이스와 PW 입력

- 쿼리 수행

<<실습 End>>

 

[9-3] 예제 애플리케이션과 Cloud SQL Connection 후 GCE를 통해서 접근하기

1. 예제 애플리케이션에 Cloud SQL URL 정보를 설정하여 애플리케이션과 DB 커넥션이 되도록 설정

- application.yml 또는 application.properties 파일에 DB URL을 Cloud SQL에서 확인한 DB 접속 정보와 PW로 수정

- jar 파일 build

2. 퍼블릭 ComputeEngine을 생성하여 데이터 베이스와 연결된 예제 애플리케이션을 실행하기

- Compute Engine에서 인스턴스 만들기

- 외부 IP를 "임시"로 설정해야, 외부 인터넷에서 접근 가능한 ip를 가진 vm이 생성된다.

- cloud shell로 접속 후, jar 파일 이동(gcloud compute scp 명령어 활용)

- java 설치

- java -jar <jar 파일> 수행으로 기동

3. 실행한 애플리케이션이 정상 동작하는지 확인하기

- vm의 외부 IP로 정상 동작 여부 확인

 

[9-4] 아키텍처에 DB 정보를 반영하기

GCP에서 비공개 액세스 영역(Private Google Access)은 VPC(가상 프라이빗 클라우드) 내의 특정 서브넷에 적용되는 설정입니다. 이를 통해 VPC 내의 VM 인스턴스들이 인터넷에 직접 액세스하지 않고도 Google의 API 및 서비스에 접근할 수 있게 됩니다.

비공개 액세스 영역은 VPC 네트워크에서 인터넷 게이트웨이를 거치지 않고 Google Cloud의 서비스에 액세스할 수 있는 방법을 제공하여, 보안적으로 더 안전한 환경을 제공합니다.


추가적으로, GCP에서 Cloud SQL은   할 수 있습니다. 이를 통해 외부 인터넷으로부터 직접 접근을 차단하고, VPC(가상 사설 클라우드) 내에서만 Cloud SQL 인스턴스에 접근하도록 제한할 수 있습니다.

비공개 액세스 설정을 하면, Cloud SQL 인스턴스는 VPC 내에서만 연결될 수 있고, Google Cloud의 다른 리소스들도 VPC 내에서 Cloud SQL에 접근할 수 있습니다. 이렇게 하면 보안이 강화되고, 데이터베이스가 인터넷과 격리되어 더 안전하게 운영될 수 있습니다.

 

VPC의 설정 중 "Subnet"도 있고, "비공개 액세스 설정"이 존재한다. "비공개 액세스 설정"은 VPC 내에서 특정 IP 범위를 지정하여 해당 VPC 내에서만 접근할 수 있도록 하는 비공개 액세스 IP 영역을 만든다?그렇게 설정된 비공개 설정은 Cloud SQL 인스턴스의 비공개 IP로 사용한다.

더보기

1. Cloud SQL 인스턴스를 비공개 IP로 구성할 때 얻을 수 있는 주요 보안 이점은 무엇일까요?

해설보기

해설

비공개 IP를 사용하면 Cloud SQL 인스턴스가 외부 인터넷으로부터 격리되어 VPC 내부 리소스만 접근할 수 있어 보안성이 강화됩니다.

A

데이터 암호화 성능 향상

 

VPC 내부 네트워크에서만 접근 가능

C

자동 백업 기능 필수 활성화

D

인터넷을 통한 모든 연결 허용

 

2. Cloud SQL Studio 사용과 관련된 비용 정책은 어떠한가요?

해설보기

해설

Cloud SQL Studio 도구 자체는 무료로 제공되며, 도구 사용에 대한 직접적인 추가 비용 없이 연결된 인스턴스 비용만 발생합니다.

A

사용 시간에 따라 별도 과금됩니다.

 

Cloud SQL 인스턴스 비용에 포함되어 추가 비용이 없습니다.

C

실행한 쿼리 수에 따라 과금됩니다.

D

처리한 데이터 용량에 따라 과금됩니다.

 

3. Cloud SQL 인스턴스 생성 시 비용 절감을 위해 전용 코어 대신 선택할 수 있는 머신 구성 옵션은 무엇인가요?

해설보기

해설

비용을 최소화하려는 목적으로 인스턴스를 구성할 때, 일반적으로 더 저렴한 공유 코어 머신 타입을 선택할 수 있습니다.

A

고가용성 구성 사용

 

공유 코어 사용

C

저장 용량 자동 증가 사용 설정

D

높은 버전의 데이터베이스 선택

 

4. Compute Engine (GCE) 인스턴스에서 비공개 IP로 구성된 Cloud SQL 인스턴스에 접속하려면 애플리케이션 설정에 어떤 IP 정보를 사용해야 할까요?

해설보기

해설

비공개 IP로 설정된 Cloud SQL은 VPC 내부에서만 접근 가능하며, 앱이 실행되는 GCE는 비공개 IP를 통해 연결해야 합니다.

A

GCE 인스턴스의 외부(Public) IP

 

Cloud SQL 인스턴스의 비공개(Private) IP

C

Cloud SQL 인스턴스의 공개(Public) IP

D

GCP 프로젝트의 기본 게이트웨이 IP

 

5. Cloud SQL Studio가 복잡하거나 대규모 작업을 위한 전문 도구보다 덜 적합한 경우는 언제인가요?

해설보기

해설

Cloud SQL Studio는 간단하고 편리한 도구지만, 복잡한 스크립트 실행이나 대규모 데이터 처리와 분석에는 전문 SQL 클라이언트가 더 효율적입니다.

A

간단한 데이터 탐색 및 시각화 시

B

Cloud SQL 인스턴스 관리 시

C

웹 브라우저를 통해 접근 시

 

복잡한 SQL 쿼리 작성 또는 대규모 데이터 처리 시

[10-1] Cloud LoadBalancer 란?

GCP의 Cloud Load Balancer는 Google Cloud Platform에서 제공하는 완전 관리형 부하 분산 서비스입니다. 이 서비스는 애플리케이션의 트래픽을 여러 서버에 분산시켜 고가용성과 확장성을 보장합니다.
주요 기능은 다음과 같습니다.

1. 글로벌 부하 분산: 전 세계에 분산된 사용자에게 가장 가까운 서버로 트래픽을 라우팅하여 지연 시간을 최소화합니다.

2. 자동 확장: 트래픽 양에 따라 자동으로 서버 인스턴스를 추가하거나 제거하여 효율적인 리소스 사용을 보장합니다.

3. 다양한 부하 분산 옵션: HTTP(S), TCP/SSL, UDP 등 다양한 프로토콜을 지원하는 부하 분산 옵션을 제공합니다.

4. 보안: SSL 인증서 관리, DDoS 방어 등 다양한 보안 기능을 제공합니다.

5. 통합 모니터링 및 로깅: Google Cloud의 모니터링 및 로깅 서비스를 통해 트래픽 및 성능을 실시간으로 모니터링할 수 있습니다.

Cloud Load Balancer를 사용하면 애플리케이션의 성능과 안정성을 높이고, 트래픽 관리가 용이해집니다.


추가 내용 정리

AWS ALB (Application Load Balancer)는 글로벌 부하 분산을 지원하나요?

AWS ALB (Application Load Balancer)는 글로벌 부하 분산을 직접적으로 지원하지 않습니다.

이유는 아래와 같습니다.

    • 지역 기반: ALB는 특정 AWS 리전 내에서 작동하도록 설계되었습니다.
      즉, 하나의 ALB는 단일 리전 내의 다수의 EC2 인스턴스에 트래픽을 분산시키는 역할을 합니다.
    • 글로벌 부하 분산의 필요성: 전 세계적으로 분산된 사용자에게 서비스를 제공하려면 여러 리전에 걸쳐 ALB를 구성하고 이들을 연결하는 추가적인 네트워킹 구성이 필요합니다.
    • 간단하게 그림으로 보자면 아래와 같습니다.

[10-2] 머신 이미지 생성하기

  • Compute Engine    좌측 메뉴 중 "스토리지" → "이미지" → 이미지 만들기 클릭
  • 이미지 만들기 : 이미지 만들기 화면에서 이름을 입력하기
  • 소스 디스크 : jar 파일이 업로드 되어있는 GCE를 선택
  • 리전 : 서울 리전을 선택

나머지 옵션은 기본 설정으로 만들기 클릭하여 생성

  • 생성한 이미지 확인
  • 스토리지 → 필터: 유형, 커스텀을 선택하여 생성한 이미지를 확인

Load Balancer가 고가용성을 확보하려면 인스턴스를 여러개 띄울 수 있어야 하므로, VM의 이미지를 만들어야 한다.

 

[10-3]인스턴스 템플릿 만들기

Compute engine좌측 메뉴 중 "인스턴스 템플릿" → 만들기

  • 이름 입력(명칭에 lb를 추가해주면 좋다.)
  • 리전은 서울리전 선택
  • 머신은 e2 마이크로 선택
  • 부팅 디스크 변경 → 생성한 커스텀 이미지 선택 → 커스텀표준 영구 디스크 선택 후 완료
  • 이미지 선택 → 
  • http, https 트래픽 허용 체크
  • 네트워크에는 생성한 방화벽 규칙 태그 입력 (예 : http-8080-app)
  • 네트워크 인터페이스 → 서브 네트워크 추가 (서울 -a) →
  • 외부 IPv4 주소 없음
  • 관리 자동화 스크립트 : 
    nohup java -jar /home/may9noy1/demo-0.0.1-SNAPSHOT.jar 1>/dev/null 2>&1 &

LoadBalance가 아무리 인스턴스를 늘려도, jar 실행 명령어가 없으면 무의미 하므로, jar 실행 명령어를 같이 템플릿에 명시해주어야 한다.

  • 만들기 클릭하여 생성.

인스턴스 템플릿을 만들려면, 먼저 jar 파일이 담긴 VM의 이미지 파일을 우선적으로 생성해야 한다.

 

[10-4] 인스턴스 그룹 생성

  • Compute engine  인스턴스 그룹 클릭 → 인스턴스 그룹 만들기 클릭
  • 스테이트 리스 상태로 만들기 클릭
  • 이름 입력 (명칭에 lb를 추가해주면 좋다.)
  • 인스턴스 템플릿 선택
  • 위치는 서울리전 선택, az는 a로 선택
  • 인스턴스 갯수최소 2개 or 최대 3개로 설정
  • cpu가 60%가 넘어가면 자동 확장되도록 설정
  • 포트 맵핑 →포트 추가 → server를 입력하고 8080 포트를 맵핑 시킨다.
  • 만들기 클릭하여 생성한다. (
  • 정상적으로 설정 되어 있다면, vm이 2개 추가로 생성된다.)
  • GCE가 자동으로 생성 된 후 방화벽 규칙이 정상적으로 생성되어 있는지 확인한다.
    VPC 네트워크 → 방화벽 이동 → 대상태그 http-8080-app → ip 범위 : 0.0.0.0/0 → tcp 8080 오픈 확인
  • 서비스 확인은 자동으로 생성된 vm에 접속해서 자동 스크립트로 실행한 jar 프로그램이 실행 되고 있는지 확인한다.
  • 인스턴스 그룹을 통해 자동으로 생성된 GCE를 클릭하여 SSH 버튼을 클릭, ssh로 접근 후 ps -ef|grep java 명령어로 java 애플리케이션이 정상적으로 실행 됐는지 확인한다.

 

[10-5] Health Check 만들기

health check (상태 확인 만들기)

  • Compute Engine → 인스턴스 그룹 → 좌측 메뉴 중 "상태 점검" 항목으로 이동
  • 상태 확인 만들기 → 이름 입력
  • tcp 8080, 지역으로 세팅 → 만들기 클릭하여 생성 ? 추가설명 확인

인스턴스 그룹에서, health 체크 리소스 연결

    • 인스턴스 그룹으로 이동
    • 수정 → 자동복구 → 위에서 생성한 헬스체크 리소스 연결
    • 인스턴스 그룹의 vm 인스턴스 리스트에서 상태 확인사항 이라는 항목을 보면 정상이라고 보이면 정상적으로 헬스 체크를 하고 서비스가 정상적으로 떠 있는 상태라고 볼 수 있다.

[10-6] 부하 분산기, Load Balancing 생성하기

  • Load Balancing으로 접속
  • 네트워크 서비스에서 부하분산 클릭
  • 부하분산 만들기 클릭
  • 애플리케이션 부하 분산기 선택
  • 구성 클릭
  • 부하 분산기 이름 입력
  • 프론트엔드 기본 정보 눠두고 완료
  • 백엔드 → 우측에 백엔드 서비스 및 백엔드 버킷 클릭 → 백엔드 서비스 만들기 클릭 → 백엔드 유형을 클릭 후 인스턴스 그룹을 선택 → 아래의 백엔드 추가를 클릭 → 인스턴스 그룹 항목을 선택 후 이전에 생성한 그룹을 지정한다.
  • 상태 확인은 필수, 신규로 생성하여 선택 한다.
  • 고급 구성에서 세션 선호도를 클라이언트 IP로 설정하고 일관된 해시 값은 1024로 설정한다.
    (이는 예제 애플리케이션이 로그인 기능이 있기 때문에 세션을 관리해 줘야 하므로 설정이 필요하다.)
  • 나머지는 기본으로 만들기 클릭하여 만들기 시간은 10분이상 소요됨.

추가로, 로드 밸런서를 생성하고, 서비스가 활성화 되는데까지 20분정도 소요되오니 구성에 참고 바랍니다.

 

LB를 적용하기 위해, VM을 만들고, VM 이미지를 만들고, VM 이미지 템플릿을 만들고, VM 인스턴스 그룹을 만들어야 한다.

LB를 생성 후, 인스턴스그룹을 사용한다.

사용자는 외부 LB ip에 접속하고, LB가 FE/BE를 가용성에 따라 늘렸다가 줄렸다가 해준다.

 

[10-7] 아키텍처에 LoadBalancer를 반영하기

GCP에서 외부 사용자가 EXTERNAL Load Balancer를 통해 프라이빗 인스턴스 그룹에 접근DB 커넥션을 통해 다시 요청한 사용자에게 응답하는 흐름을 인바운드와 아웃바운드로 나누어 설명하겠습니다.

 

인바운드 트래픽 흐름

외부 사용자: 외부 사용자가 웹 브라우저 또는 클라이언트를 통해 요청을 보냅니다.

EXTERNAL Load Balancer: 요청은 EXTERNAL Load Balancer로 전달됩니다. 이 로드 밸런서는 퍼블릭 IP를 가지고 있으며, 트래픽을 프라이빗 인스턴스 그룹으로 라우팅합니다.

프라이빗 인스턴스 그룹: 로드 밸런서가 트래픽을 프라이빗 인스턴스 그룹 내의 하나 이상의 인스턴스로 전달합니다.

애플리케이션 서버: 프라이빗 인스턴스 그룹 내의 애플리케이션 서버가 요청을 처리하고, 필요한 경우 데이터베이스에 접근합니다.

 

아웃바운드 트래픽 흐름

애플리케이션 서버: 애플리케이션 서버가 데이터베이스에서 필요한 데이터를 조회하고, 요청에 대한 응답을 생성합니다.

EXTERNAL Load Balancer: 생성된 응답은 다시 EXTERNAL Load Balancer를 통해 외부 사용자에게 전달됩니다.

외부 사용자: 외부 사용자가 응답을 수신합니다.

 

LoadBalacer의 짝은 항상 Instance Group이 존재해야 한다. Instance Group에는 설정에 따라 최소한 1개 이상의 VM 인스턴스가 기동된다. Instance Group이 하나 만들어지기 위해서는 VM 인스턴스 이미지, 인스턴스 이미지 템플릿이 필수적으로 필요 하다.(jar 파일이 포함된 VM의 패키징된 이미지, jar 파일을 실행하는 명령어를 포함한 템플릿) 선택적으로 Health Check 리소스를 만들어서 인스턴스 그룹에 적용시킬 수 있다.

Instance Group은 인스턴스 템플릿으로 인스턴스를 만든다. 인스턴스 생성 시, 인스턴스에 적용되어 있는 방화벽도 같이 적용된다.

 

더보기

1. 클라우드 부하 분산기를 사용하는 주된 목적은 무엇일까요?

해설보기

해설

부하 분산기는 여러 서버에 트래픽을 분산시켜 하나의 서버에 문제가 생겨도 서비스가 유지되게 하고, 트래픽 양에 따라 서버 수를 자동으로 조절하여 안정적인 운영을 돕습니다.

A

데이터베이스 보안 강화

B

단일 서버의 성능 최대화

 

애플리케이션의 고가용성과 확장성 확보

D

네트워크 트래픽 감축

 

2. 로드 밸런싱 구성 시, VM 인스턴스의 설정(머신 타입, 디스크 이미지 등)을 정의하고 인스턴스 그룹 생성의 기반이 되는 구성 요소는 무엇일까요?

해설보기

해설

인스턴스 템플릿은 새로운 VM 인스턴스를 만들 때 필요한 모든 설정을 미리 정의해 놓은 것으로, 인스턴스 그룹이 동일한 구성의 인스턴스를 대량으로 생성하고 관리하는 데 사용됩니다.

A

머신 이미지

 

인스턴스 템플릿

C

인스턴스 그룹

D

상태 확인

 

3. 로드 밸런싱 환경에서 인스턴스 그룹에 연결된 '상태 확인(Health Check)'의 역할은 무엇일까요?

해설보기

해설

상태 확인은 로드 밸런서가 트래픽을 전달할 백엔드 인스턴스가 정상 상태인지 주기적으로 점검하여, 문제가 있는 인스턴스에는 트래픽을 보내지 않도록 하는 중요한 기능입니다.

A

로드 밸런서 비용 산정

B

백엔드 인스턴스의 CPU 사용률 모니터링

 

인스턴스가 정상적으로 작동하는지 주기적으로 확인

D

인스턴스에 데이터 자동 백업

 

4. 애플리케이션 로드 밸런서 구성에서 '세션 선호도(Session Affinity)'를 설정하는 주된 목적은 무엇일까요?

해설보기

해설

세션 선호도는 특정 사용자의 연속된 요청이 항상 동일한 백엔드 인스턴스로 라우팅되도록 하여, 세션 상태 유지가 중요한 애플리케이션(예: 로그인 서비스)에 유용합니다.

A

로드 밸런서 응답 속도 향상

B

백엔드 인스턴스 간 트래픽 완전 균등 분배

 

동일 사용자의 요청이 같은 인스턴스로 지속 연결되도록 유지

D

보안 위협 트래픽 차단

 

5. 외부 사용자가 외부 로드 밸런서를 통해 프라이빗 인스턴스 그룹에 접근할 때, 인바운드 트래픽의 일반적인 흐름은 어떠할까요?

해설보기

해설

외부 사용자의 요청은 공용 IP를 가진 외부 로드 밸런서로 먼저 도달하고, 로드 밸런서는 해당 요청을 내부 네트워크에 있는 프라이빗 인스턴스 그룹 내의 적절한 인스턴스로 라우팅합니다.

A

사용자 → 프라이빗 인스턴스 그룹 → 외부 로드 밸런서

 

사용자 → 외부 로드 밸런서 → 프라이빗 인스턴스 그룹

C

사용자 → 데이터베이스 → 외부 로드 밸런서

D

외부 로드 밸런서 → 사용자 → 프라이빗 인스턴스 그룹

[11-1] Domain 이란?

도메인(Domain)은 인터넷에서 웹사이트나 애플리케이션에 접근할 수 있는 주소를 의미합니다.
도메인은 사람이 읽을 수 있는 형태의 주소로, IP 주소와 매핑되어 사용자가 쉽게 접근할 수 있도록 합니다.

예를 들어, example.com과 같은 도메인은 특정 IP 주소와 연결되어 해당 서버에 접근할 수 있게 합니다.
GCP에서는 도메인과 관련된 다양한 서비스를 제공하며, 대표적으로 다음과 같은 서비스가 있습니다.

Cloud DNS: 도메인 이름을 IP 주소로 변환하는 DNS(Domain Name System) 서비스를 제공합니다.

Google Domains: 도메인 등록 및 관리를 위한 서비스입니다.

App 배포: 예를들어 App Engine등을 활용하여 도메인을 연결하고 애플리케이션을 배포할 수 있습니다.

이와 같이 GCP에서는 도메인과 관련된 다양한 기능을 제공하여 웹사이트나 애플리케이션을 쉽게 관리하고 배포할 수 있도록 지원합니다.

AWS의 Route 53과 비슷하다

[11-2] Domain 구매하기

무료 도메인 :https://xn--220b31d95hq8o.xn--3e0b707e/page/domain_conf_list.php

GCP에서도 도메인 서버를 제공하지만, 보통 비싸므로 무료 도메인 서비스를 이용한다.

 

[11-3] LoadBalancer 수정하기 (Domain 적용)

생성한 도메인을 LoadBalancer에 적용하기 위해서는 로드 밸런서의 호스트 및 경로규칙을 수정해야 한다.

호스트1 에는 생성한 도메인 주소를 입력.

경로1 에는 접속할 root 경로를 입력, 보통 / 이다.

백엔드1 에는 이전에 생성한 백엔드를 넣어준다.


"Load Balancing( 부하 분산 )" 서비스 접속 후, 하여, 도메인을 등록할 수 있다.

 

프론트엔드 설정 변경

80포트로 http 연결

  • 프로토콜 HTTPS(HTTP/2 포함)
  • 네트워크 서비스 계층 : 테스트 환경이니 표준 선택
  • 포트는 443
  • 인증서만들기 클릭하여 인증서를 만든다.

인증서 만들기

  • 인증서 이름 입력
  • 생성모드 : Google 관리 인증서 만들기 선택
  • 아래의 도메인에 생성한 도메인 주소를 입력 (생성했던 도메인주소가 사용된다.)

라우팅 규칙 변경

  • 도메인 주소 입력 후, 경로(/)와 인스턴스 지정(Be)

 

위의 과정을 모두 완료 후 LB를 업데이트 한다.

 

[11-4] Cloud DNS를 통해 IP와 도메인 주소를 맵핑

Cloud DNS란?

Google Cloud DNS는 Google Cloud Platform(GCP)에서 제공하는 확장 가능하고 신뢰할 수 있는 고성능 관리형 DNS(Domain Name System) 서비스입니다.
이를 통해 도메인 이름을 IP 주소로 변환하는 작업을 쉽게 관리할 수 있으며, 전 세계적으로 분산된 인프라를 통해 빠르고 안정적인 DNS 해석을 제공합니다.
Cloud DNS는 REST API를 통해 프로그래밍 방식으로 관리할 수 있으며, 높은 가용성과 보안을 제공합니다.


Cloud DNS 서비스로 이동한다.

  • DNS 영역 만들기 클릭
  • 영역 유형 : 공개, 영역 이름 입력, DNS는 이전에 생성한 DNS 주소 입력, DNSSEC 사용 안함, Cloud Logging 사용안함 선택만들기 클릭하여 생성한다.

생성한 도메인을 클릭하고 레코드 세트를 추가 (아래와 같이 추가)

 

[11-5] 전체적인 흐름 설명 및 아키텍처에 도메인 내용 업데이트 하기

인바운드 트래픽 흐름

  1. 외부 사용자: 외부 사용자가 웹 브라우저나 클라이언트에서 https://yourdomain.com으로 요청을 보냅니다.
  2. Cloud DNS: 도메인 네임 시스템(DNS)이 요청을 External Load Balancer의 공인 IP 주소로 라우팅합니다.
  3. SSL 인증서 적용: External Load Balancer사전에 설정된 SSL 인증서(Google-managed SSL Certificates 또는 자체 인증서)를 사용HTTPS 트래픽을 복호화합니다.
  4. External Load Balancer: SSL이 종료된 후 로드 밸런서는 트래픽을 백엔드 서비스로 전달하며, 백엔드 서비스는 인스턴스 그룹에 연결되어 있습니다.
  5. 인스턴스 그룹: External Load Balancer트래픽을 인스턴스 그룹의 헬스 체크를 통과한 인스턴스에 분산시킵니다.
  6. 애플리케이션 서버(Spring Boot): 요청을 처리하고, 필요 시 VPC 네트워크를 통해 PostgreSQL로 쿼리를 보냅니다.

아웃바운드 트래픽 흐름

  1. 애플리케이션 서버 (Spring Boot) : PostgreSQL에서 데이터를 조회하고, 사용자 요청에 대한 응답을 생성합니다.
  2. External Load Balancer: 애플리케이션 서버의 응답을 다시 External Load Balancer로 전송합니다.
  3. SSL 재암호화(Optional): 필요 시, External Load Balancer는 응답 데이터를 SSL로 암호화하여 외부 사용자에게 보냅니다.
  4. 외부 사용자: 최종적으로 암호화된 응답을 수신합니다.

이와 같은 구조로 보안성과 안정성을 확보할 수 있습니다.

 

더보기

1. 인터넷에서 도메인은 무엇을 의미하나요?

해설보기

해설

도메인은 복잡한 IP 주소 대신 사람들이 쉽게 기억하고 입력할 수 있는 형태로 웹사이트나 애플리케이션에 접근하는 주소를 의미해요. IP 주소와 매핑되어 사용됩니다.

A

서버의 내부 IP 주소

 

사람들이 기억하기 쉬운 인터넷 주소

C

데이터베이스 연결 설정 값

D

애플리케이션 배포 패키지 이름

 

2. Google Cloud DNS의 주된 역할은 무엇인가요?

해설보기

해설

Cloud DNS는 사용자가 입력한 도메인 이름을 실제 서비스가 실행되는 서버의 IP 주소로 변환하여 요청이 올바른 곳으로 전달되도록 하는 핵심적인 DNS 서비스에요.

A

도메인을 구매하고 관리하는 것

 

도메인 이름을 IP 주소로 바꿔주는 것

C

웹 트래픽을 여러 서버로 분산하는 것

D

애플리케이션 코드를 실행하는 것

 

3. 웹사이트 접속 시 보안(HTTPS)을 위해 SSL 인증서는 보통 어디에 적용되나요?

해설보기

해설

외부 로드 밸런서에서 SSL 인증서를 적용하면 사용자와 로드 밸런서 간의 통신이 암호화되어 보안이 강화돼요. 이를 SSL 종료라고 합니다.

A

개별 백엔드 인스턴스

B

Cloud DNS 영역

 

외부 로드 밸런서

D

사용자의 웹 브라우저

 

4. 로드 밸런서 프론트엔드에서 사용하는 안전한 연결의 프로토콜/포트는 무엇인가요?

해설보기

해설

웹사이트의 보안 연결에는 HTTPS 프로토콜이 사용되며, 기본 포트는 443입니다. 로드 밸런서의 프론트엔드는 이 설정을 사용해요.

A

HTTP, 80

 

HTTPS, 443

C

TCP, 22

D

UDP, 53

 

5. 사용자의 도메인 요청을 로드 밸런서 IP로 연결해주는 역할은 무엇인가요?

해설보기

해설

사용자가 도메인 주소로 요청을 보내면, Cloud DNS가 해당 도메인과 연결된 로드 밸런서의 공인 IP 주소를 찾아 사용자 요청이 로드 밸런서로 전달되게 합니다.

A

애플리케이션 서버

 

Cloud DNS

C

인스턴스 그룹

D

PostgreSQL 데이터베이스

[12-1] GCS (Google Cloud Storage) 란?

GCP의 GCS는 Google Cloud Storage의 약자로, Google Cloud Platform에서 제공하는 객체 스토리지 서비스입니다.

AWS의 S3와 같다.

GCS는 대규모 데이터를 저장하고 관리할 수 있는 안정적이고 확장 가능한 스토리지 솔루션을 제공합니다.

확장성: 페타바이트 이상의 데이터를 저장할 수 있으며, 자동으로 확장됩니다.

내구성: 데이터의 내구성을 보장하기 위해 여러 지역에 걸쳐 복제됩니다.

보안: 데이터 암호화 및 다양한 접근 제어 옵션을 제공합니다.

비용 효율성: 사용한 만큼만 비용을 지불하는 유연한 가격 정책을 제공합니다.

통합성: 다른 GCP 서비스와 쉽게 통합할 수 있습니다.

GCS는 주로 백업, 아카이빙, 빅데이터 분석, 콘텐츠 저장 및 배포 등에 사용됩니다.

[12-2] GCS 생성하기

1. GCP 콘솔로 이동 → GCS(Cloud Storage) 서비스 화면으로 이동 한다.

2. GCS 서비스에서 버킷 만들기를 클릭하여 버킷을 만드는 화면으로 이동한다.

3. 버킷 이름은 고유하고 영구적인 이름을 선택 해야한다. (버킷 이름이 중복되면 사용하지 못한다.)

4. 나는 gcp-dev-pjt-test-01 이라는 버킷 이름을 사용 하였다.

5. 데이터 저장 위치 선택 → 단일 Region을 선택 → asia-northeast3 (서울) 리진을 선택

6. 데이터의 스토리지 클래스는 기본 클래스 설정에 Standard를 선택한다.(Standard는 자주 액세스하는 데이터)

7. 객체 엑세스 제어 방식 설정 : 균일한 엑세스 제어를 선택 후 계속으로 다음 진행.(버킷 수준의 IAM 기반 권한 만 적용, 객체 수준의 권한(ACL)도 적용할 수 있다.)

8. 객체 데이터를 보호하는 방법에서 데이터 보호 정책에 체크박스를 해제 후 다음으로 이동한다.

9. 마지막으로 만들기를 클릭하여 GCS를 생성한다.

공개 액세스 방지 옵션으로, public 하게  생성되는 것을 막을 수 있다.

[12-3] GCS를 사용하기 (GCS 객체 생성)

1. 구글 인터넷 검색을 통해 하나의 이미지를 다운르도 후 GCS에 업로드를 한다.(콘솔에서 Cloud Storage 버킷 상세에서

2. GCP 로고를 다운받고 해당 파일을 GCS에 업로드 한다.

3. 업로드 후 파일의 내용을 보면 공개 URL과 비공개 URL등의 주요 정보를 확인 할 수 있다.

4. 만약 해당 GCS 버킷을 공개로 전환 하고자 한다면 "권한" 탭에서 버킷의 공개 액세스 방지를 삭제 후, "엑세서 권한 부여" 버튼을 클릭하여, "allUsers"를 대상으로
그리고 역할에는 "저장소 기존 객체 리더" 역할을 부여 해줘야 한다. (공개 Bucket으로 만드려면 해당 작업 필수)

5. 외부에서 해당 버킷의 객체 파일을 클릭하면 공개 URL정보와 인증된 URL 정보를 모두 확인 할 수 있다.

6. 공개 URL 정보를 클릭하면 권한이 없는 사용자도 해당 파일을 실행 할 수 있다.

7. 다시 비공개 엑세스 버킷으로 변경 하려면 해당 버킷으로 이동하고, 공개 액세스 방지 버튼을 클릭하여

다시 비공개 버킷으로 변경한다.

8. 다시 버킷에 업로드된 객체로 이동하면 공개 URL이 삭제된것을 확인 할 수있다.

[12-4] BigQuery에서 사용할 데이터를 업로드 하기

BigQuery에서 사용할 데이터를 업로드 하겠습니다.(보통 BigQuery는 csv 파일 사용되는 듯)

아래의 URL로 이동하여 CSV 파일을 로컬 PC에 다운로드 받습니다.

URL: https://drive.google.com/drive/folders/1u4_77pGtOcqfGhmpjEz5nMs0BVWTOWTU?usp=drive_link

S3에 아파트_거래_2022년.csv 파일과 시군구코드.csv 파일을 업로드 합니다.

더보기

1. GCS는 Google Cloud Platform에서 제공하는 어떤 유형의 스토리지 서비스인가요?

해설보기

해설

GCS는 파일 시스템 구조가 아닌 객체를 저장하고 관리하는 서비스로, 대규모 비정형 데이터에 적합합니다.

A

데이터베이스 (Database)

 

객체 스토리지 (Object storage)

C

블록 스토리지 (Block storage)

D

파일 스토리지 (File storage)

 

2. 다음 중 Google Cloud Storage(GCS)의 주요 특징이 아닌 것은 무엇인가요?

해설보기

해설

GCS는 데이터 증가에 따라 자동으로 확장되지만, 사용량이 줄어든다고 자동으로 축소되는 기능은 기본 제공되지 않습니다.

A

뛰어난 확장성 (Excellent scalability)

 

자동으로 축소되는 용량 (Automatically shrinking capacity)

C

높은 내구성 (High durability)

D

다른 GCP 서비스와의 쉬운 통합 (Easy integration with other GCP services)

 

3. GCS 버킷 생성 시 데이터의 저장 위치를 결정하는 설정이 가장 크게 영향을 미치는 요소는 무엇일까요?

해설보기

해설

저장 위치(단일 리전, 멀티 리전 등)는 데이터 엑세스 속도, 장애 발생 시 복구 능력 및 비용에 영향을 줍니다.

A

버킷의 이름 규칙 (Bucket naming rules)

B

사용할 수 있는 스토리지 클래스 종류 (Types of storage classes available)

 

데이터의 가용성과 엑세스 지연 시간 (Data availability and access latency)

D

객체당 최대 파일 크기 (Maximum file size per object)

 

4. GCS에서 자주 엑세스하거나 단기간 저장할 데이터에 가장 비용 효율적이고 빠른 엑세스를 제공하는 스토리지 클래스는 무엇인가요?

해설보기

해설

Standard 클래스는 엑세스 빈도가 높은 데이터에 최적화되어 있으며, 빠른 엑세스 속도를 제공합니다.

A

Archive (Archive)

B

Coldline (Coldline)

 

Standard (Standard)

D

Nearline (Nearline)

 

5. GCS 버킷이나 특정 객체를 인터넷상의 '모든 사용자(allUsers)'가 엑세스(읽기)할 수 있도록 공개 설정하려면 어떻게 해야 할까요?

해설보기

해설

객체를 공개하려면 'allUsers'에게 '저장소 객체 리더' 권한을 부여하고 버킷 수준의 공개 액세스 방지 설정을 해제해야 합니다.

A

GCS 콘솔에서 '공개 액세스 방지' 옵션을 활성화한다.

B

버킷 이름을 'public-'으로 시작하게 변경한다.

C

'allUsers'에게 '저장소 관리자' 역할을 부여한다.

 

'allUsers'에게 '저장소 객체 리더' 역할을 부여하고 공개 액세스 방지를 해제한다.

[13-1] BigQuery 란?

GCP의 BigQuery는 Google Cloud Platform에서 제공하는 완전 관리형 데이터 웨어하우스 서비스입니다.
BigQuery는 대규모 데이터 분석을 위해 설계되었으며, 빠르고 효율적인 SQL 쿼리를 통해 페타바이트 규모의 데이터를 처리할 수 있습니다. 주요 특징은 다음과 같습니다.

 

완전 관리형: 인프라 관리가 필요 없으며, 자동으로 확장되고 최적화됩니다.

고속 쿼리 처리: 대규모 데이터를 빠르게 분석할 수 있는 고성능 쿼리 엔진을 제공합니다.

실시간 데이터 분석: 스트리밍 데이터를 실시간으로 분석할 수 있습니다.

비용 효율성: 사용한 만큼만 비용을 지불하는 유연한 가격 정책을 제공합니다.

보안 및 규정 준수: 데이터 암호화, 접근 제어, 감사 로그 등 다양한 보안 기능을 제공합니다.

BigQuery는 대규모 데이터 분석을 필요로 하는 기업이나 조직에 적합한 서비스입니다.

 

GCP가 AI나 빅데이터 부분에서는 타 CSP 대비 탁월한 측면이 있다.

 

BigQuery Studio란 콘솔 상에서, BigQuery 작업을 할 수 있는 에디터를 제공한다.

 

[13-2] BigQuery 사용하기

<<실습 Start>>

"+추가" 버튼 클릭 후 "Google Cloud Storage"로 시작하기 선택

- csv 파일이 업로드 되어 있는 버킷 선택

- BigQuery에 추가할 csv 파일 선택

- 데이터셋명지정(단일 리전, 서울)/테이블명 지정/기본 테이블/스키마 자동감지

- 생성 후, 쿼리 수행하여 테스트

<<실습 End>>

SELECT 
  a.`지역코드`,
  b.`시도`,
  a.`법정동`,
  a.`거래일`,
  a.`아파트`,
  a.`지번`,
  a.`전용면적`,
  a.`층`,
  a.`건축년도`,
  a.`거래금액`
FROM 
  `{사용자의 BigQuery 테이블 이름}` AS a
JOIN 
  `{사용자의 BigQuery 테이블 이름}` AS b
ON 
  a.`지역코드` = b.`지역코드`;

 

[13-3] BigQuery에서 Looker Studio를 활용해 데이터 시각화 하기

    1. BigQuery에서 실행할 쿼리를 준비한다.
    2. SELECT a.`지역코드` as region_code, b.`시도` as city, a.`법정동` as legal_dong, a.`거래일` as transaction_date, a.`아파트` as apartment, a.`지번` as lot_number, a.`전용면적` as exclusive_area, a.`층` as floor, a.`건축년도` as construction_year, a.`거래금액` as transaction_amount FROM `wide-strength-446602-s8.gcp_dev_bigquery_apt_01.apt-deal-2022` AS a JOIN `wide-strength-446602-s8.gcp_dev_bigquery_sigungucode_01.sigungucode-01` AS b ON a.`지역코드` = b.`지역코드`;
    3. Looker Studio를 실행 시킨다.
        • BigQuery 쿼리 화면에서, 조회 후 우측 상단에 "다음에서 열기"를 선택하여 접근 할 수 있다.
        • BigQuery 화면에서 아래의 아이콘을 클릭하여 Looker Studio를 실행 시킨다.
    4. Looker Studio로 이동하여 작업을 진행한다.
      • 기본 도표를 자동으로 만들어 준다. 그래프가 정확하지 않으니 수정이 필요하다.
      • 차트 설정 등으로 조정 가능하다.
    5. 수정한 그래프는 아래와 같은 형태로 만들 수 있다.

더보기

1. BigQuery의 주된 기능이나 역할은 무엇일까요?

해설보기

해설

BigQuery는 페타바이트 규모의 대규모 데이터를 효율적으로 분석하기 위해 설계된 Google Cloud의 완전 관리형 데이터 웨어하우스 서비스입니다.

A

실시간 웹 애플리케이션 호스팅

 

대규모 데이터 분석용 데이터 웨어하우스

C

가상 머신 생성 및 관리

D

모바일 앱 개발 플랫폼

 

2. BigQuery의 '완전 관리형(fully managed)' 서비스 특징이 의미하는 것은 무엇인가요?

해설보기

해설

완전 관리형 서비스로서 BigQuery는 사용자가 서버 운영이나 유지보수 걱정 없이 데이터 분석에 집중할 수 있도록 Google Cloud가 모든 인프라를 관리합니다.

A

데이터 저장 용량에 제한이 있습니다.

B

사용자가 직접 서버를 설치하고 관리해야 합니다.

 

Google Cloud가 인프라 관리와 확장을 자동으로 처리합니다.

D

SQL 쿼리만 사용할 수 없습니다.

 

3. 강의에서 BigQuery 테이블로 데이터를 로드하기 위해 원본 파일이 저장되어 있던 GCP 서비스는 무엇이었나요?

해설보기

해설

강의에서는 Cloud Storage (GCS)에 업로드된 CSV 파일을 소스로 사용하여 BigQuery에 새로운 테이블을 생성하고 데이터를 로드하는 과정이 시연되었습니다.

A

Cloud SQL

 

Cloud Storage (GCS)

C

Compute Engine

D

Cloud Functions

 

4. 두 개 이상의 BigQuery 테이블에서 특정 조건을 만족하는 행들을 합쳐서 조회할 때 사용되는 SQL 연산자는 무엇인가요?

해설보기

해설

JOIN 연산자는 두 테이블 간의 관련 있는 컬럼(예: 지역코드)을 기준으로 데이터를 연결하여 하나의 결과 집합으로 만들 때 사용되는 기본적인 SQL 기능입니다.

A

UNION

B

GROUP BY

 

JOIN

D

ORDER BY

 

5. BigQuery에 저장된 데이터를 시각화하기 위해 강의에서 사용 및 소개된 Google 도구는 무엇인가요?

해설보기

해설

강의 마지막 부분에서는 BigQuery 콘솔에서 바로 Looker Studio를 실행하여 BigQuery 데이터를 기반으로 차트와 대시보드를 만드는 방법을 보여주었습니다.

A

Dataflow

 

Looker Studio

C

Dataproc

D

Bigtable

[14-1] GKE (Google Kubernetes Engine) 이란?

GKE(Google Kubernetes Engine)는 Google Cloud Platform(GCP)에서 제공하는 관리형 Kubernetes 서비스입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 관리, 확장, 네트워킹, 자동화를 위한 오픈소스 플랫폼이고, GKE는 이를 쉽게 사용할 수 있도록 지원합니다.

GKE의 주요 특징

  1. 자동화된 관리
    • 클러스터 생성, 유지보수, 업데이트, 확장 등을 자동으로 처리합니다.
    • 자동 복구(Auto-repair)와 자동 업그레이드(Auto-upgrade) 기능을 통해 안정성을 제공합니다.
  2. 확장성(Scalability)
    • 워크로드 변화에 따라 자동으로 노드를 추가하거나 줄일 수 있습니다(Auto-scaling).
    • Pod 수준의 자동 확장(Horizontal Pod Autoscaling)도 지원합니다.
  3. 보안(Security)
    • Google Cloud의 보안 인프라를 활용하여 안전한 환경을 제공합니다.
    • VPC 네트워킹, IAM(Identity and Access Management), 비공개 클러스터 설정 등이 가능합니다.
  4. 통합 모니터링 및 로깅
    • Cloud Monitoring 및 Cloud Logging과 연동되어 클러스터와 애플리케이션 상태를 실시간으로 모니터링하고 로그를 분석할 수 있습니다.
  5. 하이브리드 및 멀티 클라우드 지원
    • Anthos와 결합해 온프레미스 또는 다른 클라우드 환경에서도 Kubernetes를 운영할 수 있습니다.
  6. 자동 롤아웃 및 롤백
    • 애플리케이션 업데이트 시 자동으로 롤아웃하고 문제가 발생하면 롤백도 자동으로 처리할 수 있습니다.

GKE 구성 요소

  1. 노드(Node): Kubernetes 클러스터의 구성원으로, 실제 컨테이너가 배포되는 VM(가상 머신)입니다.
  2. 클러스터(Cluster): 노드들의 집합으로, 워크로드를 배포하고 관리합니다.
  3. 파드(Pod): 하나 이상의 컨테이너를 포함하는 가장 작은 배포 단위입니다.
  4. 네임스페이스(Namespace): 자원 분리 및 관리 단위로, 여러 프로젝트나 팀이 같은 클러스터를 효율적으로 사용할 수 있도록 지원합니다.
  5. 서비스(Service): 파드 간 네트워크 연결 및 로드밸런싱을 담당합니다.

GKE의 장점

  • 운영 간소화: 인프라 관리 부담을 줄여 DevOps 및 개발팀이 애플리케이션에 집중할 수 있도록
  • 유연한 확장성: 트래픽 급증에도 자동으로 대응 가능
  • 비용 효율성: 사용한 만큼 지불하는 Pay-as-you-go 방식으로 효율적인 비용 관리

GKE는 특히 컨테이너 기반 애플리케이션을 클라우드 환경에서 안정적으로 운영하려는 기업에 적합한 서비스입니다.

 

[14-2] GKE에서 Autopilot과 Standard에 대해서 알아 보기

GKE(Google Kubernetes Engine)에는 두 가지 운영 모드가 있습니다: Autopilot과 Standard.
각각의 특징은 다음과 같습니다.

Autopilot 모드

완전 관리형: Google이 클러스터의 인프라를 완전히 관리합니다.
노드 구성, 업그레이드, 패치 등을 자동으로 처리합니다.

비용 효율성: 사용한 리소스에 대해서만 비용을 지불합니다.
노드 크기와 수를 자동으로 조정하여 비용을 최적화합니다.

보안 및 규정 준수: Google의 보안 모범 사례가 기본적으로 적용됩니다.
보안 설정과 규정 준수를 자동으로 관리합니다.

간편한 설정: 클러스터 설정이 간단하며, 운영 부담이 적습니다.

Standard 모드

유연성: 사용자가 클러스터와 노드를 직접 관리할 수 있습니다.
노드 풀, 업그레이드, 네트워킹 등을 사용자 정의할 수 있습니다.

세부 제어: 클러스터의 모든 구성 요소에 대해 세부적으로 제어할 수 있습니다.
특정 요구 사항에 맞게 클러스터를 최적화할 수 있습니다.

비용 관리: 사용자가 직접 노드 크기와 수를 관리하여 비용을 제어할 수 있습니다.
필요에 따라 리소스를 조정할 수 있습니다.

고급 기능: 고급 네트워킹, 사용자 정의 메트릭, 로깅 등 다양한 기능을 사용할 수 있습니다.

 

Autopilot 모드는 운영 부담을 줄이고 자동화를 통해 효율성을 높이고자 하는 사용자에게 적합하며,
Standard 모드는 세부적인 제어와 유연성을 필요로 하는 사용자에게 적합합니다.

본 강의에서는 Autopilot 모드로 GKE를 생성하고 Nginx 웹서버를 배포하는 과정에 대해서 알아 봅니다.

 

[14-3] GKE Autopilot으로 구성 후 Nginx 웹서버 배포 하기

<<실습 Start>>

"Kubernetis Engine" 접속 후, "클러스터" 메뉴에서, "Autopilot 클러스터 만들기" 버튼을 통해 접속

- 클러스터명 입력

- 리전 설정

- VPC/서브넷 설정

- 대상 출시 채얼 : 일반(권장)

- 나머지 기본

- "클러스터 만들기"

 

- 생성된 클러스터 상세에서, "연결" 버튼을 클릭하면, Cloud Shell로 접속 가능하다.

 

- "워크로드" 메뉴에서, "배포 만들기" 클릭해서, 컨테이너식 애플리케이션 배포를 수행한다.

 

<<실습 End>>

 

클러스터에 "Cloud Shell"로 접속 후, 아래 명령어로 nginx 관련 파일 생성

vi나 vim을 활용하여 아래의 파일들을 생성 합니다.

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: nginx
  annotations:
    alb.ingress.kubernetes.io/healthcheck-path: "/healthy"
spec:
  selector:
     app: nginx
  type: NodePort
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: nginx
  annotations:
    kubernetes.io/ingress.class: "gce"  # GCLB 사용
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "nginx-service"
                port:
                  number: 8080

위에서 생성한 파일들의 실행 명령어는 아래와 같습니다.

-- namespace 생성
kubectl create ns(namespace) nginx
-- deployment 생성 및 실행
kubectl apply -f deployment.yaml
-- service 생성 및 실행
kubectl apply -f service.yaml
--ingress 생성 및 실행
kubectl apply -f ingress.yaml

리소스 확인 명령어 모음

deployment 확인 : kubectl describe pod nginx-8495c67767-hptr7 -n nginx

service 확인 : kubectl describe svc nginx-service -n nginx

Ingress 확인 : kubectl describe ingress nginx-ingress -n nginx

 

생성된 서비스를 확인하면 아래와 같습니다.

ingress.yaml 에 의해, 자동으로 Load Balancing 리소스가 생성된다.

더보기

1. GKE(Google Kubernetes Engine)는 Google Cloud Platform(GCP)에서 제공하는 어떤 종류의 서비스인가요?

해설보기

해설

GKE는 컨테이너화된 애플리케이션 배포와 관리를 자동화하는 Kubernetes를 구글 클라우드에서 쉽게 사용할 수 있게 제공하는 서비스예요.

A

가상 머신 관리 서비스

B

데이터베이스 관리 서비스

 

관리형 Kubernetes 서비스

D

오브젝트 스토리지 서비스

 

2. 다음 중 GKE의 주요 특징이 아닌 것은 무엇일까요?

해설보기

해설

GKE는 애플리케이션 업데이트 시 자동으로 롤아웃하고 문제가 발생하면 롤백도 자동 처리하는 기능을 제공하여 수동 작업 부담을 줄입니다.

A

자동화된 클러스터 관리 및 복구

B

유연한 확장성 (Auto-scaling)

 

수동으로만 가능한 애플리케이션 업데이트

D

Google Cloud 보안 인프라 활용

 

3. Kubernetes 클러스터에서 컨테이너가 배포되는 가장 작은 단위는 무엇일까요?

해설보기

해설

파드는 하나 이상의 컨테이너를 담는 쿠버네티스의 기본 배포 단위예요. 노드 위에 파드가 실행됩니다.

A

Node

B

Cluster

 

Pod

D

Service

 

4. GKE의 두 가지 운영 모드 중, Google이 클러스터 인프라(노드 구성, 업그레이드 등)를 완전 관리하여 운영 부담이 적은 모드는 무엇인가요?

해설보기

해설

Autopilot은 노드 관리, 스케일링, 보안 등을 구글이 자동 처리해 사용자는 애플리케이션에만 집중할 수 있죠.

A

Standard 모드

B

Custom 모드

C

Flexible 모드

 

Autopilot 모드

 

5. GKE 클러스터 내부에 배포된 애플리케이션에 외부에서 접속할 수 있도록 경로를 설정하고 로드밸런싱 기능을 제공하는 Kubernetes 리소스는 무엇일까요?

해설보기
A

Deployment

B

Namespace

 

Ingress

D

Pod

 

[15-1] Google Cloud Monitoring 서비스란?

AWS의 Cloud Watch와 같다.

GCP의 모니터링 서비스는 Google Cloud Monitoring입니다.
이 서비스는 Google Cloud Platform(GCP) 및 하이브리드 클라우드 인프라의 성능, 가용성 및 상태를 모니터링할 수 있도록 도와줍니다.

메트릭 수집 및 시각화: 다양한 GCP 서비스 및 애플리케이션에서 메트릭을 수집하고, 이를 대시보드에서 시각화할 수 있습니다.

알림 설정: 특정 조건이 충족되면 알림을 받을 수 있도록 경고를 설정할 수 있습니다. 예를 들어, CPU 사용률이 일정 수준을 초과할 때 알림을 받을 수 있습니다.

로그 통합: Google Cloud Logging과 통합되어 로그 데이터를 분석하고, 문제를 신속하게 파악할 수 있습니다.

서비스 모니터링: GCP 서비스의 상태를 모니터링하고, 서비스 중단이나 성능 저하를 감지할 수 있습니다.

자동화된 대시보드: 사전 구성된 대시보드를 사용하여 주요 GCP 서비스의 상태를 쉽게 모니터링할 수 있습니다.

Google Cloud Monitoring을 사용하면 인프라와 애플리케이션의 상태를 실시간으로 모니터링하고, 문제를 신속하게 감지하고 해결할 수 있습니다.

 

<<실습 Start>>

"모니터링"으로 진입 가능하다.

<<실습 End>>

 

[15-2] Google Cloud Monitoring 서비스 둘러보기


GCP 클라우드 모니터링 대시보드

Compute Engine에서, "관측 가능성" 항목에서, "로깅 에이전트 생성" 관련된 항목 체크
(보통 리소스 생성 시 로깅 에이전트 관련 선택값 제공함)

GCP 클라우드 모니터링에서 생성되는 대시보드는 사용자가 최근에 사용했던 서비스들에 대한 정보를 자동으로 제공해줍니다.

GCP 클라우드 모니터링의 자동 대시보드 특징

  • 자동 생성: 사용자가 특정 서비스를 생성하거나 사용하면, 모니터링 시스템이 자동으로 해당 서비스에 대한 대시보드를 생성합니다.
  • 주요 메트릭 제공: CPU 사용량, 메모리 사용량, 네트워크 트래픽 등 각 서비스의 주요 메트릭을 시각화하여 보여줍니다.
  • 사전 정의된 차트: 서비스별로 일반적으로 필요한 차트가 사전에 정의되어 있어 별도의 설정 없이 바로 확인할 수 있습니다.
  • 맞춤 설정 가능: 필요에 따라 차트를 추가하거나 수정하여 더욱 상세한 정보를 얻을 수 있습니다.

"대시보드", "로그 탐색기", "알림" 기능이 보통 핵심적이다.

 

<<실습 Start>>

알림을 구성하는 방법

"알림" 메뉴 접속

"알림 정책" 만들기

<<실습 End>>

[16-1] AgentBuilder(AI Applications)

GCP의 Agent Builder(AI Applications)는 Google Cloud Platform에서 제공하는 도구로, 사용자가 대화형 에이전트를 쉽게 만들고 관리할 수 있도록 도와줍니다.

이 도구는 주로 Dialogflow를 기반으로 하며, 자연어 처리(NLP) 기술을 활용하여 사용자와의 대화를 이해하고 응답할 수 있는 챗봇이나 가상 비서를 구축하는 데 사용됩니다.

 

Agent Builder의 주요 기능

대화 설계: 직관적인 인터페이스를 통해 대화 흐름을 설계할 수 있습니다.
사용자는 다양한 대화 시나리오를 정의하고, 사용자 입력에 따라 적절한 응답을 설정할 수 있습니다.

자연어 처리: Dialogflow의 강력한 NLP 엔진을 사용하여 사용자의 의도를 파악하고, 그에 맞는 응답을 생성합니다. 이를 통해 사용자는 보다 자연스러운 대화를 경험할 수 있습니다.

통합: 다양한 플랫폼과 쉽게 통합할 수 있습니다. 예를 들어, 웹사이트, 모바일 앱,
메시징 앱(예: Facebook Messenger, Slack) 등과 연동하여 에이전트를 배포할 수 있습니다.

관리 및 모니터링: 에이전트의 성능을 모니터링하고, 대화 로그를 분석하여 개선할 수 있습니다. 이를 통해 지속적으로 에이전트의 품질을 향상시킬 수 있습니다.

확장성: 필요에 따라 에이전트를 확장할 수 있는 다양한 옵션을 제공합니다. 예를 들어, 커스텀 웹훅을 사용하여 외부 API와 연동하거나, 추가 기능을 구현할 수 있습니다.

Agent Builder를 사용하면 코드 작성 없이도 직관적인 인터페이스를 통해 에이전트를 설계하고 배포할 수 있어, 비개발자도 쉽게 대화형 에이전트를 만들 수 있습니다.

 

"AI Applications" 라는 서비스 명칭으로 변경

 

<< 실습 Start >>

1. 웹사이트 검색 기반의 Agent 만들기

"AI Applications" - "앱 만들기"

- "웹사이트 검색" 유형
- "데이터 스토어" 신규 생성 -> "웹사이트" -> "웹사이트 주소" 입력(http 제외) -> 생성

- "미리보기" 메뉴에서, 만들어진 앱 테스트하기
- "통합" 탭에서는 html, js 스크립트를 제공하여 임베딩하거나, API로 호출하는 방법을 제시한다.

<< 실습 End>>

 

[16-2] 작성한 아키텍처 정리하기

작성한 아키텍처를 깔끔하게 정리하는 시간을 갖습니다.

변경되는 인스턴스명, IP 범위명은 삭제한다.

 

[17-1] (추가) 클라우드 환경에서의 리소스 명명규칙 정리

클라우드 리소스를 생성할 때 명명 규칙을 잘 설정하는 것은 관리와 유지보수에 매우 중요합니다.
다음은 클라우드 리소스 명명 규칙을 설정할 때 고려할 수 있는 몇 가지 권장 사항입니다.

 

일관성 유지: 모든 리소스에 대해 일관된 명명 규칙을 사용합니다.
예를 들어, 모든 리소스 이름에 프로젝트 이름이나 팀 이름을 포함시킵니다.

의미 있는 이름 사용: 리소스의 용도나 기능을 쉽게 알 수 있도록 의미 있는 이름을 사용합니다.
예를 들어, 데이터베이스 서버는 db-server와 같이 명명합니다.

짧고 간결하게: 이름은 짧고 간결하게 유지하되, 충분히 설명적이어야 합니다.
너무 긴 이름은 가독성을 떨어뜨릴 수 있습니다.

구분자 사용: 단어를 구분할 때 하이픈(-)이나 밑줄(_)을 사용합니다.
예를 들어, web-server-01 또는 web_server_01과 같이 명명합니다.

환경 구분: 개발, 테스트, 프로덕션 환경을 구분할 수 있도록 이름에 환경 정보를 포함시킵니다.
예를 들어, app-prod, app-dev와 같이 명명합니다.

지역 정보 포함: 리소스가 위치한 지역 정보를 포함시킵니다.
예를 들어, us-east-1-db와 같이 명명합니다.

버전 정보 포함: 리소스의 버전을 관리해야 하는 경우 버전 정보를 포함시킵니다.
예를 들어, api-v1와 같이 명명합니다.

특수 문자 피하기: 대부분의 클라우드 제공자는 리소스 이름에 특수 문자를 허용하지 않으므로, 알파벳, 숫자, 하이픈(-), 밑줄(_)만 사용합니다.

예시는 아래와 같습니다.

[project-name]-[environment]-[resource-type]-[sequence]
myapp-prod-db-01
team1-dev-webserver-02

이와 같은 명명 규칙을 통해 클라우드 리소스를 체계적으로 관리할 수 있습니다.

 

[17-2] (추가) Billing 알람 설정 (프로젝트별 비용 알람 설정)

  1. 검색에서 "Billing(결제)"을 검색 후 해당 페이지로 이동 한다.
  2. 왼쪽메뉴에서 "예산 및 알림" 클릭 후 해당 페이지로 이동한다.
  3. 상단에 "예산 만들기" 클릭 후 예산 설정하는 페이지로 이동한다.
  4. 알람 이름을 입력하고 기간은 월별로 선택 후 나머지는 디폴트 값으로 두고 다음을 클릭한다.
  5. 다음 금액 설정 부분에서 지정한 금액에서 목표 금액을 설정한다.
  6. 다음 작업 설정 부분에서 예산 비율을 지정한다. 50 / 90 / 100 지정 할 수 있고, 트리거 기준이
    예상지출과 실제 지출이 있다.
  7. 알림 관리에서 결제 관리자 및 사용자에게 이메일 알림이 기본적으로 체크 되어 있으므로

  8. 해당 알림이 결제 관리자 및 사용자에게 이메일로 알림이 발생한다.
  9. 아래의 체크 리스트 중에 "이 예산에 모니터링 이메일 알림 연결" 을 체크 해준다.
    그리고 프로젝트를 한개 선택 후 알림 메일을 설정해준다. (프로젝트별 예산 관리에 도움이 된다.)

위의 설정대로 예산에 대한 알림을 설정하면 해당 설정값을 기준으로 사용자 및 관리자에게 알림이 전달된다.

그리고 실제로 빌링에 설정되어 있는 예산 알림을 받으면 아래와 같다.

위의 내용처럼 알림이 정해진 채널(Slack 등도 지정 가능)로 전송 된다.

 

[18-1] 방화벽 적용

특정 공인IP를 가진 사람만 특정 리소스에 접근 가능하게 하려면 "방화벽 정책"에서, 특정 IP 주소 목록만 특정 Port로 접근가능하도록 방화벽을 추가하고, VM에서 "네트워크 태그"로 해당 방화벽과 매핑해줘야 한다.

  1. Private Instance 즉 외부 IP를 가지고 있지 않은 VM에 접근을 하기 위해서는 IAP를 통해 접근을 한다.
  2. 그외 애플리케이션이 올라간 Public VM에 접근을 통제하는 방법방화벽 규칙에 IP와 포트를 통해서
    통제한다.

공인 IP와 사설 IP에 대한 정리

1. 공인 IP (Public IP)

  • 인터넷 서비스 제공업체(ISP)로부터 할당받은 IP 주소로, 전 세계적으로 유일합니다.
  • 인터넷 상에서 직접 접근이 가능하며, 웹 서버, 이메일 서버 등 외부와 통신이 필요한 장치에 사용됩니다.
  • IPv4의 경우, 공인 IP 주소는 고갈 문제로 인해 제한적입니다.

2. 사설 IP (Private IP)

  • 내부 네트워크에서 사용되는 IP 주소로, 전 세계적으로 중복될 수 있습니다.
  • 라우터나 방화벽을 통해 공인 IP로 변환되어 외부와 통신합니다 (NAT: Network Address Translation).
  • 주로 가정, 회사 등의 내부 네트워크에서 사용되며, 외부 인터넷에서는 직접 접근이 불가능합니다.
  • 사설 IP 주소 범위는 다음과 같습니다.
    10.0.0.0 ~ 10.255.255.255
    192.168.0.0 ~ 192.168.255.255

  • 172.16.0.0 ~ 172.31.255.255

CloudShell 관련 내용

GCP의 Cloud Shell은 사용자가 세션을 시작할 때마다 새로운 Cloud Shell 가상 머신 인스턴스를 생성합니다.
인스턴스는 랜덤 IP 주소와 포트를 할당받아 사용자 환경을 제공합니다.
따라서 각 세션마다 IP 주소와 포트가 달라질 수 있습니다

 

로컬 IP로 방화벽을 설정했는데, 왜 VM에 접속이 안될까 착각할 수 있는데, Cloud Shell을 사용한다면 CloudShell의 IP가 적용되므로, IP를 ALL(0.0.0.0/0)으로 지정해줘야 한다.


예제 애플리케이션 GitHub URL : https://github.com/Nanninggu/my-app.git

예제 애플리케이션 Git Clone : git clone -b gcp-app https://github.com/Nanninggu/my-app.git

예제 애플리케이션 ID와 Password는 아래와 같습니다.

ID : user

Password : test1234AA!!

 

[19-1] GCP cloud CLI 란?

GCP Cloud CLI(Google Cloud Command Line Interface)는 Google Cloud Platform을 관리하고 조작하기 위한 명령줄 도구입니다.

 

다양한 서비스 관리: GCP의 다양한 서비스(Compute Engine, Cloud Storage, BigQuery 등)를
명령줄에서 관리할 수 있습니다.

스크립트 자동화: 반복적인 작업을 스크립트로 작성하여 자동화할 수 있습니다.

빠른 배포: 명령어를 통해 빠르게 리소스를 배포하고 관리할 수 있습니다.

통합 인증: Google 계정을 사용하여 쉽게 인증하고, 프로젝트와 리소스를 관리할 수 있습니다.

다양한 플랫폼 지원: Windows, macOS, Linux 등 다양한 운영체제에서 사용할 수 있습니다.

인터랙티브 셸: gcloud 명령어를 통해 인터랙티브하게 명령을 실행하고 결과를 확인할 수 있습니다.

확장성: 플러그인을 통해 기능을 확장할 수 있으며, 커스텀 명령어를 추가할 수 있습니다.

GCP Cloud CLI를 사용하면 명령줄에서 효율적으로 GCP 리소스를 관리하고 자동화할 수 있습니다.


GCP cloud CLI 설치하기

URL : https://cloud.google.com/sdk/docs/install?hl=ko

설치 중 프로젝트를 선택하고 리전을 한국 리전으로 선택(53번째 Region)한다.


GCP Cloud CLI와 Terraform의 관계 설명

GCP의 Cloud CLI 환경Terraform을 실행하는 환경에 설치 및 권한 인증이 되어 있어야 Terraform을 사용하여 GCP 클라우드에 리소스를 생성하고 관리할 수 있습니다.

그 이유는 아래와 같습니다.

GCP 인증: Terraform은 GCP 리소스를 관리하기 위해 GCP API를 호출합니다.
이를 위해서는 GCP 계정에 대한 인증이 필요합니다.
GCP Cloud CLI(gcloud)를 통해 인증을 설정하면 Terraform이 해당 인증 정보를 사용하여 GCP API에 접근할 수 있습니다.

프로젝트 설정: gcloud CLI를 통해 GCP 프로젝트를 설정하고, Terraform이 해당 프로젝트 내에서 리소스를 생성하고 관리할 수 있도록 합니다.

서비스 계정: Terraform이 GCP 리소스를 관리하려면 적절한 권한을 가진 서비스 계정이 필요합니다.
gcloud CLI를 통해 서비스 계정을 생성하고, 필요한 권한을 부여할 수 있습니다.

따라서, GCP Cloud CLI 환경이 Terraform을 실행하는 환경에 설치되고 인증이 완료되어야 Terraform이
GCP 클라우드 리소스를 생성하고 관리할 수 있습니다.

더보기

1. 클라우드 환경에서 리소스에 체계적인 명명 규칙을 적용하는 가장 중요한 이유는 무엇일까요?

해설보기

해설

정답은 관리 및 유지보수 효율화입니다. 일관되고 의미 있는 명명 규칙은 어떤 리소스인지, 어디에 사용되는지 등을 쉽게 파악하게 해 관리와 유지보수를 체계적으로 할 수 있게 도와줘요.

A

리소스 생성 속도를 높이기 위해

 

관리 및 유지보수를 효율화하기 위해

C

클라우드 제공자의 비용을 자동으로 절감하기 위해

D

보안 취약점을 자동으로 탐지하기 위해

 

2. 클라우드 빌링 알람 설정 시, 알림이 발생하는 '트리거 기준'으로 주로 설정할 수 있는 값은 무엇일까요?

해설보기

해설

정답은 설정된 예산 대비 실제 또는 예상 지출 비율입니다. 빌링 알람은 미리 정해둔 예산 금액의 50%, 90%, 100% 등 특정 비율에 도달했을 때 트리거되도록 설정해요.

A

CPU 사용률 또는 메모리 사용률

B

리소스 생성 개수 또는 삭제 개수

 

설정된 예산 대비 실제 또는 예상 지출 비율

D

네트워크 인바운드/아웃바운드 트래픽 양

 

3. 외부 IP 주소가 할당되지 않아 인터넷에서 직접 접근할 수 없는 Private Instance에 접근하려면 어떤 방식을 주로 사용해야 할까요?

해설보기

해설

정답은 IAP와 같은 보안 터널을 통해 접근입니다. Private Instance는 외부 IP가 없어 인터넷을 통한 직접 접근이 불가능하므로, IAP 같은 내부 접근 경로를 설정해야 해요.

A

Public DNS 이름을 사용하여 접근

B

방화벽 규칙에서 모든 IP 주소를 허용

C

Cloud Shell에서 직접 해당 인스턴스의 사설 IP로 접근

 

IAP(Identity-Aware Proxy)와 같은 보안 터널을 통해 접근

 

4. 애플리케이션이 배포된 Public VM으로 들어오는 네트워크 트래픽을 제어하기 위한 가장 기본적인 클라우드 보안 도구는 무엇일까요?

해설보기

해설

정답은 방화벽 규칙입니다. Public VM은 외부 IP가 있어 인터넷에 노출될 수 있으므로, 방화벽을 통해 특정 IP 주소와 포트만 접근하도록 제한하여 트래픽을 제어해요.

A

리소스 명명 규칙

B

빌링 알람 설정

C

GCP Cloud CLI

 

방화벽 규칙

 

5. GCP Cloud CLI(gcloud)의 주된 목적은 무엇일까요?

해설보기

해설

정답은 명령줄을 사용하여 GCP 리소스를 관리하고 자동화입니다. gcloud는 CLI 도구로서 다양한 GCP 서비스를 명령어 기반으로 효율적으로 관리하고 스크립트를 통해 자동화하는 데 사용돼요.

A

클라우드 서비스의 사용자 인터페이스(UI) 개선

B

웹 브라우저를 통한 리소스 시각화 및 모니터링

 

명령줄을 사용하여 GCP 리소스를 관리하고 자동화

D

애플리케이션 소스 코드의 버전 관리

 

[참고] GCP 가이드 목록

- GCP 가이드 URL : https://cloud.google.com/docs?hl=ko

- GCP 모든 제품군 보기 : https://console.cloud.google.com/products

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기