_์ด ๋ฌธ์ ๋ ์๋ @tebriel์ด hashic/terraform# 21709 ๋ก ์ด์์ต๋๋ค. ๊ณต๊ธ์ ๋ถํ ์ ๊ฒฐ๊ณผ๋ก ์ฌ๊ธฐ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋์์ต๋๋ค. ๋ฌธ์ ์ ๋ณธ๋ฌธ์ ์๋์ ์์ต๋๋ค._
Terraform v0.12.2
+ provider.archive v1.2.1
+ provider.aws v2.14.0
+ provider.local v1.2.2
+ provider.template v2.1.1
// Nothing exceptionally important at this time
https://gist.github.com/tebriel/08f699ce69555a2670884343f9609feb
๋ถ์ ์ง ๋ง์์ค
๊ณํ์ ์๋ฃํ์ด์ผ ํ๋ค
Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (9761610 vs. 4194304)
๋ด ์ค๊ฐ ๊ท๋ชจ์ ํ๋ก์ ํธ์ ๋ํ Terraform ๊ณํ.
make ๋ด์์ ์คํ๋์ง๋ง make ์ธ๋ถ์์ ๋์ผํ ํ๋กํ์ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ 0.11.14์์ ์ ์ ์ฉ๋ฉ๋๋ค.
hashicor/terraform#21709์์ ์กฐ์ฌ์ ํ ๋ก ์ ํ ํ ์ด ๊ณต๊ธ์์ ํ์ผ ํฌ๊ธฐ ์ ํ์ ์ถ๊ฐํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ๋ด๊ธฐ ์ํด ์ด๊ฒ์ ์ฌ๊ธฐ๋ก ์ฎ๊ฒผ์ต๋๋ค(Terraform Core์์ ๋ถ๊ณผํ 4MB ์ ํ๋ณด๋ค ์์ ์ฌ์ฉ์๊ฐ ํ๋กํ ์ฝ ์ค๋ฒํค๋ ๊ณ์ฐ) local_file
๋ฐ์ดํฐ ์์ค์ local_file
๋ฆฌ์์ค ์ ํ ๋ชจ๋์ ๋ํ ํด๋น ์ ํ์ ๋ฌธ์ํํฉ๋๋ค.
์ด๊ฑฐ ์์ง ์ด๋ ค์๋์? ์ ๋ผ๋ฉด ์ด๊ฑฐ ๋ฝ๊ณ ์ถ์ต๋๋ค.
์์ฒญ์ ๋ช
ํํ/ํ์ธํ ์ ์์ต๋๊น?
์๋ ํ์ธ์
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ณํ์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ธ์ ?
์ด๊ฑฐ ์์ง ์ด๋ ค์๋์? ์ ๋ผ๋ฉด ์ด๊ฑฐ ๋ฝ๊ณ ์ถ์ต๋๋ค.
์์ฒญ์ ๋ช ํํ/ํ์ธํ ์ ์์ต๋๊น?1. Add file size limit of 4mb in the local provider through a validator 2. Update docs to reflect the size limit
๊ฐ์ฅ ์ข์ ํด๊ฒฐ์ฑ ์ 4Mb ์ด์์ ํ์ผ์ ์ง์ํ๋ ๊ฒ์ ๋๋ค.
์, ์ด ๋ฌธ์ ๋ ์ฌ์ ํ ์ง์๋ฉ๋๋ค.
์, ์ค๋ ์์ AWS Lambda ์์นด์ด๋ธ ํ์ผ์ ๊ฐ๋ฆฌํค๋ local_file ๋ฐ์ดํฐ ์์ค์์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์๋
ํ์ธ์, ์ด ๋ฌธ์ ์ ์ง์ ์ด ์์ต๋๊น? ์๋๋ฉด ์ฃผ์ฐจ๋์ด ์์์ต๋๊น? Kubernetes์ ํ
ํ๋ฆฟ ํ์ผ์ ์ฌ์ฉํ๊ณ ํ์ผ์ ๋์คํฌ์ ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ ๋ ํฐ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. kubernetes ์ดํ Yaml ํ์ผ์ ๊ฝค ์ปค์ง ์ ์์ต๋๋ค.
๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ์ผ์ 2๋ก ๋ถํ ํ๋ ๊ฒ์
๋๋ค. ์ด๊ธฐ ํ์ผ ํฌ๊ธฐ๋ 2Mb์์ต๋๋ค. ์ด์ ๊ฐ๊ฐ 1Mb๋ณด๋ค ์ฝ๊ฐ ์์ 2๊ฐ์ ํ์ผ์ด ์๊ณ ์ ๋๋ก ์๋ํฉ๋๋ค.
๊ฐ์ฌ ํด์
aws_lambda_function
๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค...
data "local_file" "lambda" {
filename = "${path.module}/out.zip"
}
resource "aws_s3_bucket_object" "lambda" {
bucket = var.lambda_bucket
key = "${local.name}.zip"
source = data.local_file.lambda.filename
etag = filemd5(data.local_file.lambda.filename)
}
resource "aws_lambda_function" "login_api" {
function_name = local.name
role = aws_iam_role.lambda_role.arn
handler = "lambda.handler"
s3_bucket = aws_s3_bucket_object.lambda.bucket
s3_key = aws_s3_bucket_object.lambda.key
source_code_hash = filebase64sha256(data.local_file.lambda.filename)
์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ๋์๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํ ํฉ์๊ฐ ์์ต๋๊น?
4MB๋ฅผ ์ด๊ณผํ๋ ํ์ผ์ ์ด์ ์ ์์ ๊ฒ์ฌ๊ฐ ๋ถ์กฑํ์ฌ ์๋ํ์ต๋๋ค(https://github.com/hashicorp/terraform/issues/21709#issuecomment-501497885 ์ฐธ์กฐ). ๋ฐ๋ผ์ ์ค๋ฅ๊ฐ ์ ํจํ๊ณ ์ ํ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง ์์ต๋๋ค. terraform core์์๋ ์ต์
์ด ๋ ๊ฒ์
๋๋ค(Re: "๋ฒ๊ทธ๊ฐ ์๋๋ผ ๊ธฐ๋ฅ์
๋๋ค").
๊ณต๊ธ์ ๋ด์์ ํ์ผ์ 4MB ์ฒญํฌ๋ก ๋ถํ ํ์ฌ ๋ก์ปฌ์์ ์ฒ๋ฆฌํ ์ ์์ง๋ง ์์ฒด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ถ๊ตฌํ ์ ์์ง๋ง ๋ด๊ฐ ์๊ฐ์ ๋ญ๋นํ๊ธฐ ์ ์ ๊ทธ๊ฒ์ด ๋ฐ์๋ค์ฌ์ง ์ ์์๊น์ @apparentlymart ?
Terraform 0.12.23 ๋ฐ aws ๊ณต๊ธ์ 2.61.0 ์ฌ์ฉ, ๋์ผํ ์ค๋ฅ Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (18182422 vs. 4194304)
๋ฐ์
์ฝ์ด ํจํค์ง๊ฐ 64MB๋ฅผ ํ์ฉํ๋๋ก ์ ๋ฐ์ดํธ๋ ๊ฒ ๊ฐ์ต๋๋ค - https://github.com/hashicorp/terraform/pull/20906#
๊ทธ๋ฆฌ๊ณ ๋๋ค ์ ํ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด 50MB ํ์ผ์ ์ ๋ก๋ํ ์ ์์ต๋๋ค.
์์ ์ ๊ฒ์ 50MB๋ก ์ค์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ง ์์๊น์?
์ด ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ ์ํ ์ฐธ๊ณ ์ฉ์ผ๋ก.
zip ํ์ผ์ s3 ๋ฒํท์ ๋ฃ์ผ๋ฉด ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ filebase64(path) ํจ์ ๋์ aws_s3_bucket_object.lambda_zip.content_base64
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ๊ทธ๋ฌ๋ฉด ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ ๊ฒ์
๋๋ค(๋๋ ์ ์ด๋ ์ ๋ฅผ ์ํ ์์ ์ฌํญ์ด์์ต๋๋ค).
๋ ๋ค๋ฅธ ์ต์ ์ ์ธ๋ถ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด deployment_package
๋ณ์๊ฐ ์๋ ํ์ผ ์ด๋ฆ์ด ์ฃผ์ด์ง๋ฉด ๋ค์์ ์ฌ์ฉํ์ฌ base64 ํด์๋ฅผ ์์ฑํฉ๋๋ค.
data "external" "deployment_package" {
program = ["/bin/bash", "-c", <<EOS
#!/bin/bash
set -e
SHA=$(openssl dgst -sha256 ${var.deployment_package} | cut -d' ' -f2 | base64)
jq -n --arg sha "$SHA" '{"filebase64sha256": $sha }'
EOS
]
}
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ์ญ์์ค.
source_code_hash = data.external.deployment_package.result.filebase64sha256
๋น์ ์๊ฒ ์ค ๊ฒ
+ source_code_hash = "ZjRkOTM4MzBlMDk4ODVkNWZmMDIyMTAwMmNkMDhmMTJhYTUxMDUzZmIzOThkMmE4ODQyOTc2MjcwNThmZmE3Nwo="
+1 ์ด ๋ฌธ์ ๋ ๋ ํฐ ํ์ผ์ ํ ๋ผํผ์ ์๋์ ์ผ๋ก ์ธ๋ผ์ธํ๊ธฐ๋ฅผ ์ํ๋ฏ๋ก ๋ง์ ๊ณ ํต์ ์ผ๊ธฐํฉ๋๋ค.
https://github.com/hashicorp/terraform/pull/20906 ์ด 1๋ ์ ์ ๋ณํฉ๋์์ง๋ง ์์์ ์ค๋ช ํ ์ฆ์์ด ์ฌ์ ํ ์ง์๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
grpc ์ ์ก์ ๋ํ ์ ํ์ ํ๋ก์ ํธ ์ ์ฒด์์ ๋๋ ค ์ด๋ฌํ ํ์ด๋ก๋๋ฅผ ํ์ฉํ ์ ์๋ ๋ค์ด์คํธ๋ฆผ ์๋น์ค๊ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ ์์ด ์ ๋๋ก ์๋ํ๋๋ก ํ ์ ์์ต๋๊น?
Terraform 0.12.24์์ ๊ณ์ ๋ฐ์ํฉ๋๋ค. GRPC ์ ํ ์ค๋ฅ๋ฅผ ์์ ํ๊ธฐ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด๊ฒ์ AWS ๊ณต๊ธ์์ ๋ฒ์ 3.14.1์ ์ฌ์ฉํ์ฌ API Gateway(v2) ์ ํจ๊ป body
๋ฅผ ์ฌ์ฉํ ๋ Terraform 0.13.5์์ ๊ณ์ ๋ฐ์ํฉ๋๋ค.
๋ช
ํ์ฑ์ ๋ํ๊ธฐ ์ํด ์ ๊ฒฝ์ฐ์๋ file
ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
body = file(var.body)
๋ฌธ์ ์ ํ์ผ ํฌ๊ธฐ๋ 1.5MB์ ๋๋ค.
body
์ ์ธ์ ์ ๊ฑฐํ๋ฉด Terraform์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
jq
๋ฅผ ์ฌ์ฉํ์ฌ ๋ณธ๋ฌธ ํฌ๊ธฐ๋ฅผ ~500KB๋ก ์์ถํ๊ณ ์ถ์ํ๋๋ฐ ์ค๋ฅ๊ฐ ์์์ต๋๋ค. ์๊ณ ๊ฐ์ด 4MB, 1MB๋ณด๋ค ๋ฎ์ ์ ์์ต๋๊น?
๋๋ ์ฌ์ ํ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค
ํ
๋ผํผ v0.12.29
provider.archive v2.0.0
provider.aws v3.15.0
provider.template v2.2.0
archive_file
์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฉฑ๋ฑ์ฑ์ ๋ง๋๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ 4mb ์ด์์ ํ์ผ์ ์ง์ํ๋ ค๋ฉด filebase64
๊ฐ ํ์ํฉ๋๋ค.
๋ธ๋ ์ดํฌ ์ฌ์ด์ local_file์ ์ฌ์ฉํ์ฌ ....
data "archive_file" "this" {
type = "zip"
output_path = "${path.module}/test.zip"
source {
filename = "test.crt"
content = file("${path.module}/archive/test.crt")
}
source {
filename = "binary-file"
content = filebase64("${path.module}/archive/binary-file")
}
source {
filename = "config.yml"
content = data.template_file.this.rendered
}
}
๋ํ IBM Cloud์ Rust ๊ธฐ๋ฅ์ ๋ฐฐ์นํ๋ ค๊ณ ์๋ํ๋ ์ค์ ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. @atamgp ์ ์ ์ฌํ๊ฒ, ๋๋ data "archive_file"
๋ก ์คํจํฉ๋๋ค.
grpc: received message larger than max (11484267 vs. 4194304)
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ฑ๊ณตํ๋๋ผ๋(๋๋ .zip
ํ์ผ์ด ์๋์ผ๋ก ์์ฑ๋จ) resource "ibm_function_action"
๋ ์ฌ์ ํ ์คํจํฉ๋๋ค.
grpc: received message larger than max (7074738 vs. 4194304)
Terraform v0.14.3
+ provider registry.terraform.io/hashicorp/archive v2.0.0
+ provider registry.terraform.io/hashicorp/local v2.0.0
+ provider registry.terraform.io/ibm-cloud/ibm v1.12.0
kubernetes ๊ตฌ์ฑ ๋งต๊ณผ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค.
resource "kubernetes_config_map" "nginx" {
metadata {
name = "geoip"
namespace = "ingress"
}
binary_data = {
"GeoLite2-Country.mmdb" = filebase64("${path.module}/config/GeoLite2-Country.mmdb")
}
}
Acquiring state lock. This may take a few moments...
Error: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (5248767 vs. 4194304)
Terraform v0.14.4
+ provider registry.terraform.io/hashicorp/kubernetes v1.13.3
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฆฌ์์ค ์ฝ๋์ ์๋ ๋ฌธ์ ์์ ์ ํ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฒํท์ ์ ๋ก๋๋ ํ์ผ์ ์ฌ์ฉํ์ฌ(์์ถํ์ง ์๊ณ ) ๋ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๋์์ด ๋ ๊ฒ์ s3์ .body๊ฐ ์ผ๋ฐ์ ์ผ๋ก .rendered(์ด์ ์ ์ฌ์ฉํ๋)์ ๋ฐ๋๋๋ ์คํธ๋ฆผ์ด๋ผ๋ ์ฌ์ค์ ๋๋ค. ๋ฆฌ์์ค ์์ค์ ๋ ๋ง์ ๋ฌธ์๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ AWS ๊ณต๊ธ์์ ๋ฒ์ 3.14.1์ ์ฌ์ฉํ์ฌ API Gateway(v2) ์ ํจ๊ป
body
๋ฅผ ์ฌ์ฉํ ๋ Terraform 0.13.5์์ ๊ณ์ ๋ฐ์ํฉ๋๋ค.๋ช ํ์ฑ์ ๋ํ๊ธฐ ์ํด ์ ๊ฒฝ์ฐ์๋
file
ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.body = file(var.body)
๋ฌธ์ ์ ํ์ผ ํฌ๊ธฐ๋ 1.5MB์ ๋๋ค.
body
์ ์ธ์ ์ ๊ฑฐํ๋ฉด Terraform์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋ฉ๋๋ค.์ ๋ฐ์ดํธ
jq
๋ฅผ ์ฌ์ฉํ์ฌ ๋ณธ๋ฌธ ํฌ๊ธฐ๋ฅผ ~500KB๋ก ์์ถํ๊ณ ์ถ์ํ๋๋ฐ ์ค๋ฅ๊ฐ ์์์ต๋๋ค. ์๊ณ ๊ฐ์ด 4MB, 1MB๋ณด๋ค ๋ฎ์ ์ ์์ต๋๊น?
@finferflu - ๊ฐ์ ๊ฒ์ ์ฐพ์์ต๋๋ค. ์ฐ๋ฆฌ๋ 1.5mb openapi json ํ์ผ๋ก ์ด๊ฒ์ ์คํํ์ต๋๋ค. JSON์ ์ค์ ํ์ผ ํธ๋ค์ด ์ด ๋ฌธ์ ์ ์์ธ์ด ์๋๋ผ๋ ์ธ์์ ๋ฐ์์ง๋ง ์ด์ REST API์ "๋ณธ๋ฌธ"์ ์ด๊ฒ์ด ํฌํจ๋์ด ์ํ์ ํฌํจ๋๋ฉฐ ์๋ง๋ ๋ง์ ์ด์ค์ผ์ดํ ๋ฌธ์๊ฐ ์์ ์ ์์ต๋๋ค. ์ํ์ ๋ค๋ฅธ ํญ๋ชฉ - ์ํ ํ์ผ์ด 4MB๋ฅผ ์ด๊ณผํฉ๋๋ค. Swagger์ ๋ํ ๋ก์ปฌ ํ์ผ์ ํผํ๊ธฐ ์ํด S3์ ์ ๋ก๋ํ๊ณ TF์์ s3 ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ง์ํ๋ ๊ฐ๋ ฅํ ์งํ์ ๋๋ค.
v0.15.4 ๋ฐ terraform ํด๋ผ์ฐ๋์์ ์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. Terraform ํด๋ผ์ฐ๋๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ผ๋ถ ์ธํ๋ผ๋ฅผ ๊ฐ์ ธ์จ ๋ค์ ๊ณํ์ ์๋ํ์ง๋ง ์ํ ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
โท
โ ์ค๋ฅ: ํ๋ฌ๊ทธ์ธ ์ค๋ฅ
โ
โ okta_group.user_type_non_service_accounts,
โ groups.tf ์ค 174, "okta_group" "user_type_non_service_accounts" ๋ฆฌ์์ค:
โ 174: ๋ฆฌ์์ค "okta_group" "user_type_non_service_accounts" {
โ
โ ํ๋ฌ๊ทธ์ธ์ด ํ๋ฌ๊ทธ์ธ์์ ์๊ธฐ์น ์์ ์ค๋ฅ๋ฅผ ๋ฐํํ์ต๋๋ค.(*GRPCProvider).UpgradeResourceState: rpc ์ค๋ฅ: ์ฝ๋ = ResourceExhausted desc = grpc: ์ต๋๋ณด๋ค ํฐ ๋ฉ์์ง๋ฅผ ์์ ํ์ต๋๋ค(6280527 ๋ 4194304).
๋ด ํ์ผ์ ์ฝ 2.4MB์ด๋ฉฐ ์ค๋๋ ์๋ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค.
resource "local_file" "parse-template" {
content = templatefile(local.template-name, {
var1 = value1
var2 = value2
})
filename = "${local.script-name}"
}
์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
swagger JSON ํ์ผ ๋ฐ API ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํ ๋ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
JSON swagger ํ์ผ์ ์์ถํ์ฌ ํ์ผ์ ์ถฉ๋ถํ๊ฒ ์ถ์ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ผ์์ ์ผ๋ก ์์ ํ์ต๋๋ค. swagger ํฌ๊ธฐ๊ฐ 1.4Mb์์ 950Kb๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
์ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋์ง๋ง ํ๊ณ์ ๊ทผ์ ํ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ด์ํ๊ฒ๋ local.template_file ๋๋ local.file ๋ฐ์ดํฐ/๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ์์๋๋ฐ๋ ์ค๋ฅ๊ฐ ๊ณ์ ๋ฐ์ํ์ต๋๋ค(๋์ templatefile ํจ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค).
๋ ๋ง์ ๊ด์ฌ์ ๋ฐ์ ์ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ ๋ง์ ๊ด์ฌ์ ๋ฐ์ ์ ์์ต๋๊น?