Post

[Cloud] S3์˜ ์ดํ•ด

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” AWS์˜ S3(Simple Storage Service)๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. EC2์™€ ๋”๋ถˆ์–ด ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ธฐ๋ณธ์ด ๋˜๋Š” ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€๋กœ, ๊ฐœ๋…ยท์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์ŠคยทํŠน์ง•์„ ์‚ดํŽด๋ณธ ๋’ค ๋ฒ„ํ‚ท ์ด๋ฏธ์ง€๋ฅผ ์›น ์„œ๋ฒ„์—์„œ ์„œ๋น„์Šคํ•˜๋Š” Lab์„ ์ง„ํ–‰ํ•œ๋‹ค.

S3๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด(Object) ๋‹จ์œ„๋กœ, ๋ฒ„ํ‚ท(Bucket)์ด๋ผ๋Š” ์ €์žฅ์†Œ์— ๋‹ด๋Š” ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค. ์ž…์ถœ๋ ฅ์€ HTTP/REST API๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, 99.999999999%(11 9s)์˜ ๋‚ด๊ตฌ์„ฑ์œผ๋กœ ์„ค๊ณ„๋˜์–ด ๋ฐ์ดํ„ฐ ์†์‹ค์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.

S3 ํŠน์ง•


1. S3 ํ•ต์‹ฌ ํŠน์ง•

ํŠน์ง•์„ค๋ช…
๋†’์€ ๋‚ด๊ตฌ์„ฑ11 9s ์„ค๊ณ„. ํ•œ ๋ฆฌ์ „ ๋‚ด 3๊ฐœ ์ด์ƒ AZ์— ๋ณต์ œ ์ €์žฅ
์‚ฌ์‹ค์ƒ ๋ฌด์ œํ•œ์šฉ๋Ÿ‰ ์ œํ•œ ์—†์Œ(๋‹จ์ผ ๊ฐ์ฒด ์ตœ๋Œ€ 5TB)
๋น„์šฉ ์ตœ์ ํ™”์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋กœ ์ ‘๊ทผ ๋นˆ๋„์— ๋งž์ถฐ ๋น„์šฉ ์ ˆ๊ฐ
์„ธ๋ฐ€ํ•œ ์ ‘๊ทผ ์ œ์–ด์ •์ฑ…ยทACL๋กœ ๊ฐ์ฒด๋ณ„ ์ ‘๊ทผ ์ œ์–ด
OS ๋ถˆํ•„์š”๊ฐ์ฒด๋ณ„ ์ ‘๊ทผ์ด๋ผ ์„œ๋ฒ„ OS ์—†์ด ์ €์žฅยท๊ฒ€์ƒ‰

๋ฆฌ์ „ ๋‚ด ๋ณต์ œ ์ €์žฅ

๐Ÿ’ก ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ โ€” ํฐ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ  ๋ณ‘๋ ฌ ์—…๋กœ๋“œํ•˜๊ณ  ์™„๋ฃŒ ํ›„ ๋ณ‘ํ•ฉํ•œ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ(๋น„๋””์˜คยท๋ฐฑ์—…)์„ ์•ˆ์ •์ ์ด๊ณ  ๋น ๋ฅด๊ฒŒ ์˜ฌ๋ฆด ๋•Œ ์œ ์šฉํ•˜๋‹ค.


2. S3 ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค

์ ‘๊ทผ ๋นˆ๋„์™€ ๋น„์šฉ์— ๋”ฐ๋ผ ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•œ๋‹ค. ์ž์ฃผ ์“ฐ๋ฉด Standard, ๊ฑฐ์˜ ์•ˆ ์“ฐ๋ฉด Glacier ๊ณ„์—ด์ด๋‹ค.

