[Using Google Cloud Platform] MySQL 서비스 CloudSQL에 접속하기

윤성재, 조대협

구글 클라우드에서는 MySQL의 매니지드 서비스 형태로 CloudSQL 서비스를 제공한다.
이 글에서는 CloudSQL을 서버에서 접근하는 방법과, 일반적인 MySQL 클라이언트로 접근하는 방법에 대해서 설명하고자 한다.

CloudSQL은 매니지드 MySQL서비스이다. 아마존에 RDS서비스와 같다고 보면 되는데 현재는 1세대를 서비스하고 있고, 곧 2세대가 서비스 예정이다.
1세대는 500GB까지의 용량까지 지원하고 있지만 2세대는 10테라까지 지원을 한다.
현재 지원되는 MySQL버전은 5.5와 5.6 지원하고, 내부 엔진으로는 InnoDB만을 제공한다.

2 세대에 기대되는 기능으로는 On Prem(호스팅 센터에 있는) MySQL과 복제 구성이 가능하다. On Prem에 있는 서버를 마스터로 할 수 도 있고, 반대로 마스터를 CloudSQL로 사용하고 읽기 노드를 On Prem에 구성하는 등 다양한 하이브리드 구성이 가능하다. (기대되는 부분)

자동 백업, 확장을 위한 읽기 전용 노드 (Read replica)등 필수적인 기능을 제공하고 있다.

1세대 Cloud SQL 연결 방식

CloudSQL은 RDS와는 다르게 private ip (10.x.xx)를 아직 지원하지 않고 public ip만을 지원한다. 그래서 서버에 접근하려면 이 public ip를 통해서 접근하면 된다. 보안을 위한 접근 통제 방법으로 특정 IP 주소에서 들어오는 트래픽만을 받아드리도록 설정이 가능하다.

또는 PaaS서비스인 구글 앱앤진을 사용하는 경우에는 구글 앱앤진의 인스턴스나 그룹 단위로 접근 통제가 가능하다.
다음 그림은 콘솔상에서 접근이 가능한 IP 주소를 지정하는 화면이다.

Authorized networks

[ 출처: Flickr, gongjak1 ]

MySQL 클라이언트를 이용하여 접속을 할때 mysqlclient를 이용하여 직접 ip등을 입력하고 접속을해도 되지만 이 경우에는 CloudSQL에서 Ip를 허용해줘야 하기 때문에 개발이나 기타 운영 환경등에서 IP 주소가 바뀌면 그때 마다 설정을 해줘야 하기 때문에 불편할 수 있다.
이를 조금 더 편하게 하려면 mysqlclient를 사용하지 않고 구글에서 제공하는 “gcloud” 라는 도구를 이용하면, 별도로 접속 IP를 열지 않더라도 접속이 가능하다.
접속 방법은 먼저 gcloud 명령어를 인스톨 한 후에

$ gcloud config set project [클라우드 프로젝트 이름]
$ gcloud beta sql connect [CloudSQL 인스턴스이름] —user=root
(여기서 –user=root 에서 root 사용자는 MySQL 인스턴스내의 사용자이다)

으로 접속하면 MySQL 클라이언트와 동일한 툴로 접속이 된다.

Connect MySQL

[ 출처: Flickr, gongjak1 ]

gcloud 툴킷을 이용한 자세한 접속 방법은 https://cloud.google.com/sql/docs/mysql-client#connect-ssl 를 참고하기 바란다.

참고)

Toad, MySQL Workbench 등에서 안전하게 연결하는 방법

>Google Cloud Platform (이하 GCP)에는 Fully-Managed 해주는 RDBMS 서비스로 CloudSQL이라는 상품이 있다. 얼마전 2세대 제품을 베타로 시작하면서 현재는 두 가지 제품이 함께 운영되고 있다.

2세대 Cloud SQL 연결

2세대 ClouodSQL은 1세대의 단점인 Public IP를 통해서만 접속이 가능한 방식을 CloudSQL에 접속할 클라이언트에 Proxy를 설치 하는 방식을 이용하여, Public IP를 이용한 방식에 비해서 안전한 보안 방식을 조금 더 쉽게 제공할 수 있게 되었다.

Cloud SQL 생성

클라우드 콘솔 > CloudSQL 에 접속하면 다음과 같은 화면을 볼 수 있다.

Create MySQL instance

[ 출처: Flickr, gongjak1 ]
새로운 DB를 만들기 위해 ‘인스턴스생성’을 클릭하자.

Choose MySQL instance

[ 출처: Flickr, gongjak1 ]
Cloud SQL 2세대의 세부정보 및 기능을 클릭하면 1세대보다 향상된 기능을 볼 수 있다.

Cloud SQL 2nd

[ 출처: Flickr, gongjak1 ]
2세대 서비스는 현재 베타 서비스 중으로 일부 베타 제한 사항이 있으며, 다음 링크 에서 확인할 수 있다.

