Firebase-tools: ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ: /<segment>/** ๋‹ค์‹œ ์“ฐ๊ธฐ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ</segment>

์— ๋งŒ๋“  2017๋…„ 07์›” 10์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: firebase/firebase-tools

ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์š”

const app = express()

app.get('/ping', (req, res) => {
  res.send('pong');
})

exports.api = functions.https.onRequest(app)

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

https://...cloudfunctions.net/api/ping
ํƒ๊ตฌ

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
  "hosting": {
    "public": "public",
    "rewrites": [ {
      "source": "/api/**", "function": "api"
    } ]
  }
}

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ URL์—์„œ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

https://...firebaseapp.com/api/ping
404

์ด์™€ ๊ฐ™์ด ๋‚ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

{
  "hosting": {
    "public": "public",
    "rewrites": [ {
      "source": "**", "function": "api"
    } ]
  }
}

๊ทธ๋Ÿฌ๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

https://...firebaseapp.com/ping
ํƒ๊ตฌ

์—ฌ๊ธฐ์— ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์žฌ์ž‘์„ฑ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ์ด์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://firebase.googleblog.com/2017/06/serving-dynamic-content-with-cloud.html

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ต์Šคํ”„๋ ˆ์Šค ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— /api๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค
URL์ด ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์œผ๋กœ ์ „์†ก๋  ๋•Œ ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

2017๋…„ 7์›” 9์ผ ์ผ์š”์ผ ์˜คํ›„ 11:27 roosi [email protected]์ด(๊ฐ€) ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์š”

const ์•ฑ = ์ต์Šคํ”„๋ ˆ์Šค()

app.get('/ํ•‘', (์š”์ฒญ, ํ•ด์ƒ๋„) => {
res.send('ํ');
})

export.api = functions.https.onRequest(์•ฑ)

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

https://...cloudfunctions.net/api/ping
ํƒ๊ตฌ

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
"ํ˜ธ์ŠคํŒ…": {
"๊ณต๊ฐœ": "๊ณต๊ฐœ",
"๋‹ค์‹œ ์ž‘์„ฑ": [ {
"์†Œ์Šค": "/api/**", "ํ•จ์ˆ˜": "api"
} ]
}
}

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ URL์—์„œ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

https://...firebaseapp.com/api/ping
404

์ด์™€ ๊ฐ™์ด ๋‚ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

{
"ํ˜ธ์ŠคํŒ…": {
"๊ณต๊ฐœ": "๊ณต๊ฐœ",
"๋‹ค์‹œ ์ž‘์„ฑ": [ {
"์†Œ์Šค": "**", "ํ•จ์ˆ˜": "api"
} ]
}
}

๊ทธ๋Ÿฌ๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

https://...firebaseapp.com/ping
ํƒ๊ตฌ

์—ฌ๊ธฐ์— ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์žฌ์ž‘์„ฑ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ์ด์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://firebase.googleblog.com/2017/06/serving-dynamic-content-with-cloud.html
http://url

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/firebase/firebase-tools/issues/392 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์‹ค
https://github.com/notifications/unsubscribe-auth/AAAD_updmJ5mvK9NFrx5v-a0lQckEhaHks5sMcRogaJpZM4OSaDu
.

๋ชจ๋“  3 ๋Œ“๊ธ€

์ต์Šคํ”„๋ ˆ์Šค ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— /api๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค
URL์ด ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์œผ๋กœ ์ „์†ก๋  ๋•Œ ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

2017๋…„ 7์›” 9์ผ ์ผ์š”์ผ ์˜คํ›„ 11:27 roosi [email protected]์ด(๊ฐ€) ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์š”

const ์•ฑ = ์ต์Šคํ”„๋ ˆ์Šค()

app.get('/ํ•‘', (์š”์ฒญ, ํ•ด์ƒ๋„) => {
res.send('ํ');
})

export.api = functions.https.onRequest(์•ฑ)

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

https://...cloudfunctions.net/api/ping
ํƒ๊ตฌ

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
"ํ˜ธ์ŠคํŒ…": {
"๊ณต๊ฐœ": "๊ณต๊ฐœ",
"๋‹ค์‹œ ์ž‘์„ฑ": [ {
"์†Œ์Šค": "/api/**", "ํ•จ์ˆ˜": "api"
} ]
}
}

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ URL์—์„œ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

https://...firebaseapp.com/api/ping
404

์ด์™€ ๊ฐ™์ด ๋‚ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

{
"ํ˜ธ์ŠคํŒ…": {
"๊ณต๊ฐœ": "๊ณต๊ฐœ",
"๋‹ค์‹œ ์ž‘์„ฑ": [ {
"์†Œ์Šค": "**", "ํ•จ์ˆ˜": "api"
} ]
}
}

๊ทธ๋Ÿฌ๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

https://...firebaseapp.com/ping
ํƒ๊ตฌ

์—ฌ๊ธฐ์— ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์žฌ์ž‘์„ฑ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ์ด์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://firebase.googleblog.com/2017/06/serving-dynamic-content-with-cloud.html
http://url

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธ
https://github.com/firebase/firebase-tools/issues/392 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์‹ค
https://github.com/notifications/unsubscribe-auth/AAAD_updmJ5mvK9NFrx5v-a0lQckEhaHks5sMcRogaJpZM4OSaDu
.

@roosi ์ €๋„ ์ง€๋‚œ์ฃผ์— ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ์„ฑ๊ฐ€์‹  ์ผ์ด์ง€๋งŒ ์ด์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ŠคํŒ… ํ˜ธ์ถœ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” main ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด https://...firebaseapp.com/api/ping ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ๋‚ด ๋‹ต๋ณ€์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
https://stackoverflow.com/a/45224176/1309346

https://github.com/firebase/functions-samples/blob/master/authorized-https-endpoint ์˜ ์˜ˆ์ œ๋„ ๊นจ์ง„ ๊ฒƒ ๊ฐ™์€๋ฐ์š”?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