ํด๋ž˜์Šค์šฉ๋„ํŠน์ง•
Standard์ž์ฃผ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋†’์€ ๋‚ด๊ตฌ์„ฑยท๊ฐ€์šฉ์„ฑ
Intelligent-Tiering์ ‘๊ทผ ํŒจํ„ด ๋ถˆํ™•์‹ค์ž๋™์œผ๋กœ ๊ณ„์ธต ์ด๋™ํ•ด ๋น„์šฉ ์ตœ์ ํ™”
Standard-IA๋“œ๋ฌผ๊ฒŒ ์ ‘๊ทผ(๋น ๋ฅธ ์กฐํšŒ ํ•„์š”)๋‚ฎ์€ ๋น„์šฉ
One Zone-IA๋‹จ์ผ AZ ์ €์žฅ๋” ์ €๋ ด, ๊ฐ€์šฉ์„ฑ ๋‚ฎ์Œ
Glacier์žฅ๊ธฐ ์•„์นด์ด๋น™์กฐํšŒ์— ์ˆ˜ ๋ถ„~์ˆ˜ ์‹œ๊ฐ„
Glacier Deep Archive์ดˆ์žฅ๊ธฐ ๋ณด๊ด€๊ฐ€์žฅ ์ €๋ ด, ๋ณต๊ตฌ ์ˆ˜ ์‹œ๊ฐ„

๋ฒ„ํ‚ท URL


3. Lab โ€” ๋ฒ„ํ‚ท ์ด๋ฏธ์ง€๋ฅผ ์›น ์„œ๋ฒ„๋กœ ์„œ๋น„์Šค

๋ฒ„ํ‚ท์— ์ €์žฅํ•œ ์ด๋ฏธ์ง€๋ฅผ EC2 ์›น ์„œ๋ฒ„๊ฐ€ ๋ถˆ๋Ÿฌ์™€ ๋ณด์—ฌ์ฃผ๋Š” ๊ตฌ์„ฑ์„ ๋งŒ๋“ ๋‹ค.

flowchart LR
    User(("๐ŸŒ ์‚ฌ์šฉ์ž"))
    EC2["๐Ÿ’ป EC2 (Apache)"]
    S3[("๐Ÿ—„๏ธ S3 ๋ฒ„ํ‚ท<br/>(ํผ๋ธ”๋ฆญ ์ด๋ฏธ์ง€)")]
    User -- HTTP --> EC2
    EC2 -- "img src=S3 URL" --> S3

Task 1 โ€” ๋ฒ„ํ‚ท ์ƒ์„ฑ & ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ

  • ๋ฒ„ํ‚ท ์ด๋ฆ„: web-sample-images-seongmi
  • ๊ฐ์ฒด ์†Œ์œ ๊ถŒ: ACL ๋น„ํ™œ์„ฑํ™”, ๋ชจ๋“  ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์ฐจ๋‹จ(์ผ๋‹จ)
  • image.png ์—…๋กœ๋“œ ํ›„ URL ๋ณต์‚ฌ

์ด๋ฏธ์ง€ ์—…๋กœ๋“œ

Task 2 โ€” ์›น ์„œ๋ฒ„(EC2) ๊ตฌ์„ฑ

๋ณด์•ˆ ๊ทธ๋ฃน WEB-SG(์ธ๋ฐ”์šด๋“œ 80ยท22)๋กœ EC2๋ฅผ ๋งŒ๋“ค๊ณ , ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋กœ Apache๋ฅผ ์„ค์น˜ํ•˜๋ฉฐ S3 ์ด๋ฏธ์ง€๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
dnf update -y
dnf install httpd -y
systemctl enable --now httpd

cat <<EOL > /var/www/html/index.html
<!DOCTYPE html>
<html lang="ko">
<head><meta charset="UTF-8"><title>์„ฑ๋ฏธ์˜ ์›นํŽ˜์ด์ง€</title></head>
<body>
    <h1>์„ฑ๋ฏธ์˜ ์›นํŽ˜์ด์ง€</h1>
    <p>์„ฑ๋ฏธ์˜ ์›นํŽ˜์ด์ง€์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.</p>
    <hr>
    <img src="https://web-sample-images-lee.s3.ap-northeast-2.amazonaws.com/pet.jpg"
         style="max-width: 100%; height: auto;">
</body>
</html>
EOL

systemctl restart httpd

Task 3 โ€” ๋ฒ„ํ‚ท์„ ํผ๋ธ”๋ฆญ์œผ๋กœ ๊ณต๊ฐœ

๊ธฐ๋ณธ์ ์œผ๋กœ S3๋Š” ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•œ๋‹ค. ์›น ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•ด ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์ฐจ๋‹จ์„ ํ•ด์ œํ•˜๊ณ  ๋ฒ„ํ‚ท ์ •์ฑ…์œผ๋กœ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "<๋ฒ„ํ‚ทARN>/*"
        }
    ]
}