2세대를 선택하면 인스턴스를 만들 수 있는 화면으로 바뀐다. 여기에 다음과 같은 값을 입력해준다.

  • 인스턴스 ID : testdb-001
  • 지역 : asia-east1
  • 영역 : 자동선택
  • 머신유형 : db-n1-standard-1
  • 저장용량 크기 : 50GB
  • 고가용성 : 장애 조치용 복제본 만들기 체크
  • 자동 백업 사용 설정 : AM 2:00 – AM 6:00
  • 승인된 네트워크 : 집이나 사무실 등 직접 접속을 할 네트워크를 입력해주세요.
  • 고급 옵션 > 데이터베이스 버전 : MySQL 5.6
  • 고급 옵션 > MySQL 플래그 : 항목 추가를 눌러보면 주요 옵션에 대해 추가할 수 있으니 원하는 옵션을 선택하면 된다.

여기까지 입력하면 다음과 같은 모습이 될 것이다.
마지막의 ‘생성’을 클릭하면 인스턴스가 만들어진다.

Create MySQL instance Option-1
Create MySQL instance Option-2
Create MySQL instance Option-3
Create MySQL instance Option-4
Create MySQL instance Option-5

[ 출처: Flickr, gongjak1 ]


MySQL 클라이언트에서 Proxy를 통해서 CloudSQL 2세대 접속하기

Proxy 준비

클라이언트에서 Proxy를 통해서 CloudSQL 2세대를 접속할때는 클라이언트에 Proxy를 설치해야 한다.
인스턴스가 생성되었으면 이제, Proxy를 이용하여 CloudSQL에 접속해보자.

Linux, Mac, Windows를 지원하는데 각각의 설정 방법은 다음과 같다.
각 OS 별 설정전에 먼저 공통적으로 접속키 설정 등 사전 작업이 필요한데 다음과 같다.

IP를 통한 접속 방법은 앞의 1세대 CloudSQL 을 이용한 접속 방식과 동일하니 참고하기 바란다.

사전 작업

CloudSQL API 활성화

우선 클라우드 콘솔에서 Google CloudSQL API 를 사용할 수 있도록 해줘야 한다.
클라우드 콘솔 > API 관리자 > Google Cloud API > CloudSQL API 를 선택 한다.
개요 화면에서 ‘사용 설정’ 을 클릭해주면 잠시 후에 활성화된다. 여기에 ‘사용 중지’ 라고 나온다면 이미 사용 설정이 되어 있는 상태이다.

Enable Google Cloud SQL API

[ 출처: Flickr, gongjak1 ]

Proxy가 사용할 서비스 개정 및 비공개키 생성

When you connect using the proxy, you provide the proxy with a path to a local key file. The proxy uses that key to authenticate with the Google Cloud Platform.

For more information about service accounts, see the Google Cloud Platform Auth Guide.

콘솔에서 IAM 및 관리자 로 가보자.

Service Account

[ 출처: Flickr, gongjak1 ]
‘서비스 계정 만들기’를 클릭하고 다음과 같이 입력한 뒤, ‘새 비공개 키 제공’을 선택하고 ‘만들기’를 클릭한다.

Create Service Account

[ 출처: Flickr, gongjak1 ]

아래와 같은 메시지가 보인다면 서비스 계정 생성이 완료된 것이다.
Downloads 폴더에 가보면 비공개 키 파일이 json 파일 형태로 저장되어 있는 것을 찾을 수 있다.

Completed Create Service Account

[ 출처: Flickr, gongjak1 ]
이 키 파일은 DB 접속에 사용되는 매우 중요한 파일이므로 적절한 곳에 잘 보관하도록 한다.

root 유저 비밀번호 변경

MySQL을 생성한 후에, root의 비밀 번호를 변경한다. 이 예제에서는 클라이언트가 root 사용자로 붙도록 하였는데, 만약에 필요하다면 새로운 사용자를 생성해서 그 사용자를 이용하는 것을 권장한다.
Google 콘솔의 CloudSQL 에서 루트 비밀번호를 바꿔보자.

클라우드 콘솔 > CloudSQL > testdb-001 인스턴스 > 엑세스 제어 > 루트 비밀번호 변경 클릭

다음과 같은 창이 열리면 사용하고자 하는 암호를 입력해주면 된다.

Change root user Password

[ 출처: Flickr, gongjak1 ]
자아 이제 클라이언트에서 CloudSQL 에 Proxy를 통해서 접속하기 위한 준비가 끝났다.

Linux VM에 접속하기

Linux에서 접속을 하는 방법을 살펴보기 위해서 편의상 구글 클라우드 내에 VM을 생성해놓고,이 VM으로 부터 Proxy를 이용하여 접속을 해보도록 하겠다.
이 예제는 Debian Linux를 기준으로 작성되었다.

클라우드 콘솔 > Compute Engine 을 선택하여 다음과 같이 인스턴스를 생성해 준다.

  • 이름 : testapp-001
  • 영역 : asia-east1-a
  • 머신 유형 : vCPU 1개
  • 부팅 디스크 : Debian GNU/Linux 8 (jessie)
  • ID 및 API 액세스
  • 방화벽 : HTTP 트래픽 허용

Create Instance

