Mesh 구성 항목 참조
Mesh 구성 항목 참조 (Mesh configuration entry reference)
모든 서비스 메시 프록시에 적용되는 전역 기본 구성을 정의할 수 있게 해주는 mesh 구성 항목에 대한 참조 정보를 제공해요. 이 구성 항목의 설정은 모든 네임스페이스와 페더레이션된 데이터센터에 걸쳐 적용돼요.
출처: 문서
본문
이 페이지는 모든 서비스 메시 프록시에 적용되는 전역 기본 구성을 정의할 수 있게 해주는 mesh 구성 항목에 대한 참조 정보를 제공합니다.
이 구성 항목의 설정은 모든 네임스페이스와 페더레이션된 데이터센터에 걸쳐 적용됩니다.
샘플 구성 항목 (Sample Configuration Entries)
다음 예시는 mesh 구성 항목에 대한 일반적인 구성 패턴을 보여줍니다.
메시 전체 TLS 최소 버전 (Mesh-wide TLS Min Version)
서비스 메시 mTLS 트래픽이 TLS v1.2 이상을 사용하도록 강제합니다.
Kind = "mesh"
TLS {
Incoming {
TLSMinVersion = "TLSv1_2"
}
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
spec:
tls:
incoming:
tlsMinVersion: TLSv1_2
{
"Kind": "mesh",
"TLS": {
"Incoming": {
"TLSMinVersion": "TLSv1_2"
}
}
}
mesh 구성 항목은 기본 네임스페이스에서만 생성할 수 있으며 모든 네임스페이스의 프록시에 적용됩니다.
Kind = "mesh"
TLS {
Incoming {
TLSMinVersion = "TLSv1_2"
}
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
namespace: default
spec:
tls:
incoming:
tlsMinVersion: TLSv1_2
{
"Kind": "mesh",
"Namespace": "default",
"Partition": "default",
"TLS": {
"Incoming": {
"TLSMinVersion": "TLSv1_2"
}
}
}
Kubernetes 예시에는 partition 필드가 포함되지 않습니다. 구성 항목은 Kubernetes에서 커스텀 리소스 정의(CRD)를 사용해 적용되며, 이는 자신의 파티션에만 범위를 지정할 수 있습니다.
메시 목적지만 (Mesh Destinations Only)
투명 프록시가 메시의 주소로만 다이얼하도록 허용합니다.
Kind = "mesh"
TransparentProxy {
MeshDestinationsOnly = true
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
spec:
transparentProxy:
meshDestinationsOnly: true
{
"Kind": "mesh",
"TransparentProxy": {
"MeshDestinationsOnly": true
}
}
mesh 구성 항목은 기본 네임스페이스에서만 생성할 수 있으며 모든 네임스페이스의 프록시에 적용됩니다.
Kind = "mesh"
TransparentProxy {
MeshDestinationsOnly = true
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
namespace: default
spec:
transparentProxy:
meshDestinationsOnly: true
{
"Kind": "mesh",
"Namespace": "default",
"Partition": "default",
"TransparentProxy": {
"MeshDestinationsOnly": true
}
}
Kubernetes 예시에는 partition 필드가 포함되지 않습니다. 구성 항목은 Kubernetes에서 커스텀 리소스 정의(CRD)를 사용해 적용되며, 이는 자신의 파티션에만 범위를 지정할 수 있습니다.
메시 게이트웨이를 통한 피어링 (Peer Through Mesh Gateways)
PeerThroughMeshGateways 매개변수를 true로 설정해 피어링 제어 플레인 트래픽을 메시 게이트웨이를 통해 라우팅합니다.
Kind = "mesh"
Peering {
PeerThroughMeshGateways = true
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
spec:
peering:
peerThroughMeshGateways: true
{
"Kind": "mesh",
"Peering": {
"PeerThroughMeshGateways": true
}
}
PeerThroughMeshGateways 속성은 기본 파티션의 mesh 구성 항목에서만 설정할 수 있습니다.
기본 파티션은 메시 게이트웨이 제어 플레인을 통해 Consul 서버로 라우팅되는 트래픽을 소유합니다.
Kind = "mesh"
Peering {
PeerThroughMeshGateways = true
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
namespace: default
spec:
peering:
peerThroughMeshGateways: true
{
"Kind": "mesh",
"Peering": {
"PeerThroughMeshGateways": true
}
}
Kubernetes 예시에는 partition 필드가 포함되지 않습니다. 구성 항목은 Kubernetes에서 커스텀 리소스 정의(CRD)를 사용해 적용되며, 이는 자신의 파티션에만 범위를 지정할 수 있습니다.
요청 정규화 (Request Normalization)
HTTP.Incoming.RequestNormalization 아래의 옵션을 활성화해 메시 프록시로의 모든 인바운드 트래픽에 정규화를 적용합니다.
호환성 경고 : 이 기능은 Consul CE 1.20.1 및 Consul Enterprise 1.20.1, 1.19.2, 1.18.3, 1.15.15부터 사용할 수 있습니다. 최신 기능과 개선 사항을 활용하려면 최신 버전의 Consul로 업그레이드하는 것이 좋습니다.
Kind = "mesh"
HTTP {
Incoming {
RequestNormalization {
InsecureDisablePathNormalization = false // default false, shown for completeness
MergeSlashes = true
PathWithEscapedSlashesAction = "UNESCAPE_AND_FORWARD"
HeadersWithUnderscoresAction = "REJECT_REQUEST"
}
}
}
apiVersion: consul.hashicorp.com/v1alpha1
kind: Mesh
metadata:
name: mesh
spec:
http:
incoming:
requestNormalization:
insecureDisablePathNormalization: false # default false, shown for completeness
mergeSlashes: true
pathWithEscapedSlashesAction: UNESCAPE_AND_FORWARD
headersWithUnderscoresAction: REJECT_REQUEST
{
"Kind": "mesh",
"HTTP": {
"Incoming": {
"RequestNormalization": {
"InsecureDisablePathNormalization": false,
"MergeSlashes": true,
"PathWithEscapedSlashesAction": "UNESCAPE_AND_FORWARD",
"HeadersWithUnderscoresAction": "REJECT_REQUEST"
}
}
}
}
사용 가능한 필드 (Available Fields)
Kind—mesh로 설정해야 합니다.Namespace(string:"default") Enterprise —default로 설정해야 합니다. 구성은 모든 네임스페이스에 적용됩니다.Partition(string:"default") Enterprise — 구성 항목이 적용되는 admin 파티션의 이름을 지정합니다. 추가 정보는 Admin 파티션 문서를 참조하세요.Meta(map<string|string>: nil) — 임의의 KV 메타데이터 쌍을 지정합니다. Consul 1.8.4에 추가되었습니다.TransparentProxy(TransparentProxyConfig:) — 투명 모드의 프록시에 특정한 구성을 제어합니다. v1.10.0에 추가되었습니다. MeshDestinationsOnly(bool:false) — 투명 모드로 작동하는 사이드카 프록시가 Consul 메시에 등록되지 않은 IP 주소로 트래픽을 프록시할 수 있는지 결정합니다. 활성화되면 트래픽은 업스트림 프록시 또는 메시 네이티브 서비스로만 프록시됩니다. 비활성화되면 요청이 원래 대상 IP 주소로 그대로 프록시됩니다. Consul은 연결을 암호화하지 않습니다.
AllowEnablingPermissiveMutualTLS(bool:false) — proxy-defaults 및 service-defaults 구성 항목에서MutualTLSMode=permissive를 설정할 수 있는지 제어합니다.ValidateClusters(bool:false) — 라우트 테이블이 참조하는 클러스터가 검증되는지 제어합니다. 기본값은false입니다.false로 설정되고 라우트가 존재하지 않는 클러스터를 참조하면 라우트 테이블이 로드되고 존재하지 않는 클러스터로의 라우팅은 404를 초래합니다.true로 설정되고 라우트가 존재하지 않는 클러스터를 참조하면 라우트 테이블이 로드되지 않습니다. 자세한 내용은 Envoy 문서의 HTTP 라우트 구성을 참조하세요.TLS(TLSConfig:) — 서비스 메시에 대한 TLS 구성입니다. Incoming(TLSDirectionConfig:) — connect-proxy 및 terminating-gateway 프록시 종류의 공용 리스너를 대상으로 하는 인바운드 mTLS 연결에 대한 TLS 구성입니다. TLSMinVersion(string:"") — 지원되는 기본 최소 TLS 버전을 설정합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy v1.22.0 이상은 최소 버전으로 TLS 1.2를 기본값으로 사용하고, 이전 버전의 Envoy는 TLS 1.0을 기본값으로 사용합니다.TLSMaxVersion(string:"") — 지원되는 기본 최대 TLS 버전을 설정합니다.TLSMinVersion보다 크거나 같아야 합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy는 인바운드 연결에 대한 최대 버전으로 TLS 1.3을 기본값으로 사용합니다.CipherSuites(array: ) — TLS 1.2 이하를 사용해 연결을 협상할 때 지원할 기본 TLS 암호화 스위트 목록을 설정합니다. 지정하지 않으면 Envoy는 기본 서버 암호화 목록을 사용합니다. 지원되는 암호화 스위트 목록은 consul/types/tls.go에서 볼 수 있으며 Envoy의 기본 지원에 따라 달라집니다. 향후 Envoy 릴리스에서 현재 지원되지만 안전하지 않은 암호화 스위트를 제거할 수 있으며, Envoy에 추가된 암호화 스위트가 있다면 향후 Consul 릴리스에서 새 지원 암호화 스위트를 추가할 수 있습니다.
Outgoing(TLSDirectionConfig:) — connect-proxy 및 ingress-gateway 프록시 종류에서 업스트림으로 다이얼하는 아웃바운드 mTLS 연결에 대한 TLS 구성입니다. TLSMinVersion(string:"") — 지원되는 기본 최소 TLS 버전을 설정합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy v1.22.0 이상은 최소 버전으로 TLS 1.2를 기본값으로 사용하고, 이전 버전의 Envoy는 TLS 1.0을 기본값으로 사용합니다.TLSMaxVersion(string:"") — 지원되는 기본 최대 TLS 버전을 설정합니다.TLSMinVersion보다 크거나 같아야 합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy는 아웃바운드 연결에 대한 최대 버전으로 TLS 1.2를 기본값으로 사용하지만, 향후 Envoy 릴리스에서 이를 TLS 1.3으로 변경할 수 있습니다.CipherSuites(array: ) — TLS 1.2 이하를 사용해 연결을 협상할 때 지원할 기본 TLS 암호화 스위트 목록을 설정합니다. 지정하지 않으면 Envoy는 기본 서버 암호화 목록을 사용합니다. 지원되는 암호화 스위트 목록은 consul/types/tls.go에서 볼 수 있으며 Envoy의 기본 지원에 따라 달라집니다.
HTTP(HTTPConfig:) — 서비스 메시에 대한 HTTP 구성입니다. SanitizeXForwardedClientCert(bool:) — true로 구성하면 모든 Envoy 프록시에 대해forward_client_cert_details옵션이SANITIZE로 설정됩니다. 결과적으로 Consul은 다음 홉에x-forwarded-client-cert헤더를 포함하지 않습니다.false(기본값)로 설정하면 XFCC 헤더가 업스트림 애플리케이션으로 전파됩니다.Incoming(DirectionalHTTPConfig:) — 메시 프록시로의 인바운드 트래픽에 대한 HTTP 구성입니다. RequestNormalization(RequestNormalizationConfig:) — 메시 프록시로의 인바운드 트래픽에 대한 요청 정규화 구성입니다. InsecureDisablePathNormalization(bool:false) — Envoy 리스너의HttpConnectionManager에서normalize_path옵션의 값을 설정합니다. 기본값은false입니다. Consul에서true로 설정하면 Envoy 프록시에 대해normalize_path가false로 설정됩니다. 이 매개변수는 RFC 3986에 따른 요청 URL 경로 정규화,\를/로 변환, 비예약 %-인코딩 문자 디코딩을 비활성화합니다. 경로 일치 규칙이 있는 L7 인텐션을 사용할 때는 정규화되지 않은 경로 값으로 일치 규칙을 우회하지 않도록 경로 정규화를 활성화하는 것이 좋습니다.MergeSlashes(bool:false) — Envoy 리스너의HttpConnectionManager에서merge_slashes옵션의 값을 설정합니다. 기본값은false입니다. 이 옵션은 연속된/문자를 병합하는 요청 URL 경로의 정규화를 제어합니다. 이 정규화는 RFC 3986의 일부가 아닙니다. 경로 일치 규칙이 있는 L7 인텐션을 사용할 때, 합법적인 서비스 트래픽이 반복/문자 허용에 의존하거나 업스트림 서비스가 단일/다중 슬래시를 구분하도록 구성되지 않는 한 정규화되지 않은 경로 값을 통한 일치 규칙 우회를 피하기 위해 이 설정을 활성화하는 것이 좋습니다.PathWithEscapedSlashesAction(string:"") — Envoy 리스너의HttpConnectionManager에서path_with_escaped_slashes_action옵션의 값을 설정합니다. 이 옵션의 기본값은 빈 값으로,IMPLEMENTATION_SPECIFIC_DEFAULT와 동일합니다. 이 매개변수는 경로에 이스케이프된 슬래시가 있는 요청 URL 경로에 대한 응답으로 취할 동작을 제어합니다. 경로 일치 규칙이 있는 L7 인텐션을 사용할 때, 합법적인 서비스 트래픽이 이스케이프된/또는\문자 허용에 의존하거나 업스트림 서비스가 이스케이프/비이스케이프 슬래시를 구분하도록 구성되지 않는 한 정규화되지 않은 경로 값을 통한 일치 규칙 우회를 피하기 위해 이 설정을 활성화하는 것이 좋습니다. 사용 가능한 옵션에 대한 자세한 내용은 Envoy 문서를 참조하세요.HeadersWithUnderscoresAction(string:"") —common_http_protocol_options아래 Envoy 리스너의HttpConnectionManager에서headers_with_underscores_action옵션의 값을 설정합니다. 이 옵션의 기본값은 빈 값으로,ALLOW와 동일합니다. 사용 가능한 옵션에 대한 자세한 내용은 Envoy 문서를 참조하세요.
Peering(PeeringMeshConfig:) — 피어링 연결에 특정한 구성을 제어합니다. PeerThroughMeshGateways(bool:) — 피어링 제어 플레인 트래픽을 메시 게이트웨이를 통해 라우팅해야 하는지 결정합니다. 활성화되면 다이얼링 클러스터가 메시 게이트웨이를 통해 피어에 연락하려고 시도합니다. 호출을 수락하는 클러스터는 Consul 서버의 주소가 아니라 메시 게이트웨이의 주소를 광고합니다.
apiVersion—consul.hashicorp.com/v1alpha1로 설정해야 합니다.kind—Mesh로 설정해야 합니다.metadata name—mesh로 설정해야 합니다.namespaceEnterprise —default로 설정해야 합니다. Consul Community Edition을 실행 중이라면 네임스페이스는 무시됩니다(Consul CE의 Kubernetes 네임스페이스 참조). Consul Enterprise를 실행 중이라면 Consul Enterprise의 Kubernetes 네임스페이스에서 추가 정보를 참조하세요.
spec transparentProxy(TransparentProxyConfig:) — 투명 모드의 프록시에 특정한 구성을 제어합니다. v1.10.0에 추가되었습니다. meshDestinationsOnly(bool:false) — 투명 모드로 작동하는 사이드카 프록시가 Consul 메시에 등록되지 않은 IP 주소로 트래픽을 프록시할 수 있는지 결정합니다. 활성화되면 트래픽은 업스트림 프록시 또는 메시 네이티브 서비스로만 프록시됩니다. 비활성화되면 요청이 원래 대상 IP 주소로 그대로 프록시됩니다. Consul은 연결을 암호화하지 않습니다.allowEnablingPermissiveMutualTLS(bool:false) — proxy-defaults 및 service-defaults 구성 항목에서MutualTLSMode=permissive를 설정할 수 있는지 제어합니다.validateClusters(bool:false) — 라우트 테이블이 참조하는 클러스터가 검증되는지 제어합니다. 기본값은false입니다.false로 설정되고 라우트가 존재하지 않는 클러스터를 참조하면 라우트 테이블이 로드되고 존재하지 않는 클러스터로의 라우팅은 404를 초래합니다.true로 설정되고 라우트가 존재하지 않는 클러스터를 참조하면 라우트 테이블이 로드되지 않습니다. 자세한 내용은 Envoy 문서의 HTTP 라우트 구성을 참조하세요.
spec tls(TLSConfig:) — 서비스 메시에 대한 TLS 구성입니다. incoming(TLSDirectionConfig:) — connect-proxy 및 terminating-gateway 프록시 종류의 공용 리스너를 대상으로 하는 인바운드 mTLS 연결에 대한 TLS 구성입니다. tlsMinVersion(string:"") — 지원되는 기본 최소 TLS 버전을 설정합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy v1.22.0 이상은 최소 버전으로 TLS 1.2를 기본값으로 사용하고, 이전 버전의 Envoy는 TLS 1.0을 기본값으로 사용합니다.tlsMaxVersion(string:"") — 지원되는 기본 최대 TLS 버전을 설정합니다.tls_min_version보다 크거나 같아야 합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy는 인바운드 연결에 대한 최대 버전으로 TLS 1.3을 기본값으로 사용합니다.cipherSuites(array: ) — TLS 1.2 이하를 사용해 연결을 협상할 때 지원할 기본 TLS 암호화 스위트 목록을 설정합니다. 지정하지 않으면 Envoy는 기본 서버 암호화 목록을 사용합니다. 지원되는 암호화 스위트 목록은 consul/types/tls.go에서 볼 수 있으며 Envoy의 기본 지원에 따라 달라집니다.
outgoing(TLSDirectionConfig:) — connect-proxy 및 ingress-gateway 프록시 종류에서 업스트림으로 다이얼하는 아웃바운드 mTLS 연결에 대한 TLS 구성입니다. tlsMinVersion(string:"") — 지원되는 기본 최소 TLS 버전을 설정합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy v1.22.0 이상은 최소 버전으로 TLS 1.2를 기본값으로 사용하고, 이전 버전의 Envoy는 TLS 1.0을 기본값으로 사용합니다.tlsMaxVersion(string:"") — 지원되는 기본 최대 TLS 버전을 설정합니다.tls_min_version보다 크거나 같아야 합니다.TLS_AUTO,TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3중 하나입니다. 지정하지 않으면 Envoy는 아웃바운드 연결에 대한 최대 버전으로 TLS 1.2를 기본값으로 사용하지만, 향후 Envoy 릴리스에서 이를 TLS 1.3으로 변경할 수 있습니다.cipherSuites(array: ) — TLS 1.2 이하를 사용해 연결을 협상할 때 지원할 기본 TLS 암호화 스위트 목록을 설정합니다. 지정하지 않으면 Envoy는 기본 서버 암호화 목록을 사용합니다. 지원되는 암호화 스위트 목록은 consul/types/tls.go에서 볼 수 있으며 Envoy의 기본 지원에 따라 달라집니다.
spec http(HTTPConfig:) — 서비스 메시에 대한 HTTP 구성입니다. sanitizeXForwardedClientCert(bool:) — true로 구성하면 모든 Envoy 프록시에 대해forward_client_cert_details옵션이SANITIZE로 설정됩니다. 결과적으로 Consul은 다음 홉에x-forwarded-client-cert헤더를 포함하지 않습니다.false(기본값)로 설정하면 XFCC 헤더가 업스트림 애플리케이션으로 전파됩니다.incoming(DirectionalHTTPConfig:) — 메시 프록시로의 인바운드 트래픽에 대한 HTTP 구성입니다. requestNormalization(RequestNormalizationConfig:) — 메시 프록시로의 인바운드 트래픽에 대한 요청 정규화 구성입니다. insecureDisablePathNormalization(bool:false) — Envoy 리스너의HttpConnectionManager에서normalize_path옵션의 값을 설정합니다. 기본값은false입니다. Consul에서true로 설정하면 Envoy 프록시에 대해normalize_path가false로 설정됩니다. 이 매개변수는 RFC 3986에 따른 요청 URL 경로 정규화,\를/로 변환, 비예약 %-인코딩 문자 디코딩을 비활성화합니다. 경로 일치 규칙이 있는 L7 인텐션을 사용할 때는 정규화되지 않은 경로 값으로 일치 규칙을 우회하지 않도록 경로 정규화를 활성화하는 것이 좋습니다.mergeSlashes(bool:false) — Envoy 리스너의HttpConnectionManager에서merge_slashes옵션의 값을 설정합니다. 기본값은false입니다. 이 옵션은 연속된/문자를 병합하는 요청 URL 경로의 정규화를 제어합니다. 이 정규화는 RFC 3986의 일부가 아닙니다. 경로 일치 규칙이 있는 L7 인텐션을 사용할 때, 합법적인 서비스 트래픽이 반복/문자 허용에 의존하거나 업스트림 서비스가 단일/다중 슬래시를 구분하도록 구성되지 않는 한 정규화되지 않은 경로 값을 통한 일치 규칙 우회를 피하기 위해 이 설정을 활성화하는 것이 좋습니다.pathWithEscapedSlashesAction(string:"") — Envoy 리스너의HttpConnectionManager에서path_with_escaped_slashes_action옵션의 값을 설정합니다. 이 옵션의 기본값은 빈 값으로,IMPLEMENTATION_SPECIFIC_DEFAULT와 동일합니다. 이 매개변수는 경로에 이스케이프된 슬래시가 있는 요청 URL 경로에 대한 응답으로 취할 동작을 제어합니다. 경로 일치 규칙이 있는 L7 인텐션을 사용할 때, 합법적인 서비스 트래픽이 이스케이프된/또는\문자 허용에 의존하거나 업스트림 서비스가 이스케이프/비이스케이프 슬래시를 구분하도록 구성되지 않는 한 정규화되지 않은 경로 값을 통한 일치 규칙 우회를 피하기 위해 이 설정을 활성화하는 것이 좋습니다. 사용 가능한 옵션에 대한 자세한 내용은 Envoy 문서를 참조하세요.headersWithUnderscoresAction(string:"") —common_http_protocol_options아래 Envoy 리스너의HttpConnectionManager에서headers_with_underscores_action옵션의 값을 설정합니다. 이 옵션의 기본값은 빈 값으로,ALLOW와 동일합니다. 사용 가능한 옵션에 대한 자세한 내용은 Envoy 문서를 참조하세요.
spec peering(PeeringMeshConfig:) — 피어링 연결에 특정한 구성을 제어합니다. peerThroughMeshGateways(bool:) — 피어링 제어 플레인 트래픽을 메시 게이트웨이를 통해 라우팅해야 하는지 결정합니다. 활성화되면 다이얼링 클러스터가 메시 게이트웨이를 통해 피어에 연락하려고 시도합니다. 호출을 수락하는 클러스터는 Consul 서버의 주소가 아니라 메시 게이트웨이의 주소를 광고합니다.
ACLs
구성 항목은 ACL로 보호할 수 있습니다.
mesh 구성 항목을 읽는 데는 특정 권한이 필요하지 않습니다.
mesh 구성 항목을 생성, 업데이트 또는 삭제하려면 operator:write가 필요합니다.