์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[์€ผ] S3์— ์—…๋กœ๋“œํ•œ ์‚ฌ์ง„ : ์ด๋ฏธ์ง€ ํ•ซ๋งํฌ ๋ฐฉ์ง€ ๊ณผ์ • (2)

๋ณธ๋ฌธ

ํ•ซ๋งํฌ๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์™œ ๋ฐฉ์ง€ํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฐ€ 

ํ•ซ๋งํ‚น์€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŒ…๋œ ์„œ๋ฒ„์—์„œ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ๋งํฌํ•˜๋Š” ํ–‰์œ„์ด๋‹ค
ํ•ด๋‹น ํŒŒ์ผ์„ ํ•ซ๋งํ‚นํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์„œ๋ฒ„์— ํ˜ธ์ŠคํŒ…ํ•˜๋ฉด์„œ ์ถœ์ฒ˜๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค
 
์€ผ์— ์„ค์ •์ด ํ•„์š”ํ•œ ์ด์œ  
์€ผ๋Š” ์ถ”์–ต์ด ๋‹ด๊ธด ๊ฐœ์ธ ์‚ฌ์ง„์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์—‡๋ณด๋‹ค ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋ณด์•ˆ์ด ํ•„์š”ํ•˜๋‹ค 

 

์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€

 
1. CloudFront Signed URL + ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„ ์„ค์ • ํ˜น์€ CloudFront Signed Cookie 
ํ˜น์€ CloudFront WAF์—์„œ Referer ํ—ค๋” ๊ฒ€์ฆ 
2. ์˜ค๋ฆฌ์ง„์—์„œ ์ง์ ‘ ์ ‘๊ทผ ์ฐจ๋‹จ (CloudFront๋งŒ ๊ฑฐ์น˜๋„๋ก ์ œํ•œ)

 
3๋ฒˆ์€ ์ €๋ฒˆ ๊ธ€์—์„œ S3์— CloudFront๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค 
2๋ฒˆ์€ 1๋ฒˆ์„ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ๊ฐœ์„ ์ด ๋˜๋Š” ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ์„ ์ง„ํ–‰ํ•˜๋ ค ํ•œ๋‹ค 
(๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ Referer๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ , VPN์ด๋‚˜ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐํšŒ ๊ฐ€๋Šฅํ•˜๋‹ค ๋”ฐ๋ผ์„œ 1๋ฒˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค)


CloudFront Signed Cookie ์„ ํƒ ์ด์œ  

CloudFront Signed Cookie ๋ฐฉ์‹์œผ๋กœ ๋ฐฉ์ง€ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค 

 
๋ฐฉ์•ˆ1) CloudFront Signed URL ์ ์šฉ 
Signed URL์€ ๋งŒ๋ฃŒ ์‹œ๊ฐ„, ์„œ๋ช… ๊ฐ’ ๋“ฑ์˜ ์š”์†Œ ๋•Œ๋ฌธ์— ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜์ง€๋งŒ, ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„ ๋™์•ˆ์—๋Š” ๋™์ผํ•œ URL์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์œ ํšจ ๊ธฐ๊ฐ„ ๋‚ด์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ๋Š” ์ •์  URL์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, Signed URL์„ ์ƒ์„ฑํ•  ๋•Œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ 1์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ๊ทธ 1์‹œ๊ฐ„ ๋™์•ˆ์€ ๊ฐ™์€ Signed URL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, Next.js์˜ `next/image`๊ฐ€ ์ด๋ฅผ ์ •์  URL์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ, ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด URL์ด ๋ฌดํšจํ™”๋˜๊ณ , ์ƒˆ๋กœ์šด Signed URL์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ๋Š” URL์ด ๋‹ค์‹œ ๋™์ ์œผ๋กœ ๋ณ€ํ•œ๋‹ค.
 
๊ณผ์ • 
1. ์—…๋กœ๋“œ : ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด, ๋ฐฑ์—”๋“œ(Spring Boot)๊ฐ€ S3์— ์—…๋กœ๋“œํ•œ ํ›„, ํŒŒ์ผ ๊ฒฝ๋กœ(๋˜๋Š” ํ‚ค)๋ฅผ DB์— ์ €์žฅํ•˜๊ณ 
์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