[ 출처: Flickr, gongjak1 ]
인스턴스 생성이 완료되면 다음과 같이 나타날 것이다.
오른쪽 끝의 SSH를 눌러 서버에 접속한다.

Instance Info

[ 출처: Flickr, gongjak1 ]

Proxy 설치

로그인에 성공했으면 다음 명령어를 입력하여 proxy를 다운로드 받는다.

$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
$ mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy
$ chmod +x cloud_sql_proxy

다음과 비슷한 실행 결과 화면을 볼 수 있다.

Downlaod proxy

[ 출처: Flickr, gongjak1 ]

Proxy 시작

인스턴스의 콘솔로 가서 proxy를 시작해보자.

$ sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
$ sudo ./cloud_sql_proxy -dir=/cloudsql -instances=[INSTANCE_CONNECTION_NAME] -credential_file=[PATH_TO_KEY_FILE] &

[INSTANCE_CONNECTION_NAME] 은 CloudSQL 의 개요 화면에서 확인할 수 있다. 한글로는 “인스턴스 연결 이름” 이다.

Instance property

[ 출처: Flickr, gongjak1 ]
[PATH_TO_KEY_FILE] 은 앞서 사전 작업에서 생성한 비공개키 JSON파일을 서버에 복사한 후 이 파일의 위치를 적어주면 된다.

$ sudo ./cloud_sql_proxy -dir=/cloudsql -instances=(project name):asia-east1:testdb-001 -credential_file=/home/sjyun/.keys/78a8c4166b03.json &

실행 후 “Ready for new connections” 이란 메시지가 보이면 된다.

Start proxy

[ 출처: Flickr, gongjak1 ]

Proxy 를 이용한 MySQL Client 에서 접속 하기

먼저 다음 명령어를 이용해서 MySQL Client를 설치하자.

$ sudo apt-get update
$ sudo apt-get install mysql-client-5.6

Install MySQL Client

[ 출처: Flickr, gongjak1 ]
MySQL 클라이언트 설치가 끝났으면 이제 직접 연결을 해보자. 다음 명령어를 이용하면 접속할 수 있다.

$ mysql -u root -p -S /cloudsql/[INSTANCE_CONNECTION_NAME]

Enter password: 가 나오면 루트 암호를 입력하면 접속 된다.

Connect proxy

[ 출처: Flickr, gongjak1 ]


Cloud SQL 접속을 위한 네트워크 추가하기

GCP에는 기본으로 방화벽이 설정되어 있어 외부로부터의 모든 접근이 차단되어 있기 때문에 현재 접속하고자 하는 IP를 Cloud SQL에 등록해줘야만 접속을 할 수 있다.

이미 생성된 Cloud SQL 인스턴스에서는 “액세스 제어 > 승인” 메뉴에서 네트워크를 추가해줄 수 있다.

Add Network

[ 출처: Flickr, gongjak1 ]
“+네트워크 추가”를 클릭해서 현재 내가 사용중인 외부 IP를 등록해주면 된다.
IP를 모르겠다면 아래 사이트에서 쉽게 확인할 수 있다.

IP확인 whatismyipaddress.com

IP는 CIDR 형식에 맞게 입력해주면 되는데, 잘 모르겠다면 확인된 IP 뒤에 “/32” 를 붙혀서 등록해준다. 이는 본인 IP 하나만 접속을 허용해주겠다는 의미이다.

MAC에서 접속하기

Apple MAC을 사용하는 유저들은 Cloud SQL 에 접속하기 위해 MySQL Workbench 와 터미널을 이용한 두 가지 방법을 모두 이용할 수 있다.
Workbench 를 이용하는 방법은 Windows에서 접속하기에서 설명하도록 하고, 여기에서는 많은 유저들이 선호하는 터미널에서 접속하는 방법을 알아보도록 하겠다. 만약 터미널에서의 접속은 이용하지 않고 Workbench 만을 사용한다면 MySQL을 설치하지 않고도 바로 Workbench에서 접속이 가능하기에 “Windows에서 접속하기” 방법을 보기 바란다.

MySQL 설치하기

이미 자신의 맥에 MySQL이 설치되어 있다면 바로 접속하면 되는데, 없다면 설치해주도록 하자.
mysql.com 사이트에서 다운로드 받아 설치하면 된다.

현재 사용중인 Mac OS X 의 버전이 Maverick(10.9) 이상 이라면 “Mac OS X 10.11 (x86, 64-bit), Compressed TAR Archive” 버전을 다운로드 받으면 된다.
만약 Mountain Lion (10.8) 이라면 다운로드 창의 “Looking for previous GA versions?” 를 클릭하여 “Mac OS X 10.8 (x86, 64-bit), DMG Archive” 버전을 다운로드 받아서 설치한다.

Downlaod Link

MySQL Community Server

[ 출처: Flickr, gongjak1 ]

자신에게 맞는 파일의 Download 를 클릭하면 다음과 같이 로그인이나 가입을 하라고 나온다.
그냥 무시하고 아래의 “No thanks, just start my download.”를 클릭하면 바로 다운로드를 시작한다.

Login Oracle Web account

[ 출처: Flickr, gongjak1 ]

