리전 외부 프록시 네트워크 부하 분산기는 외부 리전 IP 주소 외부의 단일 리전에서 TCP 서비스 트래픽을 실행하고 확장할 수 있게 해주는 프록시 기반의 리전별 Layer 4 부하 분산기입니다. 이러한 부하 분산기는 인터넷의 외부 TCP 트래픽을 동일한 리전의 백엔드로 분산합니다.
이 가이드에서는 영역별 네트워크 엔드포인트 그룹(NEG) 백엔드를 사용하여 리전 외부 프록시 네트워크 부하 분산기를 설정하는 방법을 설명합니다.
시작하기 전에 다음 문서를 검토하세요.
이 예시에서는 부하 분산기를 사용하여 us-west1
리전에서 2개의 영역별 NEG에 있는 전체 백엔드 VM에 TCP 트래픽을 배포합니다. 이 예시에서 서비스는 포트 80
에서 응답하도록 구성된 Apache 서버 세트입니다.
이 예시에서는 다음 다이어그램에 표시된 배포를 구성합니다.
리전 부하 분산기입니다. 모든 부하 분산기 구성요소(백엔드 인스턴스 그룹, 백엔드 서비스, 대상 프록시, 전달 규칙)는 같은 리전에 있어야 합니다.
권한
이 가이드를 진행하려면 프로젝트에서 인스턴스를 만들고 네트워크를 수정할 수 있어야 합니다. 이렇게 하려면 프로젝트 소유자 또는 편집자이거나 다음 Compute Engine IAM 역할을 모두 보유해야 합니다.
태스크 | 필요한 역할 |
---|---|
네트워크, 서브넷, 부하 분산기 구성요소 만들기 | Compute 네트워크 관리자
(roles/compute.networkAdmin ) |
방화벽 규칙 추가 및 삭제 | Compute 보안 관리자
(roles/compute.securityAdmin ) |
인스턴스 만들기 | Compute 인스턴스 관리자
(roles/compute.instanceAdmin ) |
자세한 내용은 다음 가이드를 참조하세요.
네트워크 및 서브넷 구성
부하 분산기의 백엔드를 위한 서브넷 한 개와 부하 분산기의 프록시를 위한 서브넷 한 개, 총 두 개 서브넷이 있는 VPC 네트워크가 필요합니다. 리전 부하 분산기입니다. 트래픽 소스가 부하 분산기와 동일한 리전의 서브넷에 있는 경우 VPC 네트워크 내의 트래픽이 부하 분산기로 라우팅됩니다.
이 예시에서는 다음 VPC 네트워크, 리전 및 서브넷을 사용합니다.
네트워크: 이름이
lb-network
인 커스텀 모드 VPC 네트워크백엔드 서브넷: 기본 IP 주소 범위로
10.1.2.0/24
을 사용하는us-west1
리전에 있는backend-subnet
이라는 서브넷프록시 서브넷: 기본 IP 주소 범위로
10.129.0.0/23
을 사용하는us-west1
리전에 있는proxy-only-subnet
이라는 서브넷
백엔드 네트워크 및 서브넷 만들기
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름에
lb-network
를 입력합니다.서브넷 섹션에서 다음을 수행합니다.
- 서브넷 생성 모드를 커스텀으로 설정합니다.
- 새 서브넷 섹션에 다음 정보를 입력합니다.
- 이름:
backend-subnet
- 리전:
us-west1
- IP 주소 범위:
10.1.2.0/24
- 이름:
- 완료를 클릭합니다.
만들기를 클릭합니다.
gcloud
커스텀 VPC 네트워크를 만들려면
gcloud compute networks create
명령어를 사용합니다.gcloud compute networks create lb-network --subnet-mode=custom
lb-network
네트워크의us-west1
리전에 서브넷을 만들려면gcloud compute networks subnets create
명령어를 사용합니다.gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
프록시 전용 서브넷 만들기
프록시 전용 서브넷은 Google이 사용자를 대신하여 Envoy 프록시를 실행하는 데 사용하는 IP 주소 집합을 제공합니다. 프록시는 클라이언트의 연결을 종료하고 백엔드에 새 연결을 만듭니다.
이 프록시 전용 서브넷은 lb-network
VPC 네트워크의 us-west1
리전에 있는 모든 Envoy 기반 부하 분산기에서 사용됩니다.
콘솔
Google Cloud 콘솔을 사용하는 경우에는 기다렸다가 나중에 부하 분산 페이지에서 프록시 전용 서브넷을 만들 수 있습니다.
지금 프록시 전용 서브넷을 만들려면 다음 단계를 사용합니다.
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
공유 VPC 네트워크의 이름인
lb-network
를 클릭합니다.서브넷 추가를 클릭합니다.
이름에
proxy-only-subnet
를 입력합니다.리전에서
us-west1
을 선택합니다.용도를 리전별 관리형 프록시로 설정합니다.
IP 주소 범위에
10.129.0.0/23
을 입력합니다.추가를 클릭합니다.
gcloud
프록시 전용 서브넷을 만들려면 gcloud compute networks subnets
create
명령어를 사용합니다.
gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-west1 \ --network=lb-network \ --range=10.129.0.0/23
방화벽 규칙 만들기
이 예시에서는 다음과 같은 방화벽 규칙을 만듭니다.
fw-allow-health-check
: 부하 분산되는 Google Cloud 인스턴스에 적용되는 인그레스 규칙으로, 부하 분산기 및 Google Cloud 상태 점검 시스템(130.211.0.0/22
및35.191.0.0/16
)의 트래픽을 허용합니다. 이 예시에서는 대상 태그allow-health-check
를 사용하여 적용할 백엔드 VM을 식별합니다.fw-allow-ssh
: TCP 포트22
에서 임의의 주소로부터 수신되는 SSH 연결을 허용하는 인그레스 규칙입니다. 이 규칙에 더 제한적인 소스 IP 범위를 선택할 수 있습니다. 예를 들어 SSH 세션을 시작하려는 시스템의 IP 범위를 지정할 수 있습니다. 이 예시에서는allow-ssh
대상 태그를 사용하여 방화벽 규칙이 적용되는 VM을 식별합니다.fw-allow-proxy-only-subnet
: 부하 분산기가 TCP 포트80
에서 백엔드 인스턴스와 통신할 수 있도록 허용하는 프록시 전용 서브넷의 인그레스allow
방화벽 규칙입니다. 이 예시에서는 대상 태그allow-proxy-only-subnet
을 사용하여 적용할 백엔드 VM을 식별합니다.
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭한 후 다음 필드를 작성합니다.
- 이름:
fw-allow-health-check
- 네트워크:
lb-network
- 대상: 지정된 대상 태그
- 대상 태그:
allow-health-check
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
130.211.0.0/22
및35.191.0.0/16
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
80
을 입력합니다.
- 이름:
만들기를 클릭합니다.
방화벽 규칙 만들기를 다시 한 번 클릭하여 수신 SSH 연결을 허용하는 규칙을 만듭니다.
- 이름:
fw-allow-ssh
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-ssh
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
0.0.0.0/0
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
22
을 입력합니다.
- 이름:
만들기를 클릭합니다.
방화벽 규칙 만들기를 세 번 클릭하여 프록시 전용 서브넷에서 Google Cloud 백엔드로 들어오는 연결을 허용하는 규칙을 만듭니다.
- 이름:
fw-allow-proxy-only-subnet
- 네트워크:
lb-network
- 우선순위:
1000
- 트래픽 방향: 인그레스
- 일치 시 작업: 허용
- 대상: 지정된 대상 태그
- 대상 태그:
allow-proxy-only-subnet
- 소스 필터: IPv4 범위
- 소스 IPv4 범위:
10.129.0.0/23
- 프로토콜 및 포트:
- 지정된 프로토콜 및 포트를 선택합니다.
- TCP 체크박스를 선택한 후 포트 번호에
80
을 입력합니다.
- 이름:
만들기를 클릭합니다.
gcloud
fw-allow-health-check
규칙을 만들어 Google Cloud 상태 점검이 TCP 포트80
에서 백엔드 인스턴스에 도달하도록 합니다.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp:80
allow-ssh
네트워크 태그를 사용해 VM으로 가는 SSH 연결을 허용하는fw-allow-ssh
방화벽 규칙을 만듭니다.source-ranges
를 생략하면 Google Cloud가 모든 소스를 의미하는 것으로 규칙을 해석합니다.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
프록시 전용 서브넷에 대한 인그레스 허용 방화벽 규칙을 만들어 부하 분산기가 TCP 포트
80
에서 백엔드 인스턴스와 통신할 수 있도록 합니다.gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-proxy-only-subnet \ --source-ranges=10.129.0.0/23 \ --rules=tcp:80
부하 분산기의 IP 주소 예약
콘솔
Google Cloud 콘솔에서 고정 주소 예약 페이지로 이동합니다.
새 주소의 이름을 선택합니다.
네트워크 서비스 등급에 스탠더드를 선택합니다.
IP 버전에서 IPv4를 선택합니다. IPv6 주소는 지원되지 않습니다.
유형에서 리전을 선택합니다.
리전에서
us-west1
을 선택합니다.연결 대상 옵션을 없음으로 설정된 상태로 둡니다. 부하 분산기를 만들면 이 IP 주소가 부하 분산기의 전달 규칙에 연결됩니다.
예약을 클릭하여 IP 주소를 예약합니다.
gcloud
고정 외부 IP 주소를 예약하려면
gcloud compute addresses create
명령어를 사용합니다.gcloud compute addresses create ADDRESS_NAME \ --region=us-west1 \ --network-tier=STANDARD
ADDRESS_NAME
을 이 주소에 사용할 이름으로 바꿉니다.결과를 보려면
gcloud compute addresses describe
명령어를 사용하세요.gcloud compute addresses describe ADDRESS_NAME
영역별 NEG 설정
us-west1
리전에 GCE_VM_IP_PORT
유형의 엔드포인트가 있는 영역별 NEG를 설정합니다. 먼저 VM을 만든 다음 영역별 NEG를 만들고 VM의 네트워크 엔드포인트를 NEG에 추가합니다.
VM 만들기
콘솔
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
인스턴스 만들기를 클릭합니다.
이름을
vm-a1
으로 설정합니다.리전에서
us-west1
을 선택합니다.영역에서
us-west1-a
를 선택합니다.부팅 디스크 섹션에서 부팅 디스크 옵션으로 Debian 운영체제 및 10(Buster) 버전이 선택되어 있는지 확인합니다. 필요한 경우 선택을 클릭하여 이미지를 변경합니다.
고급 옵션을 클릭합니다.
네트워킹을 클릭하고 다음 필드를 구성합니다.
- 네트워크 태그에
allow-ssh
,allow-health-check
,allow-proxy-only-subnet
을 입력합니다. - 네트워크 인터페이스에 다음을 선택합니다.
- 네트워크:
lb-network
- 서브넷:
backend-subnet
- 네트워크:
- 네트워크 태그에
관리를 클릭합니다. 시작 스크립트 필드에 다음 스크립트를 입력합니다.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
만들기를 클릭합니다.
이전 단계를 반복하여 VM을 3개 더 만듭니다. 다음 이름 및 영역 조합을 사용합니다.
- 이름:
vm-a2
| 영역:us-west1-a
- 이름:
vm-c1
| 영역:us-west1-c
- 이름:
vm-c2
| 영역:us-west1-c
- 이름:
gcloud
VM을 만들려면 gcloud compute instances create
명령어를 두 번 사용합니다. VM_NAME
및 ZONE
에 다음 조합을 사용합니다. 스크립트 콘텐츠는 두 VM 모두에서 동일합니다.
VM_NAME
:vm-a1
및ZONE
:us-west1-a
VM_NAME
:vm-a2
및ZONE
:us-west1-a
VM_NAME
:vm-c1
및ZONE
:us-west1-c
VM_NAME
:vm-c2
및ZONE
:us-west1-c
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \ --subnet=backend-subnet \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
영역별 NEG 만들기
콘솔
영역별 네트워크 엔드포인트 그룹 만들기
Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.
네트워크 엔드포인트 그룹 만들기를 클릭합니다.
이름에
zonal-neg-a
를 입력합니다.네트워크 엔드포인트 그룹 유형에 네트워크 엔드포인트 그룹(영역)을 선택합니다.
네트워크에서
lb-network
를 선택합니다.서브넷으로
backend-subnet
을 선택합니다.영역에서
us-west1-a
를 선택합니다.기본 포트에
80
을 입력합니다.만들기를 클릭합니다.
이 섹션의 모든 안내를 반복하여 다음 설정 변경사항을 사용하여 보조 영역별 NEG를 만듭니다.
- 이름:
zonal-neg-c
- 영역:
us-west1-c
- 이름:
영역별 NEG에 엔드포인트 추가
Google Cloud 콘솔에서 네트워크 엔드포인트 그룹 페이지로 이동합니다.
이전 단계에서 만든 네트워크 엔드포인트 그룹의 이름(예:
zonal-neg-a
)을 클릭합니다.네트워크 엔드포인트 그룹 세부정보 페이지의 이 그룹의 네트워크 엔드포인트 섹션에서 네트워크 엔드포인트 추가를 클릭합니다.
VM 인스턴스(예:
vm-a1
)를 선택합니다.네트워크 인터페이스 섹션에 VM 이름, 영역, 서브넷이 표시됩니다.
- IP 주소에 새 네트워크 엔드포인트의 IP 주소를 입력합니다. IP 주소를 가져오려면 nic0의 기본 IP 주소 및 별칭 IP 주소 확인을 클릭합니다.
- 포트 유형에서 기본값을 선택합니다. 엔드포인트는 네트워크 엔드포인트 그룹의 모든 엔드포인트에 기본 포트
80
을 사용합니다. Apache 서버가 포트80
에서 요청을 처리하므로 이 예시에 충분합니다. - 만들기를 클릭합니다.
네트워크 엔드포인트 추가를 클릭합니다. 두 번째 VM 인스턴스인
vm-a2
를 선택하고 이전 단계를 반복하여 엔드포인트를zonal-neg-a
에 추가합니다.이 섹션의 모든 단계를 반복하여
vm-c1
및vm-c2
에서zonal-neg-c
로 엔드포인트를 추가합니다.
gcloud
us-west1-a
영역에GCE_VM_IP_PORT
엔드포인트를 사용하여 영역별 NEG를 만듭니다.gcloud compute network-endpoint-groups create zonal-neg-a \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=us-west1-a \ --network=lb-network \ --subnet=backend-subnet
NEG를 만드는 동안
--default-port
를 지정하거나 다음 단계에서처럼 엔드포인트마다 포트 번호를 지정할 수 있습니다.엔드포인트를 영역 NEG에 추가합니다.
gcloud compute network-endpoint-groups update zonal-neg-a \ --zone=us-west1-a \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
us-west1-c
영역에GCE_VM_IP_PORT
엔드포인트를 사용하여 영역별 NEG를 만듭니다.gcloud compute network-endpoint-groups create zonal-neg-c \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=us-west1-c \ --network=lb-network \ --subnet=backend-subnet
NEG를 만드는 동안
--default-port
를 지정하거나 다음 단계에서처럼 엔드포인트마다 포트 번호를 지정할 수 있습니다.엔드포인트를 영역 NEG에 추가합니다.
gcloud compute network-endpoint-groups update zonal-neg-c \ --zone=us-west1-c \ --add-endpoint='instance=vm-c1,port=80' \ --add-endpoint='instance=vm-c2,port=80'
부하 분산기 구성
Console
구성 시작
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 부하 분산기 만들기를 클릭합니다.
- 부하 분산기 유형에 네트워크 부하 분산기(TCP/UDP/SSL)를 선택하고 다음을 클릭합니다.
- 프록시 또는 패스 스루에 프록시 부하 분산기를 선택하고 다음을 클릭합니다.
- 공개 또는 내부에서 공개(외부)를 선택하고 다음을 클릭합니다.
- 전역 또는 단일 리전 배포에서 리전 워크로드에 적합을 선택하고 다음을 클릭합니다.
- 구성을 클릭합니다.
기본 구성
- 이름에
my-ext-tcp-lb
을 입력합니다. - 리전에서
us-west1
을 선택합니다. - 네트워크에서
lb-network
를 선택합니다.
프록시 전용 서브넷 예약
- 서브넷 예약을 클릭합니다.
- 이름에
proxy-only-subnet
를 입력합니다. - IP 주소 범위에
10.129.0.0/23
을 입력합니다. - 추가를 클릭합니다.
백엔드 구성
- 백엔드 구성을 클릭합니다.
- 백엔드 유형에 영역별 네트워크 엔드포인트 그룹을 선택합니다.
- 프로토콜에서 TCP를 선택합니다.
- 첫 번째 백엔드를 구성합니다.
- 새 백엔드에서 영역별 NEG
zonal-neg-a
를 선택합니다. - 남은 기본값은 그대로 두고 완료를 클릭합니다.
- 새 백엔드에서 영역별 NEG
- 두 번째 백엔드를 구성합니다.
- 백엔드 추가를 클릭합니다.
- 새 백엔드에서 인스턴스 그룹
zonal-neg-c
를 선택합니다. - 남은 기본값은 그대로 두고 완료를 클릭합니다.
- 상태 점검을 구성합니다.
- 상태 점검에서 상태 점검 만들기를 선택합니다.
- 상태 점검 이름을
tcp-health-check
로 설정합니다. - 프로토콜에서 TCP를 선택합니다.
- 포트에
80
을 입력합니다.
- 남은 기본값은 그대로 두고 저장을 클릭합니다.
- Google Cloud 콘솔에서 백엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 모든 단계를 완료했는지 다시 확인합니다.
프런트엔드 구성
- 프런트엔드 구성을 클릭합니다.
- 이름에
ext-tcp-forwarding-rule
를 입력합니다. - 서브네트워크로
backend-subnet
을 선택합니다. - IP 주소에서
ext-tcp-ip-address
를 선택합니다. - 포트 번호에
9090
을 입력합니다. 전달 규칙은 목적지 포트가 일치하는 패킷만 전달합니다. - PROXY 프로토콜은 Apache HTTP 서버 소프트웨어에서 작동하지 않으므로 프록시 프로토콜에서 사용 중지를 선택합니다. 자세한 내용은 PROXY 프로토콜을 참조하세요.
- 완료를 클릭합니다.
- Google Cloud 콘솔에서 프런트엔드 구성 옆에 체크표시가 있는지 확인합니다. 없으면 이전 단계를 모두 완료했는지 다시 확인합니다.
검토 및 완료
- 검토 및 완료를 클릭합니다.
- 설정한 내용을 다시 한 번 확인합니다.
- 만들기를 클릭합니다.
gcloud
백엔드의 리전 상태 점검을 만듭니다.
gcloud compute health-checks create tcp tcp-health-check \ --region=us-west1 \ --use-serving-port
백엔드 서비스를 만듭니다.
gcloud compute backend-services create external-tcp-proxy-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=TCP \ --region=us-west1 \ --health-checks=tcp-health-check \ --health-checks-region=us-west1
us-west1-a
영역의 영역별 NEG를 백엔드 서비스에 추가합니다.gcloud compute backend-services add-backend external-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-a \ --network-endpoint-group-zone=us-west1-a \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=us-west1
us-west1-c
영역의 영역별 NEG를 백엔드 서비스에 추가합니다.gcloud compute backend-services add-backend external-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-c \ --network-endpoint-group-zone=us-west1-c \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=us-west1
대상 TCP 프록시를 만듭니다.
gcloud compute target-tcp-proxies create ext-tcp-target-proxy \ --backend-service=external-tcp-proxy-bs \ --region=us-west1
전달 규칙을 만듭니다.
--ports
의 경우 1~65535에서 단일 포트 번호를 지정합니다. 이 예시에서는 포트9090
을 사용합니다. 전달 규칙은 대상 포트가 일치하는 패킷만 전달합니다.gcloud compute forwarding-rules create ext-tcp-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=ext-tcp-ip-address \ --ports=9090 \ --region=us-west1 \ --target-tcp-proxy=ext-tcp-target-proxy \ --target-tcp-proxy-region=us-west1
부하 분산기 테스트
부하 분산기를 구성했으므로 부하 분산기의 IP 주소로 트래픽 전송을 테스트할 수 있습니다.
부하 분산기의 IP 주소를 가져옵니다.
IPv4 주소를 가져오려면 다음 명령어를 실행합니다.
gcloud compute addresses describe ADDRESS_NAME
다음 명령어를 실행하여 트래픽을 부하 분산기로 보냅니다.
LB_IP_ADDRESS
를 부하 분산기의 IPv4 주소로 바꿉니다.curl -m1 LB_IP_ADDRESS:9090
다음 단계
- 외부 프록시 네트워크 부하 분산기의 작동 방식은 외부 프록시 네트워크 부하 분산기 개요를 참조하세요.
- 부하 분산기의 로깅 및 모니터링을 설정하려면 프록시 네트워크 부하 분산기 로깅 및 모니터링 참조하기
- 외부 프록시 네트워크 부하 분산기에 Private Service Connect 백엔드를 추가하는 방법은 Private Service Connect 추가 참조하기
- 이후에 요금이 청구되지 않도록 만든 리소스를 삭제하려면 부하 분산기 설정 삭제 참조하기