2. ์กฐํšŒ : ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ์ €์žฅ๋œ ID๋ฅผ ์ด์šฉํ•ด CloudFront์˜ ์„œ๋ช…๋œ URL์„ ๋ฐ›์•„์˜จ๋‹ค
 
 
๊ณ ๋ คํ•ด์•ผํ• ์ 
ํ•ซ๋งํฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ด์ง€๋งŒ, URL์„ ๊ณ„์† ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์— ์ถ”๊ฐ€์ ์ธ ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. 
๊ทธ๋ ‡๋‹ค๊ณ ํ•ด์„œ DB์— Signed URL์„ ์ €์žฅํ•œ ํ›„ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹๋„ ๊ฐฑ์‹  ์ฃผ๊ธฐ ๋งˆ๋‹ค ๊ฐฑ์‹ ์„ ํ•˜๋˜์ง€ ์ด๋Ÿฐ ๋งŒ๋ฃŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. 
 
 
 
๋ฐฉ์•ˆ2) CloudFront Signed Cookie ์‚ฌ์šฉ

ํด๋ผ์ด์–ธํŠธ ๋กœ๊ทธ์ธ ํ›„, Signed Cookie๋ฅผ ๋ฐ›์•„์„œ ๋ชจ๋“  ์ด๋ฏธ์ง€ ์š”์ฒญ์‹œ ์ž๋™์œผ๋กœ ์ธ์ฆํ•˜๋„๋ก ํ•œ๋‹ค 
CloudFront์—์„œ Signed Cookie๊ฐ€ ์—†์œผ๋ฉด ์ฐจ๋‹จํ•œ๋‹ค 
 
 
๊ณผ์ •
๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•˜๋ฉด CloudFront Signed Cookie๋ฅผ ๋งŒ๋“ค์–ด์„œ, CloudFront ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์ ‘๊ทผ์‹œ ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค 
 
์žฅ์ 
์ถ”๊ฐ€์ ์ธ ์š”์ฒญ์ด ํ•„์š”์—†๋‹ค 
 
 
๊ณต์‹๋ฌธ์„œ : Signed URLs vs Signed Cookies
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html

Decide to use signed URLs or signed cookies - Amazon CloudFront

Decide to use signed URLs or signed cookies CloudFront signed URLs and signed cookies provide the same basic functionality: they allow you to control who can access your content. If you want to serve private content through CloudFront and you're trying to

docs.aws.amazon.com

 


CloudFront Signed Cookie ์ ์šฉ ๊ณผ์ •

1) AWS SDK for JAVA  v2๋กœ ๋ณ€๊ฒฝ 

AmazonS3Client > S3Client
AWS SDK v2๋Š” ์„œ๋ช…๋œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…์‹œ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ
(CloudFront Signed Cookie ์„ค์ • ๊ณผ์ • ์ฐธ๊ณ )

 
1. S3
Maven ์ €์žฅ์†Œ
https://mvnrepository.com/artifact/software.amazon.awssdk/s3
 
๊ณต์‹ ๋ฌธ์„œ (์˜ˆ์ œ)
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_s3_code_examples.html

Amazon S3 examples using SDK for Java 2.x - AWS SDK for Java 2.x

Amazon S3 examples using SDK for Java 2.x The following code examples show you how to perform actions and implement common scenarios by using the AWS SDK for Java 2.x with Amazon S3. Basics are code examples that show you how to perform the essential opera

docs.aws.amazon.com

 
 
2. CloudFront
Maven ์ €์žฅ์†Œ
https://mvnrepository.com/artifact/software.amazon.awssdk/cloudfront
 
๊ณต์‹๋ฌธ์„œ (์˜ˆ์ œ - ์—ฐ๊ฒฐ)
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_cloudfront_code_examples.html

CloudFront examples using SDK for Java 2.x - AWS SDK for Java 2.x

CloudFront examples using SDK for Java 2.x The following code examples show you how to perform actions and implement common scenarios by using the AWS SDK for Java 2.x with CloudFront. Actions are code excerpts from larger programs and must be run in conte

docs.aws.amazon.com

 

