Google Cloud 네트워킹 및 TCP/IP에 대한 기본 지식('Networking in the Google Cloud' 퀘스트의 전반부 실습을 진행한 적이 있다면 가장 좋음)
기본 Unix/Linux 명령줄 지식
설정 및 요건
실습 시작 버튼을 클릭하기 전에
다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.
실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.
이 실습을 완료하려면 다음을 준비해야 합니다.
표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.
실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다.
왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.
Google Cloud 콘솔 열기 버튼
남은 시간
이 실습에 사용해야 하는 임시 사용자 인증 정보
필요한 경우 실습 진행을 위한 기타 정보
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.
다음을 클릭합니다.
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
이후에 표시되는 페이지를 클릭하여 넘깁니다.
이용약관에 동의합니다.
임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
무료 체험판을 신청하지 않습니다.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
이 실습의 목표는 코어 크기와 처리량 사이의 관계를 보여주는 것이므로 6가지 인스턴스가 이미 탑재된 상태로 실습이 제공됩니다. 이 인스턴스는 실습을 시작할 때부터 생성되어 있습니다.
Cloud 콘솔에서 탐색 메뉴 > Compute Engine > VM 인스턴스로 이동하여 인스턴스를 확인합니다.
참고: 실제 사용 환경의 인스턴스 리전과 영역은 스크린샷에 나온 것과 다를 수 있습니다.
연결 테스트
정상적으로 작동하는지 확인하기 위해 간단한 연결 테스트를 실행합니다.
콘솔에서 이름 옆에 있는 SSH 버튼을 클릭하여 SSH를 통해 instance-1에 연결합니다.
새로운 셸 창에서 다른 인스턴스 중 하나를 핑하고, 다음 명령어를 실행하여 <external ip address of instance-2>를 instance-2 외부 IP 주소로 바꿉니다.
ping -c 5 <external ip address of instance-2>
출력 예:
student-00-aafd1bd9c185@instance-1:~$ ping -c 5 35.194.158.169
PING 35.194.158.169 (35.194.158.169) 56(84) bytes of data.
64 bytes from 35.194.158.169: icmp_seq=1 ttl=76 time=1.89 ms
64 bytes from 35.194.158.169: icmp_seq=2 ttl=76 time=0.409 ms
64 bytes from 35.194.158.169: icmp_seq=3 ttl=76 time=0.542 ms
64 bytes from 35.194.158.169: icmp_seq=4 ttl=76 time=0.557 ms
64 bytes from 35.194.158.169: icmp_seq=5 ttl=76 time=0.559 ms
--- 35.194.158.169 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4001ms
rtt min/avg/max/mdev = 0.409/0.792/1.894/0.554 ms
또 다른 인스턴스를 핑합니다. <external ip address of instance-3>을 instance-3의 외부 IP 주소로 바꾸고 ping을 실행합니다.
ping -c 5 <external ip address of instance-3>
출력 예:
student-00-aafd1bd9c185@instance-1:~$ ping -c 5 35.194.187.75
PING 35.194.187.75 (35.194.187.75) 56(84) bytes of data.
64 bytes from 35.194.187.75: icmp_seq=1 ttl=64 time=1.59 ms
64 bytes from 35.194.187.75: icmp_seq=2 ttl=64 time=0.336 ms
64 bytes from 35.194.187.75: icmp_seq=3 ttl=64 time=0.338 ms
64 bytes from 35.194.187.75: icmp_seq=4 ttl=64 time=0.302 ms
64 bytes from 35.194.187.75: icmp_seq=5 ttl=64 time=0.270 ms
--- 35.194.187.75 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.270/0.568/1.596/0.514 ms
이상이 없으면 계속 진행하세요.
방화벽 규칙 검토
이 실습을 위한 방화벽 규칙도 생성되어 있습니다.
규칙을 확인하려면 탐색 메뉴 > 네트워킹 > VPC 네트워크 > 방화벽으로 이동한 후 iperftesting 방화벽을 클릭하세요.
방화벽 규칙인 iperftesting은 다음과 같은 구성을 사용합니다.
필드
값
설명
이름
iperftesting
새 규칙 이름
대상
네트워크의 모든 인스턴스
소스 IP 범위
0.0.0.0/0
인터넷의 모든 IP 주소에 대한 방화벽을 엽니다.
프로토콜 및 포트
tcp:5001, udp:5001
트래픽 방향
인그레스
일치 시 작업
허용
실습을 시작할 준비가 되었습니다.
사용 사례 1: 네트워킹 및 Compute Engine 코어 수
이 첫 번째 시나리오에서는 사용하는 머신의 크기가 측정 가능한 처리량에 어떤 영향을 주는지 살펴볼 수 있습니다.
Dobermanifesto는 반려동물에 특화된 동영상 마이크로블로그 네트워크입니다. 전 세계에서 시청하고 경험할 수 있도록 동물을 주제로 한 동영상을 업로드하여 어디든 전송할 수 있습니다.
그러나 Compute Engine 백엔드와 데이터를 주고받는 동안 관측된 대역폭은 기대만큼 높지 않았습니다.
작업 1. 동작 재현
이 동작을 시도하고 재현하기 위해 동일한 영역에 인스턴스를 2개 생성하고 그 사이에 iperf를 100회 실행했습니다.
성능이 훨씬 더 나빠졌습니다. 테스트에 문제가 있는 것이 분명하므로 회사에서 더 자세한 정보와 더 심층적인 재현 단계를 제공받아야 합니다.
이제 시나리오를 설정하겠습니다.
Dobermanifesto의 환경
Compute Engine 콘솔의 VM 인스턴스 목록으로 돌아갑니다.
SSH를 통해 instance-1(1vCPU 3.75GB)에 연결하고 다음 명령어를 실행해 iperf '수신자'를 설정합니다.
iperf -s
그런 다음 SSH를 통해 instance-2(1vCPU 3.75GB)에 연결하고 instance-1을 가리키는 iperf 트래픽을 생성합니다.
iperf -c <external ip address of instance-1>
출력 예:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 35.225.180.44
------------------------------------------------------------
Client connecting to 35.225.180.44, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.20.0.4 port 56330 connected with 35.225.180.44 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0000-10.0010 sec 4.66 GBytes 4.00 Gbits/sec
instance-1로 돌아가 Ctrl + C를 입력하여 수신자를 종료합니다.
테스트 환경
Compute Engine 콘솔로 돌아가 다른 SSH 창을 열어 instance-6(1vCPU e2-micro .6GB)을 연결합니다.
다음 명령어를 실행해 '수신자'로 설정합니다.
iperf -s
출력 예:
student-00-aafd1bd9c185@instance-6:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
instance-2 SSH 창에서 instance-6에 대한 연결을 테스트합니다.
iperf -c <internal ip address of instance-6>
출력 예:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.40.0.7
------------------------------------------------------------
Client connecting to 10.40.0.7, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.5 port 54029 connected with 10.40.0.7 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.29 GBytes 1.96 Gbits/sec
instance-6으로 돌아가 Ctrl + C를 입력하여 수신자를 종료합니다.
어떻게 되었을까요? 대역폭이 향상된 것으로 보입니다. 실제로 이 사례와 같은 상황이 발생한 것일 수도 있고 대역폭이 더 낮았을 수도 있습니다.
다음 섹션에서는 총 코어 수에 따라 대역폭이 어떻게 제한되는지 살펴봅니다. 그리고 코어 수가 이렇게 작은 범위(코어 1개)에서는 대역폭이 결코 2Gbit/초 정도를 초과하지 않는다는 사실을 확인할 수 있습니다. 결과적으로 네트워크 속도는 느려지고 대역폭은 제한되며 Dobermanifesto가 경험했던 것과 비슷한 상황이 발생합니다. 곧 이어질 테스트에서 4개의 CPU 머신을 사용하면 더 우수한 결과를 얻을 수 있습니다.
가상 머신의 아웃바운드 트래픽 또는 이그레스 트래픽에는 최대 네트워크 이그레스 처리량 한도가 적용됩니다. 이 한도는 가상 머신 인스턴스의 vCPU 개수에 따라 달라집니다. 각 코어의 최대 성능에는 2Gbit/초(Gbps)의 한도가 적용됩니다. 코어를 추가할 때마다 네트워크 한도가 늘어나며 이론적으로는 각 가상 머신별로 최대 16Gbps까지 가능합니다.
즉 네트워크에 가상 CPU가 많을수록 네트워킹 처리량도 늘어납니다.
실제는 어떤지 알아보기 위해 동일한 영역에 서로 다른 코어 크기 그룹을 설정하고 그 사이에서 iperf를 1,000회 실행했습니다.
코어 수가 많을수록 평균 및 최대 처리량도 높아집니다. 이 간단한 테스트를 통해서도 더 높은 사양의 머신에 엄격한 16Gbps 한도가 적용되는 것을 알 수 있습니다.
참고: 여러 개의 스레드(약 8개 전후)를 사용해 iperf를 실행하는 경우 10Gbps를 넘을 수 있고, e2-standard-16 이상을 사용하면 약 16Gbps까지 속도를 높일 수 있습니다. 이 실습 환경에서는 해당 크기의 머신이 없지만 다음 실습에서 여러 개의 스레드를 사용해 테스트해 보겠습니다.
고대역폭 등급 1 구성을 선택하고 50~100Gbps에 도달할 수 있는 더 높은 비용의 N2, N2D, C2, C2D 시리즈 VM도 있습니다.
작업 2. 결과를 개선하는 방법
Dobermanifesto에 있는 네트워크는 1vCPU 머신을 사용합니다. 코어 크기가 클수록 Dobermanifesto에서 더 나은 성능을 얻는 데 도움이 된다는 이론이 맞는지 테스트해 보겠습니다.
SSH를 통해 instance-3(4vCPU 15GB 메모리)을 연결하고 다음 명령어를 실행합니다.
iperf -s
출력 예:
student-00-aafd1bd9c185@instance-3:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
SSH를 통해 instance-4(4vCPU 15GB 메모리)에 연결하려면 다음 명령어를 실행합니다.
iperf -c <internal ip address of instance-3>
출력 예:
student-00-aafd1bd9c185@instance-4:~$ iperf -c 10.40.0.2
------------------------------------------------------------
Client connecting to 10.40.0.2, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.4 port 54081 connected with 10.40.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 8.93 GBytes 7.67 Gbits/sec
이제 스레드 4개를 사용해 다시 시도해 봅니다.
iperf -c <internal ip address of instance-3> -P4
이번에는 스레드 8개를 사용해 보세요.
iperf -c <internal ip address of instance-3> -P8
instance-3으로 돌아가 Ctrl + C를 입력하여 수신자를 종료합니다.
이 실험에서는 서버와 클라이언트 모두 4vCPU를 사용했으며 속도가 크게 향상되었습니다. 전송 속도는 6.64GB만큼, 대역폭은 초당 5.71Gbit/초만큼 증가했습니다. 스레드를 여러 개 사용할 때 코어 수에 해당하는 최대한도의 성능에 도달할 수 있었습니다.
계속해서 성능이 더 높은 4vCPU 머신(인스턴스 유형: 'highcpu-4')인 instance-5로 테스트해 보겠습니다.
이 인스턴스 유형은 CPU는 더 빠르지만 메모리는 적습니다. 스레드가 많아질 때 차이가 느껴지나요?
이제 Dobermanifesto팀은 어떤 경로를 택할지 결정해야 합니다. CPU 사용량을 프로파일링하고 가격 정보를 살펴본 후 평균 처리량이 4배 가까이 높으면서도 e2-standard-8 머신보다 더 저렴한 e2-standard-4 머신을 사용하기로 결정했습니다.
크기가 더 큰 머신으로 이전할 때 장점 중 하나는 실행 빈도가 줄어든다는 점입니다. 데이터 전송만을 위해 머신이 작동 상태로 상당 시간을 소비한 것으로 나타났습니다. 머신 크기가 달라지면서 인스턴스의 다운타임이 증가하여 부하 분산기가 매일 실행하는 총 인스턴스 수를 줄일 수 있었습니다. 결국 등급이 더 높은 머신을 구매할 수밖에 없었으나 다른 한편으로는 월별 코어 시간이 더 줄어들었습니다.
성능이 성과에 직접 영향을 미칠 때는 잘 고려해서 섬세하게 절충해야 할 부분이 많습니다.
사용 사례 2: 내부 IP를 사용한 Google Cloud 네트워킹
이 다음 예시에서는 iperf를 사용하여 처리량 속도를 테스트합니다. 머신 하나를 서버로 설정한 다음 다른 머신을 가리키고 결과를 비교합니다.
Gecko Protocol은 게임 및 기타 실시간 그래픽 시스템을 위한 커스텀 경량 네트워킹 프로토콜을 제공하는 B2B 기업입니다. 이 기업은 대규모 동영상 및 그래픽 파일을 전송하고 트랜스코딩하는 백엔드 머신의 처리량이 예상보다 낮은 것을 발견했습니다.
Gecko Protocol에서 실시한 기본 iperf 테스트 결과는 다음과 같습니다.
------------------------------------------------------------
Client connecting to 104.155.145.79, TCP port 5001 TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.128.0.3 port 53504 connected with 104.155.145.79 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.03 GBytes 884 Mbits/sec
테스트를 다시 실행했을 때 네트워크 설정은 동일했는데도 테스트 결과가 매우 달랐습니다.
student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.128.0.2
------------------------------------------------------------
Client connecting to 10.128.0.2, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.128.0.3 port 38978 connected with 10.128.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.27 GBytes 1.95 Gbits/sec
초당 1.95GB는 Gecko Protocol의 그래프에 표시된 것보다 훨씬 높은 수치였습니다. 어떻게 된 걸까요?
이 시나리오를 재현해 보겠습니다.
콘솔에서 SSH를 통해 instance-1에 연결하고 iperf 수신자를 설정합니다.
iperf -s
출력 예:
student-00-aafd1bd9c185@instance-1:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
SSH를 통해 instance-2에 연결하고 외부 IP 주소의 연결을 확인합니다.
iperf -c <external ip address of instance-1>
출력 예:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 35.201.145.135
------------------------------------------------------------
Client connecting to 35.201.145.135, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.8 port 58691 connected with 35.201.145.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.36 GBytes 1.16 Gbits/sec
심층 논의 끝에 Gecko Protocol에서 머신 연결에는 외부 IP를 사용하고 테스트에는 내부 IP를 사용했다는 사실을 확인했습니다. 머신이 네트워크에 있는 경우 내부 IP로 연결하면 처리량 속도가 더 높아집니다.
이제 내부 주소와의 연결을 확인합니다.
iperf -c <internal ip address of instance-1>
출력 예:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.40.0.5
------------------------------------------------------------
Client connecting to 10.40.0.5, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.8 port 42950 connected with 10.40.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.26 GBytes 1.94 Gbits/sec
두 가지 서로 다른 전송 및 대역폭 속도를 살펴보겠습니다. 이 예시에서는 내부 IP 주소로 변경할 때 전송 속도는 0.9GB만큼 향상되고 대역폭은 0.78Gbit/초만큼 향상되었습니다. 이처럼 내부 연결 시 속도가 더 빠르다는 것이 입증되었습니다.
Dobermanifesto 문제를 해결하면서 얻은 지식에 비추어 볼 때 크기가 더 큰 머신을 사용하면 네트워크 속도를 개선할 수 있을까요? instance-2는 1vCPU에 불과하므로 조금 더 큰 머신을 사용하면 연결 속도가 얼마나 빨라질까요? 훨씬 더 큰 머신은 또 어떨까요? 계속해서 내부 IP 주소를 사용한 테스트를 수행해 보겠습니다. 시간적 여유가 있다면 외부 IP 주소를 사용한 테스트도 진행해 보세요.
vCPU 머신 4개
SSH를 통해 instance-3에 연결하고 내부 IP 주소와의 연결을 테스트합니다.
iperf -c <internal ip address of instance-1>
출력 예(결과에 차이가 있을 수 있음):
student-00-aafd1bd9c185@instance-3:~$ iperf -c 10.40.0.5
------------------------------------------------------------
Client connecting to 10.40.0.5, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.6 port 39115 connected with 10.40.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 4.53 GBytes 3.89 Gbits/sec
높은 CPU 머신 4개
SSH를 통해 instance-5에 연결하고 내부 IP 주소와의 연결을 테스트합니다.
iperf -c <internal ip address of instance-1>
출력 예:
student-00-aafd1bd9c185@instance-5:~$ iperf -c 10.40.0.5
------------------------------------------------------------
Client connecting to 10.40.0.5, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.3 port 39736 connected with 10.40.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 10.3 GBytes 8.84 Gbits/sec
실행 결과 처리량 속도가 현저히 높아집니다.
Gecko Protocol에서는 어떤 크기의 코어가 가장 적합한지도 고려해야 할 것으로 보입니다. 이 간단한 디버깅 세션으로 동영상 및 그래픽 데이터 전송 속도가 약 14배 증가했습니다. 이 기업의 서비스가 고성능 컴퓨팅 시나리오를 위한 성능 백엔드 서비스를 기반으로 한다는 사실을 고려하면 엄청난 변화입니다.
Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.
설명서 최종 업데이트: 2023년 10월 4일
실습 최종 테스트: 2023년 10월 4일
Copyright 2025 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.