설치 방법은 다른 맥용 App을 설치하는 것과 다르지 않다. Finder를 열어서 더블 클릭하고, pkg 파일을 더블 클릭하면 설치 화면이 나온다.

MySQL pkg

Install MySQL

[ 출처: Flickr, gongjak1 ]

‘계속’을 클릭한다.

Install MySQL License

[ 출처: Flickr, gongjak1 ]
소프트웨어 사용권 계약에 대한 내용이다.
‘계속’을 클릭한다.

Install MySQL License Agreement

[ 출처: Flickr, gongjak1 ]
동의하지 않으면 설치를 할 수 없으므로 ‘동의’를 클릭한다.

Install MySQL Location

[ 출처: Flickr, gongjak1 ]
설치 디스크 위치를 기본적으로 ‘Macintosh HD’에 설치하는데, 다른 곳에 설치하고 싶다면 ‘설치 위치 변경’을 클릭하여 바꿔준다. 준비가 되었으면 ‘설치’를 클릭한다.

Install MySQL input password

[ 출처: Flickr, gongjak1 ]
암호를 넣고 ‘소프트웨어 설치’를 클릭하면 설치를 시작한다.

Installing MySQL

[ 출처: Flickr, gongjak1 ]
잠시 기다리면 다음과 같은 창이 열리면서 root 유저의 암호가 나온다. MySQL DB를 서버로 사용할 거라면 반드시 기억해야만 한다. 여기서는 Client 만 사용할 것이기에 무시해도 된다.

Install MySQL Completed

[ 출처: Flickr, gongjak1 ]
OK를 클릭하고 닫으면 된다.

이제 터미널을 열어서 mysql 을 입력해보자. 어? 에러가 발생한다.

mysql command not found

[ 출처: Flickr, gongjak1 ]

분명 설치했는데, 왜 명령어를 못찾을까?
맥용 MySQL이 설치된 기본 위치는 /usr/loca/mysql 인데, 인스톨러가 PATH를 추가해주지 않아서 발생하는 에러이다.
에디터로 자신의 $HOME 폴더에 있는 .bash_profile 파일을 열어 다음과 같이 PATH 를 추가해주자.

export PATH=”$PATH:/usr/local/mysql/bin”

이제 터미널을 닫았다가 다시 열거나 다음 명령을 실행해주면 변경된 내용이 적용된다.

$ . .bash_profile

이제 mysql을 입력해보자.

Can't connect to local MySQL server

[ 출처: Flickr, gongjak1 ]
이런 메시지가 나온다면 잘 적용된 것이다.

이제 Cloud SQL에 연결해보자. 접속을 위한 외부 IP는 Cloud SQL 의 처음 화면에서 확인할 수 있다. 다음과 같이 입력하고 root 암호를 넣어주면 접속이 된다.

$ mysql -h [Cloud SQL 외부 IP] -u root -p

connect mysql server

[ 출처: Flickr, gongjak1 ]

Windows에서 접속하기

이번엔 MS Windows 에서 MySQL Workbench 를 이용하여 접속하는 방법을 알아보자.

MySQL Workbench 를 이용하는 방법은 PC에 MySQL 서버 또는 클라이언트를 설치하지 않고도 서버로의 접속이 가능하므로 Workbench만 다운로드 받아 설치하고 사용하면 된다.

MySQL Workbench Download Link

Workbench는 윈도우 뿐아니라 Ubuntu, Red Hat, Fedora, Mac OS X 등 다양한 플랫폼을 지원하는데 여기서는 윈도우에 설치할 것이기에 ‘Microsoft Windows’를 선택하고 다운로드 받는다.

MSI installer 버전을 선택하면 설치를 하고 사용할 수 있고, ZIP버전은 압축을 풀고 바로 사용할 수 있다.

MySQL Workbench

[ 출처: Flickr, gongjak1 ]
Download 를 클릭하면 역시 로그인하라는 메시지가 나오는데, “No thanks, just start my download.” 를 선택하면 바로 다운로드가 시작된다.

Login Oracle Web account

[ 출처: Flickr, gongjak1 ]

MySQL Workbench 설치

설치를 시작하면 다음과 같은 화면이 나타날 수 있다.

MySQL Workbench Installer Information

[ 출처: Flickr, gongjak1 ]
이는 Workbench 가 필요로 하는 두 가지 프로그램이 설치되어 있지 않을 때 나타나며, OK 를 클릭하면 설치가 진행되지 않고 “Download Prerequisites” 링크와 함께 바로 “Finish” 가 나타난다.

MySQL Workbench Download Prerequisites

[ 출처: Flickr, gongjak1 ]
“Download Prerequisites” 을 클릭하면 두 가지 필요한 프로그램을 다운로드 받을 수 있는 페이지가 열린다.

MySQL Workbench Download Prerequisites Link

[ 출처: Flickr, gongjak1 ]
윈도우 10 사용자는 .NET Framework 4 이 이미 설치되어 있으므로 아래의 Visual C++ 2013 만 설치하면 된다.

Microsoft .NET Framework 4 Client Profile