2) CloudFront ๋™์ž‘ ์ˆ˜์ •

 
์ƒ์„ฑ๋œ ํ‚ค ํŽ˜์–ด๋Š” Public Key์™€ Private Key๋กœ ์ œ๊ณต๋œ๋‹ค.
Private Key๋Š” ์„œ๋ฒ„์—์„œ ๋ณด๊ด€ํ•˜๋ฉฐ, Public Key๋Š” CloudFront์— ์—…๋กœ๋“œํ•˜์—ฌ ์„œ๋ช…์„ ๊ฒ€์ฆํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 
 
 
๊ณต์‹๋ฌธ์„œ :์„œ๋ช…๋œ URL๊ณผ ์„œ๋ช…๋œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ช…์ž๋ฅผ ์ง€์ •ํ•˜์„ธ์š”.
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html#private-content-creating-cloudfront-key-pairs

Specify signers that can create signed URLs and signed cookies - Amazon CloudFront

Save the private key for your CloudFront key pair in a secure location, and set permissions on the file so that only the desired administrators can read it. If someone gets your private key, they can generate valid signed URLs and signed cookies and downlo

docs.aws.amazon.com

 
 
1. ํผ๋ธ”๋ฆญ ํ‚ค/๊ฐœ์ธํ‚ค ์ƒ์„ฑํ•˜๊ธฐ

ํ‚ค ์Œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

1) openssl ํ™œ์šฉํ•˜์—ฌ ๊ฐœ์ธํ‚ค + ํผ๋ธ”๋ฆญํ‚ค ์ƒ์„ฑ

# ๊ฐœ์ธ ํ‚ค ์ƒ์„ฑ (private.pem)
openssl genrsa -out private_key.pem 2048

# ํผ๋ธ”๋ฆญ ํ‚ค ์ƒ์„ฑ (public.pem)
openssl rsa -pubout -in private_key.pem -out public_key.pem
๋”๋ณด๊ธฐ

์œˆ๋„์šฐ OpenSSL ์„ค์น˜ํ•˜๊ธฐ 

https://chris1108.tistory.com/36

 
 
๊ฐœ์ธํ‚ค๋Š” ๋ณด๊ด€ํ•˜๊ณ  ํผ๋ธ”๋ฆญํ‚ค๋ฅผ ์ด์ œ CloudFront์— ์—…๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค 
 
2. CloudFront์— ํผ๋ธ”๋ฆญ ํ‚ค ์—…๋กœ๋“œ 
CloudFront > ํผ๋ธ”๋ฆญ ํ‚ค > ์ƒ์„ฑ
 

 
3. ํ‚ค ๊ทธ๋ฃน์— ํผ๋ธ”๋ฆญ ํ‚ค ์ถ”๊ฐ€ํ•˜๊ธฐ 
์ด ํ‚ค ๊ทธ๋ฃน์€ CloudFront์—์„œ ์„œ๋ช…๋œ URL์ด๋‚˜ ์ฟ ํ‚ค์˜ ์„œ๋ช…์„ ๊ฒ€์ฆํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 

 
4. ๋ฐฐํฌ > ๋™์ž‘ํŽธ์ง‘ : ๋ทฐ์–ด ์•ก์„ธ์Šค ์ œํ•œ ํ’€๊ณ  ํ‚ค ๊ทธ๋ฃน ์ถ”๊ฐ€ํ•˜๊ธฐ 

 

3) CloudFront Signed Cookie ์ƒ์„ฑ (CloudFrontService ์ฝ”๋“œ ์ž‘์„ฑ)

๊ณต์‹๋ฌธ์„œ (์˜ˆ์ œ - Set Signed Cookies Using a Custom Policy)
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html

Set signed cookies using a custom policy - Amazon CloudFront

IP addresses in IPv6 format, such as 2001:0db8:85a3::8a2e:0370:7334, are not supported.

docs.aws.amazon.com

 
- CloudFront-Signature, CloudFront-Policy, CloudFront-Key-Pair-Id 3๊ฐ€์ง€ ์ฟ ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค

CloudFront-Signature, CloudFront-Policy, CloudFront-Key-Pair-Id 3๊ฐ€์ง€ ์ฟ ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค

 
- Secure : Set-Cookie ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— ๋ทฐ์–ด๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์•”ํ˜ธํ™”ํ•ด์•ผ ํ•œ๋‹ค. ์ฟ ํ‚ค ์†์„ฑ์ด ์ค‘๊ฐ„์ž ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋˜๋„๋ก HTTPS ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ํ—ค๋”๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 
- HttpOnly : HTTP ๋˜๋Š” HTTPS ์š”์ฒญ์œผ๋กœ๋งŒ ์ฟ ํ‚ค ๋ณด๋‚ด๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. 
 
 
3-1) CloudFront-Signature, CloudFront-Policy, CloudFront-Key-Pair-Id 3๊ฐ€์ง€ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž 

