GCP SQL 써보기 - TIL #1

날림·2022년 2월 6일
1

TIL

목록 보기
1/7
post-thumbnail

부트캠프 교재를 복붙하는 것이 아닌
실제 써보고 배운 것을 정리해보려고 합니다
매일 쓸 자신은 없지만 최대한 노력해보겠습니다


이 포스트는 수정되었습니다
사진대로 인스턴스를 생성하면 한 달도 못 가서
평가판 크레딧이 사라지고 과금 왕창 들어갑니다 ㅠㅠ

최대한 절약할 수 있는 인스턴스 생성으로
다시 올려봅니다 ㅠㅠ
아마 다음 달 무료로 쓸 수 있을 때까지
프로젝트 재설계 하면서 다시 처음부터
깔끔하게 해보겠습니다

무료로 어디까지 사용할 수 있을지는 여기서,
GCP - 무료 체험판 및 무료 등급

자세한 비용은 여기서 계산해 보시기 바랍니다
Google Cloud 가격 계산기


라즈베리파이 크롤링

파이썬으로 제 채널 유튜브 브금 리스트 & 곡을
크롤링 하고 DB에 넣는 코드를 만들고
그 코드를 같은 도커 네트워크로 돌려볼까 하다가
답을 못 찾고 일단 따로 돌리기로 한게 어제 (2022-02-05)

제 메이플 캐릭들 스펙을 매일 크롤링하는
라즈베리파이에 일 하나 더 시키기로 생각하고
크롤링 코드를 옮겨줍니다

WSL에서 테스트한 코드를 라즈베리파이에 맞게 수정하고

chromedriver = "/usr/lib/chromium-browser/chromedriver"
# 요즘은 webdriver_manager를 씀
options = webdriver.ChromeOptions()
options.add_argument("headless")
options.add_argument("--no-sandbox")
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--log-level=3")
driver = webdriver.Chrome(chromedriver, options=options)

크롤링 코드를 실행하면 좀 느리지만 잘 돌아갑니다


구글에도 DB 있을거 같은데

부트캠프에서 배웠던 건 AWS RDS였지만
다른 곳도 무료 RDBMS 서비스들은 있을거 같다 싶어서
먼저 구글을 찾아봤는데 구글도 서비스를 제공합니다

Google Cloud Platform - 데이터베이스 - SQL
들어가면 AWS RDS와 비슷한 느낌으로 사용할 수 있네요

처음 프로젝트를 생각했을 땐 API를 사용하여 곡 목록을 얻어와야지
싶어서 만들었던 (API Quota 문제로 바꿈)
프로젝트에서 SQL을 이용하기로 하고,

만들어보기

SQL 인스턴스를 만들어봤습니다

이미 만들어 놨지만 다시 한번 복습

아는게 MySQL 뿐... 선택

RDS 처음 만들 때와 비슷합니다
이름 쓰고, DB 암호 정하고 (적당히 만들어주기도 합니다 - 생성)
MySQL 버전도 지정할 수 있습니다

저는 8.0으로 만들었었습니다

리전 기본은 미국-아이오와로 되어있지만 서울을 고르는게 좋겠죠
추가: 서울이 10%~20%쯤 비쌉니다 ㅠㅠ

여러 영역: 서비스에 문제가 있을 경우 다른 영역에서 조치가 적용된다고 합니다
추가: 단일 영역으로 해야 비용이 절감됩니다

SQL 인스턴스의 성능을 설정할 수 있습니다
대단한 일을 할 것도 아니고 돈 내고 싶지도 않고
거의 그대로 두었습니다
추가: 기본 설정 그대로 두면 과금 폭탄 날아옵니다

과금 하지 않으실 거라면 다시 한번
무료 등급 확인하시고 만드시기 바랍니다
GCP - 무료 체험판 및 무료 등급


설정된 인스턴스 요약을 볼 수 있습니다
성능이 AWS RDS 프리티어보다 꽤 좋은데...
나중에 돈 내라고 하면 낮춰야겠습니다
추가: 성능이 곧 돈입니다 ㄷㄷ
그나마 진짜 돈 내라고 하기 전 알려주니 다행인가요