Microsoft Visual C++ 2013 Redistributable Package (x86 or x64)

두 가지 프로그램의 설치가 완료되었으면 다시 Workbench 설치를 진행한다.

MySQL Workbench Setup Wizard

[ 출처: Flickr, gongjak1 ]
이제는 여느 다른 프로그램들과 설치 방법이 다르지 않다. 내용을 보면서 “Next”를 눌러주면 설치가 진행된다. 설치가 끝나고 마지막 화면에서 “Finish”를 클릭하면 Workbench 가 자동으로 실행된다.

MySQL Workbench가 실행된 화면이다.

Starting MySQL Workbench

[ 출처: Flickr, gongjak1 ]
새로운 연결 설정을 하기 위해 “MySQL Connections” 옆의 “+” 기호를 클릭하고, 새로 열린 창에 접속 정보를 입력하자.

Connection Name : testdb-001
Hostname : [Cloud SQL 의 외부 IP]

MySQL Workbench New Connection

[ 출처: Flickr, gongjak1 ]
창 아래쪽의 “Test Connection”을 클릭하면 Password 를 입력하는 창이 새로 열린다.
암호를 입력하고 정상적으로 연결이 잘 되면 다음과 같은 연결 성공 메시지 창이 나타닌다.

MySQL Workbench Test Connection

[ 출처: Flickr, gongjak1 ]
Test Connection 이 성공했다면 “OK” 를 누르자.
초기 화면에 “testdb-001″에 대한 내용이 추가 되었을 것이고, 이를 더블 클릭하면 DB에 접속을 하게된다.

가운데 ‘Query 1’ 이란 탭에 SQL문을 입력하고 실행하면 바로 아래 창에서 수행 결과를 볼 수 있다.

MySQL Workbench Query1

[ 출처: Flickr, gongjak1 ]
이제 MySQL Workbench 의 모든 기능을 사용할 수 있다.


애플리케이션에서 접속하기

MAC,Windows,Linux 에서 직접 MySQL 클라이언트를 이용하여 CloudSQL 에 접속하는 방법을 알아보았다. 이번에는 애플리케이션에서 Proxy를 통하여 CloudSQL에 접속하는 방법을 알아보자.
여기서는 Apache + PHP를 이용하여 MySQL에 연결하는 예제를 통해서 설명한다.

Apache, php 설치하기

먼저 Apache 2 서버와 PHP5를 설치해보자.

$ sudo apt-get install apache2 php5

Install apache php

[ 출처: Flickr, gongjak1 ]
구글 콘솔에서 ‘Compute Engine > VM 인스턴스’ 로 가서 외부 IP를 클릭하면 새창이 열리면서 Apache2 Debian Default Page 화면을 볼 수 있을 것이다.

external IP

[ 출처: Flickr, gongjak1 ]
Apache2 Debian Default Page

[ 출처: Flickr, gongjak1 ]

만약 이 화면이 보이지 않는다면 apache2 가 실행되고 있는지 확인하고 시작해 준다.

$ sudo service apache2 status
$ sudo service apache2 start

mysql connection example

php5 용 mysql 모듈을 설치한다.

$ sudo apt-get install php5-mysql
$ sudo service apache2 stop
$ sudo service apache2 start

아래 예제에서 (project_name) 부분을 현재 프로젝트 이름으로 바꿔주고,
‘/var/www/html’ 폴더에 mysql_connect.php라는 이름으로 저장한다.

$ sudo vi /var/www/html/mysql_connect.php

<!--?php // we connect to localhost and socket $link = mysql_connect(':/cloudsql/(project_name):asia-east1:testdb-001', 'root', 'testdb'); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Socket Connected successfully'; mysql_close($link); ?-->

이제 브라우저에서 접속해보자. 아래와 같은 결과를 볼 수 있을 것이다.

Socket Connected successfully

[ 출처: Flickr, gongjak1 ]
지금까지 최근 업데이트 된 Google CloudSQL 2nd Generation 의 생성부터 접속하는 방법까지 알아보았다.

처음 CloudSQL 을 사용하고자 하는 이들에게 도움이 되길 바란다.

[Using Google Cloud Platform] SSH를 이용해서 VM에 접속하기

윤성재, 조대협

클라우드에서 VM을 생성하면, 이 VM에 접속할 필요가 있는데, 일반적으로 SSH를 이용한다.
SSH로 접속하는 방법은 크게 다음과 같이 4가지 방법이 있다.

  1. 브라우저 창에서 열기
  2. 맞춤 포트의 브라우저 창에서 열기
  3. gcloud 명령어로 접속하기
  4. 다른 SSH 클라이언트를 사용하여 접속하기

이 중 가장 쉬운 방법은 1번일 것이다. 웹 브라우저에서 그냥 클릭만 하면 바로 접속 된다. 인스턴스 한 대에만 접속한다면 분명 가장 쉽고 편하게 접속할 수 있는 방법이다.
그 다음으로는 gcloud 명령어로 접속하는 방법일 것이다. 이는 맥킨토시나 리눅스를 PC로 사용하는 사람들에게는 무척이나 쉽고 편하게 강력한 기능들을 제공해줄 것이다.
하지만 많은 이들이 윈도우를 사용하고 있고, 윈도우에서 서버로 접속하기 위해 SecureCRT 나 PuTTY 같은 ssh client 프로그램을 사용하고 있다
이 장에서는 윈도우와 맥에서 SSH를 이용하여 생성된 VM에 접속하는 방법을 알아보도록 한다.

