๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

AWS

AWS / ๊ธฐ์ดˆ

๋ฐฐํฌ

ํŠน์ • IP๋‚˜ ๋„๋ฉ”์ธ ๊ฐ™์€ ๊ณ ์œ ์˜ ์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌ๋ฐ›์•„ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ๋„ ๊ทธ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Œ

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ

 

 

AWS

Amazon Web Services, ์•„๋งˆ์กด์˜ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์„œ๋น„์Šค

 

S3

AWS์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ ์„œ๋น„์Šค

  • ํŒŒ์ผ ์ €์žฅ ๋ฐ ๋‹ค์šด๋กœ๋“œ : ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ, icloud์™€ ๊ฐ™์€ ์„œ๋น„์Šค์™€ ๋น„์Šทํ•จ
  • ์›น ํ˜ธ์ŠคํŒ… ๊ธฐ๋Šฅ : s3๋ฅผ ํ†ตํ•ด์„œ ์›นํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Œ
    ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ html, css, js ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋“ฑ์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— s3์„ ์ด์šฉ

 

๋ฒ„ํ‚ท

  • s3์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๋ฒ„ํ‚ท์— ์ €์žฅ๋จ
  • s3์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ ⇒ ๊ทธ์ค‘ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋ฅผ ๋ฒ„ํ‚ท์ด๋ผ๊ณ  ํ•จ
    * ๊ฐ์ฒด : s3์˜ ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ์˜๋ฏธ

 

 


 

์‹ค์Šต

S3์—์„œ ๋ฒ„ํ‚ท ์…‹ํŒ… ๋ฐ ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์‹ค์Šต์ด๋‹ค.

 

์‚ฌ์ „ ์ค€๋น„

ํšŒ์›๊ฐ€์ž… : https://www.lainyzine.com/ko/article/how-to-create-an-amazon-web-services-account/

์œ„ ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ 

 

์ด์ œ ๊ณต์‹ ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐ€๊ธฐ

https://ap-northeast-2.console.aws.amazon.com/s3/get-started?region=ap-northeast-2 

 

 

๋ฒ„ํ‚ท ์…‹ํŒ…

1. ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ ํด๋ฆญ

 

 

2. ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ

  • ๋ฒ„ํ‚ท ์ด๋ฆ„ : ๋‚˜์ค‘์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ผ๋‹จ ์ž„์˜๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—๋งŒ ๋งž๊ฒŒ๋” ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.
  • ๊ฐ์ฒด ์†Œ์œ ๊ถŒ : ๊ทธ๋ƒฅ ์ €๋Œ€๋กœ ๋‚ด๋ฒ„๋ ค๋‘๊ณ  ํŒจ์Šค
  • ๋ฒ„ํ‚ท์˜ ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์ฐจ๋‹จ ์„ค์ •
    : ์ต๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€
    => s3์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€
    => ์ฆ‰ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•จ => ํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด ์ฐจ๋‹จ์„ ํ•ด์ œํ•ด์•ผ ํ•จ! 

 

 

๊ทธ ์™ธ ์•„๋ž˜ ์„ค์ •๋“ค์€ ๊ธฐ๋ณธ ์„ค์ •๋Œ€๋กœ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ ํด๋ฆญ

 

 

3. ๋ฒ„ํ‚ท ์ •์ฑ… ์ถ”๊ฐ€

AWS์—์„œ๋Š” ์ •์ฑ…์—์„œ json ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•จ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ถŒํ•œ์ด ์—†๋Š” ์ƒํƒœ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์ˆ˜๋™์œผ๋กœ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•ด์ค˜์•ผ ํ•จ

 

* ์œ„์—์„œ์˜ ๋ฒ„ํ‚ท๊ณผ ์ด๋ฆ„์ด ๋‹ค๋ฅธ ์ด์œ ๋Š”... instagram-web์—์„œ ๊ทธ๋ƒฅ ์˜ค๋Š˜ ๋‚ ์งœ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟจ๋‹ค..

 

 

1) ๋ฒ„ํ‚ท ํด๋ฆญ -> ๊ถŒํ•œ ํƒญ ํด๋ฆญ -> ๋ฒ„ํ‚ท ์ •์ฑ… -> ํŽธ์ง‘ ํด๋ฆญ -> ์ƒˆ ๋ฌธ ์ถ”๊ฐ€ ํด๋ฆญ

 

 

2) ํ•„ํ„ฐ๋ง์—์„œ S3 ๊ฒ€์ƒ‰ ํ›„ ์ฒดํฌ -> GetObject ๊ฒ€์ƒ‰ ํ›„ ์ฒดํฌ

 

 

3) ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€

์ž‘์—… ์ถ”๊ฐ€ ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€ ํด๋ฆญ ํ›„ ๋ฆฌ์†Œ์Šค ์œ ํ˜•์„ object๋กœ ์„ ํƒํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ARN ๊ฐ’์ด ์ฒซ๋ฒˆ์งธ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