(1) CloudFront-Policy ์ƒ์„ฑ
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html#private-content-custom-policy-signature-cookies

Set signed cookies using a custom policy - Amazon CloudFront

IP addresses in IPv6 format, such as 2001:0db8:85a3::8a2e:0370:7334, are not supported.

docs.aws.amazon.com

 
 
(2) CloudFront-Signature ์ƒ์„ฑ
 
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html#private-content-custom-policy-signature-cookies

Set signed cookies using a custom policy - Amazon CloudFront

IP addresses in IPv6 format, such as 2001:0db8:85a3::8a2e:0370:7334, are not supported.

docs.aws.amazon.com

 
(3) CloudFront-Key-Pair-Id ์ƒ์„ฑ
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html

Specify signers that can create signed URLs and signed cookies - Amazon CloudFront

Save the private key for your CloudFront key pair in a secure location, and set permissions on the file so that only the desired administrators can read it. If someone gets your private key, they can generate valid signed URLs and signed cookies and downlo

docs.aws.amazon.com

 
2๋ฒˆ CloudFront ์„ค์ •์—์„œ
publickey๋ฅผ ์˜ฌ๋ ค์„œ key pair๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๊ทธ ID์ด๋‹ค
์•ŒํŒŒ๋ฒณ๋Œ€๋ฌธ์ž์—ฌ๋Ÿฌ๊ฐœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค 


Spring Boot ์ฝ”๋“œ ์ˆ˜์ • 

1. ๋กœ๊ทธ์ธ ํ›„ ๋งˆ์ง€๋ง‰์— Signed Cookie๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‘๋‹ต์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค 

 
2. CloudFrontService๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค 
 
- CloudFront์—์„œ ๋ทฐ์–ด ์•ก์„ธ์Šค ์ œํ•œ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜์˜€๋‹ค 

  • CloudFront-Policy: ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ์„œ๋ช…๋œ ์ •์ฑ….
  • CloudFront-Signature: ์„œ๋ช…๋œ ์ •์ฑ…์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ช… ๊ฐ’.
  • CloudFront-Key-Pair-Id: ์„œ๋ช…๋œ ์ •์ฑ…์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ํ‚ค ํŽ˜์–ด ID

 
3. Docker-Compose.yml ์ˆ˜์ • 
 
๋„์ปค ์™ธ๋ถ€์—์„œ PRIVATE_KEY_PATH์— ์žˆ๋Š” 
docker - compose์—์„œ volumes๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜ธ์ŠคํŠธ ๊ฐ„์— ๋งˆ์šดํŠธํ•˜๊ณ ,
environment๋กœ PRIVATE_KEY_PATH๋ฅผ ์„ค์ •ํ•ด ๋‘์—ˆ๋‹ค 
ํ•ด๋‹น ์œ„์น˜์— private_key.pem ์„ ๋‘์—ˆ๋‹ค 

volumes:
      - ./๋””๋ ‰ํ† ๋ฆฌ:/app
environment:
      - PRIVATE_KEY_PATH=/app/private_key.pem  # PEM ํŒŒ์ผ์˜ ์œ„์น˜
๋”๋ณด๊ธฐ

์ œ๋Œ€๋กœ ๋งˆ์šดํŠธ๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž 

 
 


ํ™•์ธํ•ด๋ณด๊ธฐ

์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ : ์ ‘๊ทผ ์•ˆ๋จ

 
 
์€ผ์—์„œ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ : ์ ‘๊ทผ๋จ
์ ‘๊ทผ ๋˜๋Š” ์ค„ ์•Œ์•˜๋‹ค ... ๊ทธ๋Ÿฐ๋ฐ ์•ˆ๋œ๋‹ค (์บ์‹œ ๋ฌดํšจํ™” ํ•œ๋‹ค์Œ์— ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด์ž)

 
 

3ํŽธ์—์„œ ๊ณ„์†...

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