MAC OS에서 SSH로 접속하기

SSH 키페어 생성

ssh-keygen 명령어를 이용하여 다음과 같이 RSA 키페어를 생성한다.

$ ssh-keygen -t rsa -C &quot;구글계정명&quot;

ssh-keygen

[ 출처: Flickr, gongjak1 ]

퍼블릭 키 등록하기

키페어가 생성이 되었으면 *.pub으로 끝나는 이름의 퍼블릭키의 내용(텍스트)를 복사한후, 콘솔창에서 _”Compute Engine > Metadata > SSH Keys”_ 부분에 복사한 텍스트를 붙여 넣어서 키를 등록한다.

Register SSH key

[ 출처: Flickr, gongjak1 ]

SSH 터미널로 접속하기

키 등록이 끝났으면, 이 키를 이용하여 SSH로 접속한다.

$ ssh -i [Private 키 파일] 계정@호스트명

Connect ssh using key file

[ 출처: Flickr, gongjak1 ]

Windows에서 Putty로 SSH 접속하는 방법

윈도우에서 서버로 접속하기 위해 SecureCRT 나 PuTTY 같은 ssh client 프로그램을 사용하고 있다.
이에 무료로 사용이 가능한 PuTTY 를 이용한 접속 방법을 알아보자.

PuTTY 를 다운로드 받아 설치하기

Putty는 http://www.putty.org/ 를 통해 다운로드 받을 수 있다.

SSH 키페어 생성

만약 GCP 프로젝트에서 승인되어진 public key가 없다면, 새로운 key-pair를 생성하고 프로젝트에 적용할 수 있다.

SSH나 SCP를 이용하여 인스턴스에 접속하기 전에 프로젝트에서 사용할 SSH key-pair 를 생성해야만 한다.
만약 gcloud tools 를 이용하여 인스턴스에 접속하고 있다면, 이 key-pair는 이미 생성되어 있고 다음의 위치에서 확인할 수 있다.

Linux OSX

  • Public key : $HOME/.ssh/google_compute_engine.pub
  • Private key : $HOME/.ssh/google_compute_engine

Windows

  • Public key : C:\Users\[USER_NAME]\.ssh\.google_compute_engine.pub
  • Private key : C:\Users\[USER_NAME]\.ssh\google_compute_engine

만약에 키 페어가 없다면, 앞의 “MAC OS에서 SSH로 접속하기” 부분에서 SSH 키페어 생성 부분을 참고하여 키페어를 생성하거나 아래 가이드에 따라서 Putty에서 키페를 생성하도록 하자.

gcloud tools를 설치했다면 앞에서 key-pair를 확인했을 것이고, 여기는 넘어가도 된다.
gcloud tools는 GCP를 계속 사용하고자 한다면 반드시 필요한 툴이므로 꼭 설치하길 바란다.
https://cloud.google.com/sdk/downloads 에서 다운로드 받아 설치할 수 있다.
아직 gcloud tools를 설치하지 않았다면 새로운 key-pair를 생성해서 접속할 수 있다.

puttygen.exe 를 다운로드 받아 실행하고 Generate 버튼을 클릭한다.

PuTTY Key Generator

[ 출처: Flickr, gongjak1 ]
새로운 key-pair 가 생성된 뒤, Key comment 항목에는 Google username 을 입력한다.
Key passphrase, Confirm passphrase 에는 암호를 입력한다. (선택사항)

Save PuTTY Key

[ 출처: Flickr, gongjak1 ]

private key 와 public key 를 파일로 저장하고 아직은 창을 닫지 않는다.

퍼블릭 키 등록하기

다음으로 ‘GCP 콘솔 > Compute Engine > 메타데이터 > SSH 키’ 페이지로 간다.
웹 콘솔에서 ‘수정’ 버튼을 클릭하고, ‘전체 키 데이터 입력’ 이라고 적힌 곳에 앞의 Putty 화면에서 ‘Public key for pasting into Open SSH authorized_keys file:’ 이라고 되어 있는 부분의 텍스트를 아래 그림과 같이 복사하여 붙혀넣고 저장한다.

Paste Public Key

[ 출처: Flickr, gongjak1 ]

Putty로 SSH 접속확인

먼저 접속할 VM의 IP를 확인하자.

구글 클라우드 콘솔에서 Compute Engine 메뉴의 VM 인스턴스 로 가면 외부IP를 쉽게 확인할 수 있다.

Instance External IP

[ 출처: Flickr, gongjak1 ]

다음 이 IP로 접속을 해보자.
PuTTY 를 실행한 후 Session 에서 Host Name 에는 puttyuser@[인스턴스 외부IP주소] 를 입력한다.

PuTTY Configuration Host Name

