๊ด€๋ฆฌ ๋ฉ”๋‰ด

Hey Tech

ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (9) AWS S3 ๊ธฐ๋ฐ˜ ์›น ํ˜ธ์ŠคํŒ… ๋ณธ๋ฌธ

SW ๊ฐœ๋ฐœ/Amazon Web Service

ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (9) AWS S3 ๊ธฐ๋ฐ˜ ์›น ํ˜ธ์ŠคํŒ…

Tony Park (ํ† ๋‹ˆ) 2022. 6. 10. 14:37
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ์‹œ๋ฆฌ์ฆˆ ํฌ์ŠคํŒ…

1.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (1) React ๊ธฐ๋ฐ˜ Frontend ๊ฐœ๋ฐœ
2.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (2) AWS IAM ์—ญํ•  ์ƒ์„ฑ
3.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (3) AWS Lambda ์ƒ์„ฑ
4.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (4) AWS S3 ์ƒ์„ฑ
5.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (5) AWS API Gateway ์ƒ์„ฑ
6.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (6) AWS Lambda ํ•จ์ˆ˜ ์ž‘์„ฑ
7.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (7) Axios ๊ธฐ๋ฐ˜ API Call
8.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (8) ํŒŒ์ผ ์—…๋กœ๋“œ ํ…Œ์ŠคํŠธ
9.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (9) AWS S3 ๊ธฐ๋ฐ˜ ์›น ํ˜ธ์ŠคํŒ…

๐Ÿ‘จ‍๐Ÿ’ป ๋“ค์–ด๊ฐ€๋ฉฐ

๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” AWS S3๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์  ์›น ํ˜ธ์ŠคํŒ… ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํ”„๋ก ํŠธ์—”๋“œ๋Š” localhost์—์„œ ๊ตฌ๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋กœ์ปฌ PC๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์—์„œ URL์„ ํƒ€๊ณ  ์ ‘๊ทผํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์„ ๋งˆ์น˜์‹œ๋ฉด ์–ธ์ œ, ์–ด๋””์„œ๋“  ๋ฒ„ํ‚ท ์›น ์‚ฌ์ดํŠธ ์—”๋“œํฌ์ธํŠธ(i.e., URL)๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜์—ฌ ์„œ๋ฒ„์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š ๋ชฉ์ฐจ

1.  S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ
2.  S3 ๋ฒ„ํ‚ท ์ •์ฑ… ํŽธ์ง‘
3.  S3 ์†์„ฑ ํŽธ์ง‘
4.  ๋ฐฐํฌ ํŒŒ์ผ ์ƒ์„ฑ
5.  ๋ฐฐํฌ ํŒŒ์ผ ์—…๋กœ๋“œ
6.  ์›น ๊ตฌ๋™ ํ…Œ์ŠคํŠธ

1.  S3 ๋ฒ„ํ‚ท ์ƒ์„ฑ

1) S3 ์ฝ˜์†” ์ ‘๊ทผ

  • S3 ๊ฒ€์ƒ‰ ํ›„ S3 ์ฝ˜์†” ์ ‘๊ทผ(๊ทธ๋ฆผ 1)

๊ทธ๋ฆผ 1. S3 ์ฝ˜์†” ์ ‘๊ทผ

2) ๋ฒ„ํ‚ท ์ƒ์„ฑ

  • "๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ" ํด๋ฆญ(๊ทธ๋ฆผ 2)

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

3) ๋ฒ„ํ‚ท ๋„ค์ด๋ฐ

  • ๋ฒ„ํ‚ท ์ด๋ฆ„ ์„ค์ •(๊ทธ๋ฆผ 3)

๊ทธ๋ฆผ 3. ๋ฒ„ํ‚ท ๋„ค์ด๋ฐ

4) ํผ๋ธ”๋ฆญ ์—‘์„ธ์Šค ์ฐจ๋‹จ ํ•ด์ œ

  • ํ…Œ์ŠคํŠธ ๋ชฉ์ ์ด๋ฏ€๋กœ '๋ชจ๋“  ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์ฐจ๋‹จ' ์ฒดํฌ ํ•ด์ œ(๊ทธ๋ฆผ 4)

๊ทธ๋ฆผ 4. ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค ์ฐจ๋‹จ ์„ค์ •

5) ๋ฒ„ํ‚ท ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์•”ํ˜ธํ™”

  • ๋ฒ„ํ‚ท ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์„œ๋ฒ„ ์ธก ์•”ํ˜ธํ™” ๋ชจ๋‘ 'ํ™œ์„ฑํ™”' ์„ ํƒ(๊ทธ๋ฆผ 5)
  • ์šฐ์ธก ํ•˜๋‹จ '๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ' ๋ฒ„ํŠผ ํด๋ฆญ

๊ทธ๋ฆผ 5. ๋ฒ„ํ‚ท ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์„œ๋ฒ„ ์ธก ์•”ํ˜ธํ™” ํ™œ์„ฑํ™”

2.  S3 ๋ฒ„ํ‚ท ์ •์ฑ… ํŽธ์ง‘

1) ๋ฒ„ํ‚ท ์ ‘๊ทผ

  • ๋ฐฉ๊ธˆ ์ƒ์„ฑํ•œ ๋ฒ„ํ‚ท ์ ‘๊ทผ(๊ทธ๋ฆผ 6)

๊ทธ๋ฆผ 6 ๋ฒ„ํ‚ท ์ ‘๊ทผ

2) ๊ถŒํ•œ ํŽธ์ง‘ ์ฝ˜์†” ์ ‘๊ทผ

  • ๋ฒ„ํ‚ท ๋‚ด ๋ฉ”๋‰ด๋ฐ”์—์„œ ๊ถŒํ•œ ํด๋ฆญ(๊ทธ๋ฆผ 7)

๊ทธ๋ฆผ 7. ๊ถŒํ•œ ํŽธ์ง‘ ์ฝ˜์†” ์ ‘๊ทผ

3) ๋ฒ„ํ‚ท ์ •์ฑ… ํŽธ์ง‘

  • ๋ฒ„ํ‚ท ์ •์ฑ… 'ํŽธ์ง‘' ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 8)

๊ทธ๋ฆผ 8. ๋ฒ„ํ‚ท ์ •์ฑ… ํŽธ์ง‘

4) ๋ฒ„ํ‚ท ์ •์ฑ… ์ž…๋ ฅ

  • ์•„๋ž˜์˜ ๋ฒ„ํ‚ท ์ •์ฑ… ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ
  • Resource์—๋Š” ๋ณธ์ธ S3 ๋ฒ„ํ‚ท ์ด๋ฆ„ ์ž…๋ ฅ(๊ทธ๋ฆผ 9)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::๋ฒ„ํ‚ท์ด๋ฆ„/*"
        }
    ]
}

๊ทธ๋ฆผ 9. ๋ฒ„ํ‚ท ์ •์ฑ… ์ž…๋ ฅ

3.  S3 ์†์„ฑ ํŽธ์ง‘

1) ์†์„ฑ ํŽธ์ง‘ ์ฝ˜์†” ์ ‘๊ทผ

  • ๋ฒ„ํ‚ท ๋ฉ”๋‰ด๋ฐ” ๋‚ด ์†์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 10)

๊ทธ๋ฆผ 10. ์†์„ฑ ํŽธ์ง‘ ์ฝ˜์†” ์ ‘๊ทผ

2) ์ •์  ์›น ํ˜ธ์ŠคํŒ… ํŽธ์ง‘ ์ฝ˜์†” ์ ‘๊ทผ

  • ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ํŽธ์ง‘ ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 11)

๊ทธ๋ฆผ 11. ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ํŽธ์ง‘ ์ฝ˜์†” ์ ‘๊ทผ

3) ์ •์  ์›น ํ˜ธ์ŠคํŒ… ํŽธ์ง‘

  • ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ํ™œ์„ฑํ™” ์ฒดํฌ(๊ทธ๋ฆผ 12)
  • ํ˜ธ์ŠคํŒ… ์œ ํ˜•: ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…
  • ์ธ๋ฑ์Šค ๋ฌธ์„œ: index.html
  • ์˜ค๋ฅ˜ ๋ฌธ์„œ: index.html(์ƒ๋™)

๊ทธ๋ฆผ 12. ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ํŽธ์ง‘

4.  ๋ฐฐํฌ ํŒŒ์ผ ์ƒ์„ฑ

ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„์™€์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 13).

npm run build

๊ทธ๋ฆผ 13. ๋ฐฐํฌ ํŒŒ์ผ ์ƒ์„ฑ

5.  ๋ฐฐํฌ ํŒŒ์ผ ์—…๋กœ๋“œ

1) S3 ๊ฐ์ฒด ์ฝ˜์†” ์ ‘๊ทผ

  • ํ”„๋ก ํŠธ์—”๋“œ ๋‹ด๋‹น S3 ๋ฒ„ํ‚ท ์ ‘๊ทผ
  • ๋ฉ”๋‰ด๋ฐ” - ๊ฐ์ฒด ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 14)

๊ทธ๋ฆผ 14. ๋ฐฐํฌ ํŒŒ์ผ S3 ์—…๋กœ๋“œ ์ฝ˜์†” ์ ‘๊ทผ

2) ํŒŒ์ผ ์—…๋กœ๋“œ

  • "ํŒŒ์ผ ์ถ”๊ฐ€" ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 15)

๊ทธ๋ฆผ 15. ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฒ„ํŠผ ํด๋ฆญ

  • ๋นŒ๋“œํ•œ ํŒŒ์ผ ์„ ํƒ(๊ทธ๋ฆผ 16)

๊ทธ๋ฆผ 16. ๋นŒ๋“œ ํŒŒ์ผ ์—…๋กœ๋“œ

  • "ํด๋” ์ถ”๊ฐ€" ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 17)

๊ทธ๋ฆผ 17. ํด๋” ์ถ”๊ฐ€ ๋ฒ„ํŠผ ํด๋ฆญ

  • static ํŒŒ์ผ ์ถ”๊ฐ€(๊ทธ๋ฆผ 18)

๊ทธ๋ฆผ 18. static ํด๋” ์ถ”๊ฐ€

  • ์šฐ์ธก ๋งจ ํ•˜๋‹จ์— "์—…๋กœ๋“œ" ๋ฒ„ํŠผ ํด๋ฆญ(๊ทธ๋ฆผ 19)

๊ทธ๋ฆผ 19. ํŒŒ์ผ ์—…๋กœ๋“œ

6.  ์›น ๊ตฌ๋™ ํ…Œ์ŠคํŠธ

  • ์†์„ฑ ํƒญ ํด๋ฆญ(๊ทธ๋ฆผ 20)

๊ทธ๋ฆผ 20. ์†์„ฑ ํƒญ ์ ‘๊ทผ

  • ํ•˜๋‹จ์— ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ํƒญ ๋‚ด ์—”๋“œํฌ์ธํŠธ ๋งํฌ ํด๋ฆญ(๊ทธ๋ฆผ 21)

๊ทธ๋ฆผ 21.์›น ์‚ฌ์ดํŠธ ์—”๋“œํฌ์ธํŠธ

  • ์›น ํŽ˜์ด์ง€ ํ™•์ธ(๊ทธ๋ฆผ 22)

๊ทธ๋ฆผ 22. ์›น ํŽ˜์ด์ง€ ํ™•์ธ

  • ํŒŒ์ผ ์—…๋กœ๋“œ ํ›„ ์ฝ˜์†”์ฐฝ ํ™•์ธ(๊ทธ๋ฆผ 23)
  • ์—๋Ÿฌ ์—†์ด ์—…๋กœ๋“œ ๋กœ์ง์˜ ์ˆ˜ํ–‰ ์—ฌ๋ถ€ ํ™•์ธ

๊ทธ๋ฆผ 23. ์›น ์ฝ˜์†” ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์—…๋กœ๋“œ ํ…Œ์ŠคํŠธ ํ™•์ธ

  • ํŒŒ์ผ ์ €์žฅ์šฉ S3 ๋‚ด ํŒŒ์ผ ์—…๋กœ๋“œ ํ™•์ธ(๊ทธ๋ฆผ 24)

๊ทธ๋ฆผ 24. S3 ๋‚ด ํŒŒ์ผ ์ •์ƒ ์—…๋กœ๋“œ ํ™•์ธ

์ด๊ฒƒ์œผ๋กœ S3๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ŠคํŒ… ํ•˜๊ณ , S3, Lambda, API Gateway๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ์‹œ์Šคํ…œ ๊ตฌํ˜„๊นŒ์ง€ ์™„์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์‹œ๋ฆฌ์ฆˆ ํฌ์ŠคํŒ…

1.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (1) React ๊ธฐ๋ฐ˜ Frontend ๊ฐœ๋ฐœ
2.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (2) AWS IAM ์—ญํ•  ์ƒ์„ฑ
3.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (3) AWS Lambda ์ƒ์„ฑ
4.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (4) AWS S3 ์ƒ์„ฑ
5.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (5) AWS API Gateway ์ƒ์„ฑ
6.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (6) AWS Lambda ํ•จ์ˆ˜ ์ž‘์„ฑ
7.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (7) Axios ๊ธฐ๋ฐ˜ API Call
8.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (8) ํŒŒ์ผ ์—…๋กœ๋“œ ํ…Œ์ŠคํŠธ
9.  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (9) AWS S3 ๊ธฐ๋ฐ˜ ์›น ํ˜ธ์ŠคํŒ…

ํฌ์ŠคํŒ… ๋‚ด์šฉ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜์— ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์˜ค๋Š˜๋„ ์ฆ๊ฒ๊ณ  ๊ฑด๊ฐ•ํ•œ ํ•˜๋ฃจ ๋ณด๋‚ด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค๐Ÿ˜Š

๊ณ ๋ง™์Šต๋‹ˆ๋‹ค :)

728x90
๋ฐ˜์‘ํ˜•