โš ๏ธ ๋ฒ„ํ‚ท ์ •์ฑ… vs ACL โ€” ์—ฌ๊ธฐ์„œ๋Š” ACL์„ ๋„๊ณ  ๋ฒ„ํ‚ท ์ •์ฑ…(JSON)์œผ๋กœ ๊ณต๊ฐœ๋ฅผ ์ œ์–ดํ•œ๋‹ค. Principal: "*" + s3:GetObject๋Š” โ€œ๋ˆ„๊ตฌ๋‚˜ ๊ฐ์ฒด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Œโ€์„ ์˜๋ฏธํ•œ๋‹ค. ๊ณต๊ฐœ๊ฐ€ ๋ชฉ์ ์ผ ๋•Œ๋งŒ ์“ฐ๊ณ , ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ์—” ์ ˆ๋Œ€ ์ ์šฉํ•˜์ง€ ๋ง์ž.

Task 4 โ€” ์›นํŽ˜์ด์ง€ ํ™•์ธ

EC2 ํผ๋ธ”๋ฆญ IP๋กœ ์ ‘์†ํ•˜๋ฉด, S3์— ์ €์žฅ๋œ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋œ ํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ ํ‘œ์‹œ๋œ๋‹ค.

์›นํŽ˜์ด์ง€ ํ™•์ธ


4. S3 ์‚ฌ์šฉ ์‚ฌ๋ก€

์‚ฌ๋ก€์„ค๋ช…
๋ฐฑ์—…/๋ณต๊ตฌ๋†’์€ ๋‚ด๊ตฌ์„ฑ์œผ๋กœ ๋ฐฑ์—… ๋ฐ์ดํ„ฐ ๋ณด๊ด€
๋ฐ์ดํ„ฐ ๋ถ„์„Athena ์—ฐ๊ณ„๋กœ S3์— ์ง์ ‘ ์ฟผ๋ฆฌ
์ •์  ์›น ํ˜ธ์ŠคํŒ…HTMLยท์ด๋ฏธ์ง€ยท๋น„๋””์˜ค ํ˜ธ์ŠคํŒ…
๋กœ๊ทธ ์ €์žฅ/๋ถ„์„AWS ์„œ๋น„์Šคยท์•ฑ ๋กœ๊ทธ ์ˆ˜์ง‘

๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
S3
โ”œโ”€ ๊ฐœ๋…   ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€(๋ฒ„ํ‚ท/๊ฐ์ฒด, HTTPยทREST)
โ”œโ”€ ๋‚ด๊ตฌ์„ฑ 11 9s, ๋ฆฌ์ „ ๋‚ด 3+ AZ ๋ณต์ œ
โ”œโ”€ ํด๋ž˜์Šค Standard ~ Glacier(๋นˆ๋„ยท๋น„์šฉ๋ณ„)
โ””โ”€ ๊ณต๊ฐœ   ํผ๋ธ”๋ฆญ ์ฐจ๋‹จ ํ•ด์ œ + ๋ฒ„ํ‚ท ์ •์ฑ…(JSON)
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
S3๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€
์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค์ ‘๊ทผ ๋นˆ๋„๋ณ„ ๋น„์šฉ ๊ณ„์ธต
๋ฒ„ํ‚ท ์ •์ฑ…JSON์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด

S3์˜ ํ•ต์‹ฌ์€ ๋ฌด์ œํ•œ์— ๊ฐ€๊นŒ์šด ๊ฐ์ฒด ์ €์žฅ + 11 9s ๋‚ด๊ตฌ์„ฑ์ด๋ฉฐ, ๊ณต๊ฐœ ์—ฌ๋ถ€๋Š” ๋ฒ„ํ‚ท ์ •์ฑ…์œผ๋กœ ์ •๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•œ๋‹ค. Lab์ฒ˜๋Ÿผ ์ด๋ฏธ์ง€ยท์ •์  ํŒŒ์ผ ์ €์žฅ์†Œ๋กœ ๋‘๊ณ  ์›น ์„œ๋ฒ„๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ํŒจํ„ด์ด ๋Œ€ํ‘œ์ ์ด๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.