다 설정하고 마지막 인스턴스 만들기 누르면
살짝 시간이 지나서 인스턴스가 만들어집니다


인스턴스 설정


인스턴스의 여러가지 상태를 볼 수 있는 개요 입니다
AWS 콘솔과 비슷한듯 조금 다른듯

여기서 중요했던 것은
어떻게 인스턴스와 제 라즈베리파이를 연결할 것인가 였습니다

아마존은 친절하게 엔드포인트 & 포트를 볼 수 있었는데
구글은 어떻게 연결을 하라는 겨...?

인스턴스 연결

좀 더 자세히 알아보려고 연결 탭을 눌러봤습니다

인스턴스 IP 할당이 공개 IP로 설정 되어있고
여기 연결하려면 승인된 네트워크 또는 Cloud SQL 프록시를 사용하랍니다
이건 또 뭣인가...?

승인된 네트워크는 밑에 조금 더 쓰여있었는데
CIDR 범위를 지정하여 그 범위의 IP주소는 접근할 수 있게 하는 것
이라고 되어있습니다

사이더(Classless Inter-Domain Routing, CIDR)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP 주소 할당 방법이다.
위키백과 - 사이더 (네트워킹)

제 집 IP는 고정이 아니라서 이 방법을 사용할 수 있나 싶었습니다
그래서 다른 방법인 Cloud SQL 프록시를 찾아봅니다

Cloud SQL 프록시

Google Cloud - Cloud SQL 인증 프록시 정보
Google Cloud - 빠른 시작: Cloud SQL 인증 프록시 사용

공식 문서를 최대한 따라서 순서대로 해봅니다
프로젝트 설정과 Cloud SQL 인스턴스는 이미 만들었으니
그 다음부터

  1. 라즈베리파이에 mysql 클라이언트 설치
  • sudo apt-get update && sudo apt-get install mysql-client
    를 하면 되겠지?

    그런거 없다
    하지만 MariaDB로 대신할 수 있으니 그걸로 해봅니다

MariaDB?

MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반발하여 만들어졌으며, 배포자는 몬티 프로그램 AB(Monty Program AB)와 저작권을 공유해야 한다.
위키백과 - MariaDB

  • sudo apt-get update && sudo apt-get install mariadb-client

잘 깔았습니다

  1. Cloud SQL 인증 프록시 클라이언트 설치

제가 쓰는 라즈베리파이 4에서 uname -a를 쳐보면

32비트, arm입니다
이 커널에 맞는 걸 찾아서 받으면 될 거 같은데

리눅스 32비트 이건가...?
복붙, 복붙

  1. 인스턴스 연결 이름 확인

인스턴스 개요 창에 있던 projectID:region:instanceID 형식을 복사합니다

  1. Cloud SDK 설치

Google Cloud - Cloud SDK 설치
여기 들어가서 Debian/Ubuntu 시스템 설치를 따라합니다

설치 다 하고 마지막 gcloud init을 실행하면
구글 계정 로그인 및 프로젝트 선택이 가능합니다

  1. Cloud SQL 인증 프록시 시작

저기서 연결 이름을 3. 에서 복사한 걸로 바꿔넣고 실행
...이 안 됨 ㅋ

bash: cannot execute binary file: Exec format error.

이건 뭔 오류일까
검색해보니 자주 등장하는 오류였나 봅니다
위에서 다운 받았던

이게 라즈베리파이에서 돌아가는 것이 아니었던 겁니다
32비트 arm이 아닌 x86용

그럼 어디서 arm용을 찾지?

GitHub - GCP/cloudsql-proxy
여기를 들어가서

릴리즈 된 파일들 중 linux.arm을 받아서 라즈베리파이에 주고 실행

드디어 프록시가 돌아갑니다

mysql 접속하듯 mariadb도 접속해서 확인합니다
굳굳

WSL에서도 테스트 해봤는데
WSL Ubuntu 20.04에서 uname -a를 쳐보면

linux, 64비트, amd64니까 그냥 편하게

복붙해서 설치하면 잘 돌아갑니다


다음 할 일

크롤링 crontab 등록
서버 API 설계

profile
항상배우기

0개의 댓글