이건 좀 며칠 전에 공부했던 거긴 하지만, 그래도 기록으로서 남겨놓고 싶은 마음이 있기에 한 번 적어보도록 한다!
AWS가 끝나고 새로 배운 클라우드는 바로 구글 클라우드였다! (두둥) google이야 너무 익숙한 플랫폼이고, 용어의 차이가 좀 있겠지만 근본은 비슷할거라 생각했는데 생각보다 헷갈리는 것들이 많았다. 작동하는 방식부터가 상상도 못한 방식(?)이어서 처음엔 이해도 안됐고, 그래도 내가 익숙하게 사용해왔던 게 aws라 그런지 얘를 기준에 두고 생각하다 보니 헷갈리고... 공식문서도... 어려움. 그리고 사용자 친화적 인터페이스라면서요 저에겐 친화적이지 않았어요 강사님은 잘 되어있다고 하셨지만 그냥 쉬운 공식 문서라는 것은 세상에 없는듯 ^^ 걍 공식 달고 나오는 것들 다 어려워... 작동 방식부터가 aws와 너무 다르고, 속도도 개느려서 답답했는데 그래서 관련해서 기본적인 개념들에 대해서 찾아보는 시간을 가졌었다.
특이하게도?! 구글 클라우드는 API를 기반으로 움직이는 시스템을 가졌다. 비유하자면 구글 클라우드는 거대한 디지털 도서관이라고 할 수 있다. 도서관에는 수많은 책이 있다. (👉🏻 API 또는 라이브러리)
그래서 VPC 같은 서비스를 사용하려고 할 때 라이브러리 사용을 눌러서 허가를 받아야 했던 것이다.
구글 클라우드
AWS
구글 클라우드
AWS
👉🏻 두 플랫폼 모두 강력한 클라우드 서비스를 제공한다. 때문에 각각의 장단점을 파악하고 적절한 클라우드 서비스를 이용하는 것이 좋을 것 같다.
다른 건 그럭저럭 AWS에서 배웠던 지식을 바탕으로 이해를 하고 넘어갔는데 (크게 다르다고 느끼지 않았음) 로드 밸런싱에서는 띠용 🙄 ? 이해가 안 가는 부분들이 좀 많았는데... 그래서 이 글을 작성하게 된 것이었다. 한 번 차근차근 과정을 되짚어보며 이해를 해보자며... AWS와 비교했을 때 무엇이 다른지, 왜 내가 어렵게 느끼는 것인지를 한 번 생각해봤다.
AWS의 로드 밸런싱 시스템은 대형 푸드코트와 같다.
👉🏻 손님(트래픽)이 푸드코트에 들어오면 안내 데스크(로드 밸런서)에서 원하는 음식 종류를 확인하고, 해당 종류의 음식점 중에서 한가한 곳으로 안내한다. 이렇게 모든 음식점에 손님을 골고루 분산시킨다.
구글 클라우드의 로드 밸런싱 시스템은 글로벌 체인 레스토랑과 유사하다.
👉🏻 고객(트래픽)이 레스토랑을 이용하고자 할 때, 중앙 예약 시스템(로드 밸런서)에 연락한다. 이 시스템은 고객의 위치, 각 지점의 혼잡도, 특별 요구사항 등을 고려하여 가장 적합한 지점으로 안내한다.
구글 클라우드의 시스템이 좀 더 글로벌한 한 덩어리(?)로 운영되는 것처럼 느껴져서, 초반엔 aws랑 너무 다르니까 😫 이게 무슨 이야기인지 전혀 이해가 가지 않았다. 작동 기반부터가 다른 것...
AWS | Google Cloud | |
---|---|---|
작동 기반 | 리전 내에서 작동 | 글로벌 로드 밸런싱을 기본으로 제공 |
IP 주소 할당 | 여러 IP 주소를 사용할 수 있음 | 단일 글로벌 IP 주소 사용 |
자동 확장성 | Auto Scaling 그룹을 별도 구성 | 자동 확장이 더 원활하게 통합되어 있음 |
구성의 유연성 | 더 세밀한 구성 가능 | 더 간단하고 자동화된 구성 제공 |
콘텐츠 기반 라우팅 | Application Load Balancer에서 제공 | HTTP(S) 로드 밸런서에서 더 강력한 기능 제공 |
그러니까, 처음엔 대충 같겠지 뭐~ 하고 생각하며 들어갔던 나의 생각과는 전혀 달랐던 것임!! 작동 기반부터가 다르고, 설정이 필요한 부분도 달랐던 것이다.
AWS의 시스템이 더 세밀한 제어를 제공하지만 그만큼 내가 관리할 포인트가 많아진다는 이야기겠고, 구글 클라우드의 시스템은 글로벌 스케일이라는 점과 훨씬 더 단순하게 진행이 된다는 것이 달랐다. 프로젝트에 따라서 다르게 사용하면 될 일인 것!
API 활성화는 로드 밸런싱 서비스를 사용하기 위한 필수 단계이다!! 활성화를 시켜놔야 구글 클라우드에서 해당 서비스를 사용할 수 있다.
* 실습에서 생성한 인스턴스 그룹 = 로드 밸런서의 백엔드로 사용되는, 실제 사용자의 요청을 처리할 서버들의 집합
* 궁금했던 점 - 왜 프론트엔드 인스턴스는 따로 구성하지 않는 걸까?
- Google Cloud Load Balancer 자체가 프론트 엔드 역할을 수행한다!
👉🏻 로드 밸런서 자체가 사용자의 요청을 받아 백엔드 인스턴스로 분배하는 프론트엔드 역할을 한다.- 로드 밸런서는 글로벌 프론트엔드 IP 주소를 제공하며, 이를 통해 트래픽을 분산시킨다.
- 백엔드 서비스가 실제 요청을 처리하고, 로드 밸런서는 이 백엔드 서비스로 트래픽을 분산시키는 역할을 한다.
⇨ 이는 구글 클라우드의 로드 밸런싱 아키텍처 자체의 특징! 관리를 쉽게 도와주고, 효율성을 높여준다.
콘솔에서 "로드 밸런싱"으로 이동 후 "로드 밸런서 만들기"를 클릭
로드 밸런서 유형을 선택한다.
프론트엔드 구성
백엔드 구성
상태 확인 설정 - 상태 확인 간격, 타임아웃, 실패 임계값 등 지정
* 실습에서의 헬스 체크(Health Check)가 바로 이 상태 확인!
- 백엔드 인스턴스가 트래픽을 적절하게 처리할 수 있는지 확인
- 주기적으로 인스턴스에 프로브(probe)를 보내 응답 확인
- HTTP 200 OK 응답을 받으면 해당 인스턴스를 '정상'으로 간주
👉🏻 이를 통해 로드 밸런서가 정상 작동 중인 인스턴스에만 트래픽을 전달할 수 있다
👉🏻 또한 미리 헬스 체크를 만들어두며 여러 개의 로드 밸런서에서 동일한 헬스 체크를 재사용할 수 있고, 미리 세밀하게 조정할 수도 있다
실습 할 때, 이 부분에서 막혀서 웹 서버가 열리지 않는 문제가 발생했었다 ^^ default 방화벽 규칙에 전부 포함이 되어있는 줄 알았는데? 아니었습니다? 로드 밸런서를 구성할 때 꼭 이 부분을 확인하고 넘어가는 것이 필요할 것 같다.
HTTP 트래픽 허용 규칙 추가
인스턴스 네트워크 태그 확인
웹 서버 실행 상태 확인
sudo systemctl status nginx | apache2
등의 명령어로 웹 서버가 실행 중인지 확인외부 IP 주소 확인 - VM 인스턴스 목록에서 외부 IP 주소 올바른지 확인
브라우저 캐시 삭제
👉🏻 클라우드 환경에서는 보안을 위해 기본적으로 모든 포트를 차단하고 필요한 포트만 명시적으로 열어주는 방식을 사용한다. 때문에 웹 서버를 운영하기 위해서는 반드시 HTTP 트래픽(80 포트)를 허용하는 규칙을 추가해주어야 한다. 클라우드 환경에서 서비스를 제공할 때 반드시 확인해야 하는 중요한 설정이다!
👉🏻 tcp:80
이 필요한 이유가 뭘까?! (왜 http:80
이 아닌지?!)
TCP는 전송 계층 프로토콜이고, HTTP는 응용 계층 프로토콜이다. HTTP는 TCP 위에서 동작한다. TCP는 두 컴퓨터 간에 신뢰할 수 있는 연결을 설정하는 역할을 한다. HTTP는 이 연결을 사용해서 서버와 클라이언트 간에 데이터를 전송한다.
그런데! HTTP는 TCP 없이는 기능할 수 없다. TCP가 먼저 연결을 설정해야 HTTP가 그 위에서 동작할 수 있다.
때문에 80번 포트는 HTTP의 기본 포트이긴 하지만! 실제로는 TCP 연결을 통해서 사용된다. 그래서 방화벽 규칙에서도 http:80
이 아니라 tcp:80
포트를 열어주어야 HTTP 통신이 가능해진다.
구글 클라우드... 편리한 점을 잘 모르겠다... 이걸 먼저 배웠다면 달랐을까...? 하지만 시장에서 많이 쓰이는 데에는 다 이유가 있는법 (끄덕)... 이런 생각만 든달까요 ^^~ 깔깔 아무튼 그래도 AWS를 배우고 나서 비교하면서 새로 알아가는 재미가 살짝(아주살짝)있는 것 같다. 정리해야지~정리해야지~ 미루다가 이제 함 ㅎㅎ 지금은 애져를 공부 중이다... 이제 수업 자체는 얼마 안남았는데 남은 시간 화이팅 하고! 프로젝트도 열심히 해야겠다~ 파이팅~
본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다.