[ 출처: Flickr, gongjak1 ]
다음 Connection > SSH > Auth 의 Private key file for authentication 에서 저장해둔 private key 파일을 선택한다.

PuTTY Configuration Private Key

[ 출처: Flickr, gongjak1 ]
이제 Open 을 눌러 접속해보자. 처음 접속하기에 보안 경고 화면이 나오면 ‘예(Y)’를 눌러주자.

PuTTY Security Alert

[ 출처: Flickr, gongjak1 ]
Passphrase for key “puttyuser” 가 나오면 key-pair를 생성할 때 입력했던 암호를 넣어준다.

PuTTY Passphrase for key

[ 출처: Flickr, gongjak1 ]
이와 같이 authorized_key 를 “메타데이터 > SSH” 키에 등록하면 모든 인스턴스에 접속할 수 있게 되지만, 인스턴스를 생성할 때 SSH 키 항목에 등록하면 해당 인스턴스만 접속이 가능하게 된다.

워드프레스 마크다운(Markdown) 문법 설명

워드프레스에 블로깅하기에 반드시 필요해보여 스크랩해놨다.

출처 : 워드프레스 마크다운(Markdown) 문법 설명

워드프레스 마크다운(Markdown) 문법 설명

WordPress.com에서는 2013년 11월 19일부터 마크다운(Markdown)을 지원하기 시작했다. 그리고 얼마전에 발표한 Jetpack 2.8에서 마크다운을 지원하게 되어서 설치형 워드프레스에서도 마크다운을 간편하게 사용할 수 있게 되었다.

아래의 표는 워드프레스 Support 페이지에 있는 Markdown quick reference를 번역하고, 몇가지 문법을 더 추가한 것이다. 표로 만들었기 때문에 화면이 작은 모바일 디바이스에서는 제대로 보이지 않을 수 있다.

워드프레스에서 지원하는 마크다운(Markdown) 문법은 기본 마크다운 문법에 Markdown Extra의 문법과 GitHub Flavored Markdown의 문법도 일부 수용한 형태로 되어 있다. 그래서 기본적인 마크다운의 문법보다는 기능이 더 많고, 조금 더 복잡하다. 하지만 블로그에 글을 쓸 때, 그 모든 문법을 알아야하는 것은 아니다. 아마 대부분의 사람들이 아래 표에 정리한 정도의 문법만으로도 블로그를 운영하기에는 충분할 것이다. 좀 더 자세한 설명이 필요하거나, 더 많은 문법을 알고 싶을 때는 아래 링크를 참조하면 된다.

마크다운 변환후 모습
강조
*기울여쓰기(italic)* _기울여쓰기(italic)_
**굵게쓰기(bold)** __굵게쓰기(bold)__

이 때 * 과 _ 사이에는 공백이 있어서는 않된다.

기울임
굵은글씨

“기울여쓰기”는 HTML에서 “em”태그를, “굵게쓰기”는 HTML에서 “strong” 태그를 의미한다. 따라서 css에서 그 태그들이 어떻게 보여지도록 설정되었는지에 따라 보여지는 모습이 달라질 수 있다. 즉, 워드프레스 테마에 따라 “기울여쓰기”와 “굵게쓰기”의 모양이 달라질 수 있다는 뜻이다.

인라인 링크
[링크](http://example.com "링크제목").

대부분의 브라우저에서는 마우스 커서를 링크에 가져가면 링크제목이 뜬다.

링크.
참조 링크
[링크1][1] 과 [링크2][2].

[1]: http://example.com/ "링크제목1"
[2]: http://example.org/ "링크제목2"

참조 부분은 문서의 어떤 부분에 있어도 상관 없다. 그리고 주의해야할 것 중 하나는, 참조부분에서 []과 :는 꼭 붙어있어야 한다는 것이다.

링크1 과 링크2.
URL만으로 링크하기
<http://example.com/>
<me@privacy.net>
http://example.com
me@privacy.net
인라인 이미지
로고: ![대체텍스트](/wp.png "이미지제목")

· 대체텍스트는 시각장애인용 브라우저를 이용할 때 그 이미지가 어떤 것을 가리키는지를 설명하는 용도로 사용된다.

· /wp.png 부분에 이미지주소를 넣어주면 된다.

로고: 대체텍스트
참조 이미지
더 작은 로고: ![대체텍스트][1]

[1]: /wp-smaller.png "이미지제목"
더 작은 로고: 대체텍스트
링크된 이미지
링크된 로고: 
[![대체텍스트](/wp-smaller.png)]
(http://wordpress.com/ "링크제목")
링크된 로고: 대체텍스트
수평선
---
***
___

수평선을 그리고 싶으면 -, *, _ 를 3개 이상 나열하면 된다. 이 때 “- – -“와 같은 식으로 중간에 공백을 넣어도 상관없다.




각주
(FOOTNOTES)
각주 [^1] 는 이렇게 만든다.

[^1]: 각주다.

각주는 문서의 가장 밑에 원래 읽던 곳으로 돌아갈 수 있는 링크와 함께 추가된다.

각주 1 는 이렇게 만든다.


  1. 각주다. 
줄넘기기
(개행)
각 라인의 끝에  
2개 이상의 스페이스를 넣으면  
줄 넘기기(개행)가 된다.

HTML에서와 같이 마크다운(Markdown)에서도, 에디터상에서 엔터를 쳐서 줄을 넝겨도 브라우저상에서 표현될 때는 줄이 넘겨지지 않은 상태로 나온다.

각 라인의 끝에
2개 이상의 스페이스를 넣으면
줄 넘기기(개행)가 된다.
문단 나누기
문단1 이다.

문단2 이다.

문단을 나눌 때는 문단과 문단 사이에 한 줄을 비워놓으면 된다.

문단1 이다.문단2 이다.
순서없는 리스트
(BULLET LISTS)
* 목록
* 목록
- 목록
- 목록

순서없는 리스트를 작성하기 위해서는 -, +, *을 맨앞에 적으면 된다.

  • 목록
  • 목록
  • 목록
  • 목록
순서있는 리스트
(NUMBERED LISTS)
1. 목록
1. 목록

순서있는 리스트를 작성하기 위해서는 숫자 다음 .을 찍는다. 적힌 숫자랑 상관없이 순서대로 번호가 매겨진다.

  1. 목록
  2. 목록
혼합 목록
(순서있는 리스트와 순서없는 리스트를 함께 쓰기)
1. 목록
2. 목록
   * 혼합 목록
   * 혼합 목록  
3. 목록
  1. Item
  2. Item
    • Mixed
    • Mixed
  3. Item
인용
(BLOCKQUOTES)
> 인용문.
> > 인용문안의 인용문.

> * 인용 목록 
> * 인용 목록

인용문.

인용문 안의 인용문.

  • 인용 목록
  • 인용 목록

인용문의 모양은 css에 어떻게 모양이 정의되었는지에 따라 달라진다. 따라서 테마를 바꾸면 인용문의 모양도 달라질 수 있다.

서식 설정 텍스트 (PREFORMATTED)
  각각의 줄을 2개 이상의 
  스페이스로 시작하면 
  글을 타이핑하는 그대로 정확히 
  보여지게 할 수 있다.
  [test](http://test.com)

서식 설정 텍스트 태그는 마크다운이나 HTML 태그등을 그대로 보여주고자 할 때 사용하면 된다.

각각의 줄을 2개 이상의 
스페이스로 시작하면 
글을 타이팅하는 그대로 정확히 
보여지게 할 수 있다.
[test](http://test.com)
코드
`코드이다. [test](http://test.com)`
코드이다. [test](http://test.com)
코드 블럭
~~~~
이것은 
코드 블럭이다. 
~~~~

```
이것도 코드 블럭이다.
```
1
2
이것은
코드 블럭이다.
1
이것도 코드 블럭이다.
문법 강조
```css
#button {
    border: none;
}
```

이 문법은 wordpress.com에서만 지원된다. 설치형 워드프레스에서는 지원되지 않는다. 설치형 워드프레스에서는 코드블럭으로 보여진다. 지원되는 언어는 Posting Source Code에서 확인할 수 있다.

1
2
3
#button {
bordernone;
}
제목
# 제목 1
## 제목 2
### 제목 3 
#### 제목 4 ####
##### 제목 5 #####
###### 제목 6 ######

#을 앞, 뒤에 모두 붙여도 되고, 앞에만 붙여도 된다.

제목 1

제목 2

제목 3

제목 4

제목 5
제목 6
정의 목록
(DEFINITION LISTS)
WordPress
:  세계 최대의 오픈 소스 
저작물 관리 시스템 

Markdown
:  일반 텍스트 문서를
HTML로 변환하는 도구
WordPress
세계 최대의 오픈 소스 저작물 관리 시스템
Markdown
일반 텍스트 문서를 HTML로 변환하는 도구

정의 목록의 모양은 css에 어떻게 모양이 정의되었는지에 따라 달라진다. 따라서 테마를 바꾸면 정의 목록의 모양도 달라질 수 있다.

(축)약어
(ABBREVIATIONS)
마크다운(Markdown)은 일반 텍스트를
HTML로 변환한다.

*[HTML]: HyperText Markup Language

(축)약어의 정의는 문서의 어떤 곳에든 있을 수 있다.

마크다운(Markdown)은 일반 텍스트를 HTML로 변환한다.
인라인 HTML
<img src="/wp.png" align=right>

마크다운 문서를 작성할 때 마크다운으로 표현할 수 없는 것은 HTML을 이용해서 표현할 수 있다. 다만 주의해야할 것이 있다.

원래 마크다운 문법에서는 <div>, <table>, <pre>, <p>등의 블럭 엘리먼트들은 앞뒤에 빈 줄이 있어야 했지만, 워드프레스에는 markdown extra의 문법이 적용되어 있어서 그럴 필요가 없다. 다만 블럭 엘리먼트를 쓸 때는 앞에 3개 이상의 스페이스를 쓰면 안된다. 그러면 그 부분을 “서식 설정 텍스트”로 인식한다.