{BucketName}์„ ๋‚ด ๋ฒ„ํ‚ท ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๊ณ , {ObjectName}์€ ์ผ๋‹จ์€ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋‹ค ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ *๋กœ ๋Œ€์ฒด

๋‹ค ํ–ˆ์œผ๋ฉด ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€ ํด๋ฆญ

 

 

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •์ฑ…์— ์žˆ๋Š” ์ฝ”๋“œ์—์„œ "Principal"์—์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ "*"์œผ๋กœ ์ˆ˜์ •

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Principal": "*",
			"Effect": "Allow",
			"Action": [
				"s3:GetObject"
			],
			"Resource": [
				"arn:aws:s3:::250526-web/*"
			]
		}
	]
}

 

์ด์ œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ €์žฅ ํด๋ฆญ!

 

 

4. ์›น ํ˜ธ์ŠคํŒ… ์„ค์ •ํ•˜๊ธฐ

๊ฐ„๋‹จํ•˜๊ฒŒ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋Š” html ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

index.html

๋”๋ณด๊ธฐ
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>S3์— ์—…๋กœ๋“œํ•˜๊ธฐ</title>
  </head>
  <body>
    <h2>์•ˆ๋…•ํ•˜์„ธ์š”</h2>
    <p>ํ˜„์žฌ ์‹œ๊ฐ„ : <span id="time"></span></p>
    <script>
      // ํ˜„์žฌ ์‹œ๊ฐ„ ์ถœ๋ ฅ
      const nowTime = document.getElementById('time');
      const timer = function () {
        const now = new Date();
        // paddStart(๋ฌธ์ž์—ด ๊ธธ์ด, (๋น„์—ˆ์„ ๊ฒฝ์šฐ)์ฑ„์šธ ๋ฌธ์ž์—ด);
        const year = now.getFullYear();
        const month = now.getMonth() + 1;
        const date = now.getDate();
        const hour = String(now.getHours()).padStart(2, '0');
        const minute = String(now.getMinutes()).padStart(2, '0');
        const second = String(now.getSeconds()).padStart(2, '0');

        nowTime.textContent = `${year}๋…„ ${month}์›” ${date}์ผ ${hour} : ${minute} : ${second}`;
      };
      timer();
      setInterval(timer, 1000);
    </script>
  </body>
</html>

 

์ด์ œ ์ด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

 

1) ๋ฒ„ํ‚ท ์—…๋กœ๋“œ

 

์ด๋ฒˆ์—” ๊ฐ์ฒด ํƒญ์œผ๋กœ ๊ฐ€์„œ ์—…๋กœ๋“œ๋ฅผ ํด๋ฆญํ•œ๋‹ค

(๋…ธ๋ž€์ƒ‰ ์—…๋กœ๋“œ๋‚˜ ํŒŒ๋ž€์ƒ‰ ํ…Œ๋‘๋ฆฌ ์—…๋กœ๋“œ๋‚˜ ๋ณ„ ์ƒ๊ด€์—†๋‹ค..)

 

๊ทธ ๋‹ค์Œ ํŒŒ์ผ์„ ๋“œ๋ž˜๊ทธ ํ›„ ์•„๋ž˜์— ์žˆ๋Š” ์—…๋กœ๋“œ ๋ฒ„ํŠผ ํด๋ฆญ

์ž˜ ๋์œผ๋ฉด ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์ฃผ๊ณ  ๋‹ค์‹œ ๊ฐ์ฒด ํƒญ์œผ๋กœ ๊ฐ€๋ฉด ์ž˜ ์˜ฌ๋ผ์™€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค

 

 

 

2) ์›น ํ˜ธ์ŠคํŒ… (๋ฐฐํฌํ•˜๊ธฐ)

 

์ด์ œ ์†์„ฑํƒญ ๋“ค์–ด๊ฐ€์„œ ์Šคํฌ๋กค ์ญ‰ ~~๋‚ด๋ ค๋ณด๋ฉด ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…์ด ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํŽธ์ง‘ ํด๋ฆญํ•˜๋ฉด ์šฐ์ธก ์ด๋ฏธ์ง€๊ฐ™์ด ๋œจ๋Š”๋ฐ

์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ํ™œ์„ฑํ™”์— ์ฒดํฌ, ์ธ๋ฑ์Šค ๋ฌธ์„œ์— index.html์œผ๋กœ ์จ์ฃผ๋ฉด ์ด์ œ ๊ฑด๋“œ๋ฆด ๊ฑด ์—†๋‹ค.

 

 

์ด์ œ ์ €์žฅ ๋ˆ„๋ฅด๊ณ , ๋‹ค์‹œ ์†์„ฑ ํƒญ - ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…์„ ๋“ค์–ด๊ฐ€๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋“ค์–ด๊ฐ€๋ฉด index.html์ด ์ž˜ ๋ฐฐํฌ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค!