์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- touch event
- dependencies
- gh-pages
- multer-s3
- Web Storage
- Github Pages
- fly.io
- heroku
- AWS
- npm-check-updates
- bucket
- react18
- qoddi
- ๋ฐฐํฌ
- .eslintrc
- ๋ฐ์ํ
- naver api
- Next.js
- hooks
- package.json
- react
- aws-sdk
- ํด๋ฆฐ์ฝ๋
- GitHub
- dependabot
- s3
- createRoot
- node.js
- php
- CSS
- Today
- Total
Ann's log
[AWS] Heroku๋ก ๋ฐฐํฌํ Node.js ์๋ฒ์์ AWS S3 ์ฌ์ฉํ๊ธฐ-1 ๋ณธ๋ฌธ
๐ ๋ฌธ์
์ด์ ์ ๋ฐฐํฌํ๋ ํ๋ก์ ํธ์์ ์๋ก์ด ์ฌ์ง์ ์ ๋ก๋ํ๋ฉด ์ฌ์ง ํ์ผ์ด ๊นจ์ ธ์ ๋ณด์ธ๋ค๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์๋ค.
ํ๋ก์ ํธ์์ Node.js ์๋ฒ๋ฅผ ๋ฐฐํฌํ ๋ Heroku๋ฅผ ์ฌ์ฉํ์๊ธฐ ๋๋ฌธ์ Heroku ๋ฌธ์์์ ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์ ๋ณด์๋ค.
๋ฌธ์์ ๋ฐ๋ฅด๋ฉด Heroku application์ dyno๋ผ๊ณ ํ๋ ๊ฐ๋ฒผ์ด Linux container๋ก ๋์ํ๊ฒ ๋๋๋ฐ, dyno๋ ์๋ช ์ด ์งง์ ํ์ผ ์์คํ ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ dyno๊ฐ ๊ต์ฒด๋๊ฑฐ๋ ์ฌ์์๋๋ฉด ํ์ผ์ ์ฌ๋ผ์ง๊ฒ ๋๋ค. ๐จ
๐บ ํด๊ฒฐ ๋ฐฉ๋ฒ
Heroku ๋ฌธ์์์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก AWS S3๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋์์๊ธธ๋ Amazon S3์ ๋ํด ์์๋ณด๊ณ ์ฌ์ฉํ๊ณ ์ ํ๋ค.
์ด ๊ธ์์ ์ ๋ฆฌํ๋ ๋ด์ฉ:
- Amazon S3(Amazon Simple Storage Service)๋?
- S3 bucket ๋ง๋ค๊ธฐ
- Bucket ์ ์ฑ ์ค์ ํ๊ธฐ
- S3 bucket CORS setting
Amazon S3(Amazon Simple Storage Service)๋?
AWS ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด Amazon S3๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒํท(bucket) ๋ด์ ๊ฐ์ฒด๋ก ์ ์ฅํ๋ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ์๋น์ค๋ผ๊ณ ํ๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฒด๋ ํด๋น ํ์ผ์ ์ค๋ช ํ๋ ๋ชจ๋ ๋ฉํ๋ฐ์ดํฐ์ด๊ณ , ๋ฒํท์ ๊ฐ์ฒด์ ๋ํ ์ปจํ ์ด๋์ด๋ค.
๋ฐ๋ผ์ Amazon S3์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ๋จผ์ ๋ฒํท์ ์์ฑํด์ผ ํ๋ค.
๊ณ์ ์์ ์์ฑํ ์ ์๋ ๋ฒํท์ ์๋ ์ต๋ 100๊ฐ์ด์ง๋ง, ๋ฒํท์ ์ ์ฅํ ์ ์๋ ๊ฐ์ฒด ์์๋ ์ ํ์ด ์๋ค๊ณ ํ๋ค.
S3 bucket ๋ง๋ค๊ธฐ
๋ง๋๋ ๋ฐฉ๋ฒ์ ์ด ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๋ค.
1. AWS ์ฝ์์ IAM ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธ ํ๊ณ , s3๋ฅผ ๊ฒ์ํ์ฌ ๋ค์์ ํด๋ฆญํ๋ค.
2. create bucket ๋ฒํผ์ ํด๋ฆญํ๋ค.
3. bucket name๊ณผ ์ง์ญ ์ ๋ณด๋ฅผ ์ค์ ํ๋ค.
(Heroku ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์์ฑํ heroku application๊ณผ ๊ฐ์ ์ง์ญ์ผ๋ก S3 bucket ์ง์ญ์ ์ค์ ํด์ผ AWS ์๊ธ์ด ๋ ์ ๊ฒ ๋์จ๋ค๊ณ ํ๋ค.)
4. Block all public access ์ฒดํฌ๋ฐ์ค๋ ์ฒดํฌ๋ฅผ ํ์ง ์๋๋ค.
์ด๋ ๊ฒ ํด์ผ ์ธ๋ถ์์๋ ๋ด ํ์ผ์ ์ฝ์ ์ ์๊ณ , ์๋ก์ด ํ์ผ๋ ์ ๋ก๋ํ ์ ์๋ค๊ณ ํ๋ค.
๋ณด์ ์ทจ์ฝ์ฑ์ ์ข ๋์์ง๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํด์ผ ํ๋ค๊ณ ํ๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ณด์ํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ๋์ง ์กฐ๊ธ ๋ ๊ณต๋ถ๋ฅผ ํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
5. ๊ทธ ์๋์ ๊ฒฝ๊ณ ์ฒดํฌ๋ฐ์ค์๋ ์ฒดํฌ๋ฅผ ํด์ค๋ค.
6. ๋๋จธ์ง ์ค์ ์ ๋ชจ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋๊ณ , bucket ์์ฑํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ค.
Bucket ์ ์ฑ ์ค์ ํ๊ธฐ
์ธ๋ถ์์ bucket์ ์ ๊ทผํ ์ ์๊ฒ ํ๋ ค๋ฉด bucket ์ ์ฑ ์ค์ ๊น์ง ํด์ค์ผ ํ๋ค.
1. ์์ฑํ ๋ฒํท ์ด๋ฆ์ ํด๋ฆญํ๋ค.
2. Permissions ํญ์ ํด๋ฆญํ๋ค.
3. ํ๋จ์ผ๋ก ์คํฌ๋กค ํ๋ค๊ฐ bucket ์ ์ฑ ๋ถ๋ถ์์ ์์ ํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ค.
4. Bucket ์ ์ฑ ์ ์ค์ ํ๊ธฐ ์ํด policy generator๋ฅผ ํด๋ฆญํ๋ค.
Policy generator๋ฅผ ์ด์ฉํ๋ฉด ๋ด๊ฐ ์ํ๋ ์กฐ๊ฑด์ ์ ํํ๊ธฐ๋ง ํ๋ฉด ์๋์ผ๋ก JSON ํ์์ bucket ์ ์ฑ ์ ๋ง๋ค์ด์ค๋ค.
5. ๋ค์๊ณผ ๊ฐ์ด ์ ์ฑ ์ ์ค์ ํ๊ณ Add Statement ๋ฒํผ์ ํด๋ฆญํ๋ค.
Principal์๋ ๋ฒํท ์ ์ฑ ์ด ์ ์ฉ๋ ๋์์ ์ ์ฒด๋ก ์ค์ ํ๊ธฐ ์ํด *๋ฅผ ์ ๋ ฅํ๋ค.
Actions์์๋ GetObject์ PutObject ๋๊ฐ์ง๋ฅผ ์ ํํ๋ค.
ARN์๋ arn:aws:s3:::๋ด ๋ฒํท ์ด๋ฆ/*์ ํ์์ผ๋ก ์ ์ด์ค๋ค.
6. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด statement๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๊ณ , Generate Policy ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ์ฑ ์ ์์ฑํ๋ฉด ๋๋ค.
7. ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ JSON ํ์์ ๋ฒํท ์ ์ฑ ์ ๋ณต์ฌํ๊ณ , ๋ฒํท ์ ์ฑ ์์ ํ๊ธฐ ํ์ด์ง๋ก ๋์๊ฐ์ ์๋ ์๋ ๋ด์ฉ์ ์ง์ฐ๊ณ ๋ณต์ฌํ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ์ฌํญ ์ ์ฅํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด bucket ์์ฑ๊ณผ ์ค์ ์ ๋๋ฌ์ง๋ง, Heroku application์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Heroku ๋ฌธ์์ ๋์์๋ CORS setting ๊ณผ์ ๋ ์๋ฃํด์ผ ํ๋ค.
S3 bucket CORS setting
1. Permissions ํญ ํด๋ฆญํ, ํ๋จ์ผ๋ก ์คํฌ๋กค์ ํ๋ฉด CORS ๋ถ๋ถ์ด ๋์ค๋๋ฐ ์ฌ๊ธฐ์ Edit ๋ฒํผ์ ํด๋ฆญํ๋ค.
2. ๋ค์ ๋ด์ฉ์ ์ ๋ ฅํ๊ณ ๋ณ๊ฒฝ์ฌํญ ์ ์ฅํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ค.
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"HEAD",
"POST",
"PUT"
],
"AllowedOrigins":[
"*"
],
"ExposeHeaders": []
}
]
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด CORS setting์ด ์๋ฃ๋์๋ค.
This tells S3 to allow any domain access to the bucket and that requests can contain any headers, which is generally fine for testing. When deploying, you should change the ‘AllowedOrigin’ to only accept requests from your domain.
์ฃผ์ํ ์ ์ ์ด๋ ๊ฒ ์ค์ ํด๋๋ฉด ๋ชจ๋ ๋๋ฉ์ธ์ ์ ๊ทผ์ ํ์ฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ ์คํธ ํ ๋๋ ๊ด์ฐฎ์ง๋ง, ๋ฐฐํฌํ ๋๋ "AllowedOrigin" ๋ถ๋ถ์ ์์ ํด์ผ ํ๋ค!
๋ชจ๋ ๊ณผ์ ์ ์๋ฃํ๊ณ ์ฌ์ง ํ์ผ ์ ๋ก๋ ํ, ๊ฐ์ฒด URL๋ก ๋ค์ด๊ฐ๋ณด๋ฉด ์๋ฌ์์ด ๋ด๊ฐ ์ฌ๋ฆฐ ์ฌ์ง์ ๋ณผ ์ ์๊ฒ ๋๋ค.
์ด์ ์ด๊ฒ์ ์ด๋ป๊ฒ Node.js ์๋ฒ์์ ์ฌ์ฉํ๋์ง ๋ค์ ๊ธ์์ ์ ๋ฆฌํด ๋ณด๊ฒ ๋ค.
์ฐธ๊ณ :
https://velog.io/@gbskang/Heroku%EC%97%90%EC%84%9C-AWS-S3-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
https://42place.innovationacademy.kr/archives/9784
'AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AWS] Heroku๋ก ๋ฐฐํฌํ Node.js ์๋ฒ์์ AWS S3 ์ฌ์ฉํ๊ธฐ-2 (0) | 2022.05.24 |
---|---|
[AWS] IAM ์์ฑํ๊ธฐ (0) | 2022.02.20 |