๋๋ถ๋ถ ์ธ๋ ๊ฒ์์์ ๋งค์นญ ์๋ฒ๋ ํฌํค, db ์๋ฒ๋ ํ๋ ์ดํน์ด๋ ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฑฐ์
๊ทธ๋ฌ๋ ์์ ๊ตฌ์ฑ๋ง์ผ๋ก๋ ์ฌ์ฉ์์ ํ๋์ ๋ํ ์ง์ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ ์ ์๊ธฐ ๋๋ฌธ์
๋ณดํต์ ํด๋ผ์ด์ธํธ์ ๋ณด์ ํ๋ก๊ทธ๋จ์ ์ค์นํ๊ฑฐ๋
์๋ฒ์์ ๊ฒ์ฆํ ์ ์๋ azure function, cloud Function ๋ฑ์ ์๋ฒ๋ฆฌ์ค ํจ์๋ฅผ ์ฌ์ฉํ ๊ฑฐ์
๋ณธ๋ฌธ์์๋ ์ด๋ฌํ ์๋ฒ๋ฆฌ์ค ํจ์์ ๋ํด ๋ค๋ค๋ณด๋ ค ํจ
์๋ฒ๋ฆฌ์ค ํจ์๋ ๊ทธ ์์ฒด๊ฐ ๋ง์ดํฌ๋ก ์๋ฒ๋ก ๊ณ ์ ํ url์ ๊ฐ์ง๋ฉฐ ํธ์ถ ์ ์ ํด์ง ํจ์๋ฅผ ์คํํจ
์ข ๋์ ๊ณผ๊ธ์ ๋ณ๋์ ๊ด๋ฆฌ๊ฐ ํ์์๋๋ฐ๋ค ๊ณ ๊ฐ์ฉ์ฑ์ ์คํ ์ค์ผ์ผ๋ง์ ์ง์ํ๋ ๋ฌด์๋ฌด์ํ ๋ ์์
๋ฌธ์ ๋ ํจ์ ๋จ์๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ผํ๋ ๊ตฌ์กฐ์ธ๋ฐ
๋ค์๊ณผ ๊ฐ์ด ํจ์๋ง๋ค ์ข ์์ฑ์ ํฌํจํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ผ ํจ
https://github.com/Kralizek/AWSLambdaSharpTemplate/tree/master/samples
์ด๋ฌํ ๊ตฌ์กฐ๋ก ์ธํด ํด๋ผ์ด์ธํธ์์๋ ๊ฐ ํจ์๋ง๋ค ๋ค๋ฅธ url๋ก ์์ฒญํด์ผ ํ๊ณ
์๋ฒ์์๋ ํ ํจ์์์ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์๋
ํ๋ก์ ํธ๊ฐ ๋ฌ๋ผ ์ฐธ์กฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ ๋ค์ ์๋ฒ๋ฆฌ์ค ํจ์๋ก ํธ์ถํด์ผ ํ๋ ์์ด๋ฌ๋๊ฐ ๋ฐ์ํจ
๊ทธ๋์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ ํธ ํจ์๋ ๋งค๋ฒ ์ฌ์ ์ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๊น
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ๊ฒ monolithic serverless ๋ผ๋ ์ํคํ ์ณ์ธ๋ฐ
๋ชจ๋ ์๋ฒ๋ฆฌ์ค ํจ์๋ฅผ ํ๋์ ํ๋ก์ ํธ์์ ๊ด๋ฆฌํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ์
์๋ฒ๋ฆฌ์ค ํจ์๋ ๋คํธ์ํฌ ํจ์๋ก ์์ฒญํ๋๋ฐ ํจ์์ ๊ณ ์ url๊ณผ http method๋ฅผ ํ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํจ
๋๋ c# ์ ์ ๋ ์๋์ง๋ง ๋คํธ์ํฌ ํจ์๋ ๋ฐ๋์ ๋ค์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฑฐ์
request(url, http method)
url์ /๋ฅผ ๋ถ์ฌ ํ์ ๊ฒฝ๋ก(์ดํ path)๋ฅผ ์ถ๊ฐํ ์ ์๊ณ
์๋ฒ๋ ์์ฒญ๋ฐ์ path์ http method๋ฅผ ์ฝ์ด์ฌ ์ ์์ (aws lambda๋ง ํ์ธํด๋ด ใ )
์ด๋ฅผ ๋ฐํ์ผ๋ก router์์ ์์ฒญํ ํจ์๋ฅผ ์ฐพ์ ์คํํ๋๊ฒ ์ํคํ ์ณ์ ํต์ฌ ๊ฐ๋ ์
๊ตฌํ์ ๊ฐ๋จํจ. ์ฐ์ ์๋ฒ๋ฆฌ์ค ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์ฌ๊ธฐ์ ๋ชจ๋ ํจ์๋ฅผ ์ ์ํจ
์๋ฅผ๋ค์ด ๊ฐ ํจ์๊ฐ ์ฌ์ฉํ๋ http method ๊ฐ ๋ค์๊ณผ ๊ฐ์๋
getItem, GET
updateItem, POST
getAccount, GET
httpRouteMap์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์
httpRouteMap = {
/item: {
GET: getItem,
POST: updateItem,
},
/account: {
GET: getAccount,
},
}
๊ทธ๋ฆฌ๊ณ router ํจ์๋ ์์ httpRouteMap์ path์, http method๋ฅผ ์ ๋ ฅํด์ ๋งคํํ ํจ์๋ฅผ ๋ฆฌํดํด์ฃผ๋ฉด ๋จ
fn = httpRouteMap[path][httpMethod]
๋ง์ง๋ง์ผ๋ก ์๋ฒ๋ฆฌ์ค์ ์ง์ ์ ์์ router ํจ์๋ฅผ ์คํํ๋ฉด ์๋ฒ ๋ก์ง์ ๋์
์ด์ ํด๋ผ์์ request(url/item, GET) ์ผ๋ก ์์ฒญํ๋ฉด getItem์ด ์คํ๋จ
monolithic serverless ์ํคํ ์ณ๋ฅผ ์ ์ฉํ๋ฉด ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฟ๋ง์๋๋ผ ์ฝ๋ ์คํํธ๋ ๊ฐ์ ํ ์ ์์
์ฝ๋ ์คํํธ๋ ์๋ฒ๋ฆฌ์ค ํจ์์ ๋ํ์ ์ธ ๋ฌธ์ ์ ์ผ๋ก ์ต์ด ์คํ ์ ์ ์ด์์ ์์ญ ์ด์ ์๊ฐ ์ง์ฐ์ด ๋ฐ์ํ๋๊ฒ์ ๋งํจ
์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ ํจ์์ผ ์๋ก ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋๋๋ฌ์ง๋๋ฐ
์ ์ํคํ ์ณ๋ ๋ชจ๋ ํจ์๊ฐ ๋ผ์ฐํฐ๋ฅผ ํตํด์ ์คํ๋๋ฏ๋ก ์ฝ๋ ์คํํธ ๋ฌธ์ ์์ ๋น๊ต์ ์์ ๋ก์
ํจ์์ ํฌ๊ธฐ๊ฐ ์ปค์ ธ ์คํ ์๊ฐ์ด ๊ธธ์ด์ง๋ ๋จ์ ์ด ์์ง๋ง ์ธ๋ ๋ ๋ฒจ์์ ์ด๋ฌํ ์ํฅ์ ๋ฏธ๋ฏธํ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ
์์ ์ธ๊ธํ ์ฅ์ ๋ค์ด ์ ๋จ์ ์ ๋ชจ๋ ์์ํจ
๋์ผ๋ก ์๋ฒ๋ฆฌ์ค๋ ๋ฐ๋์ serverless framework๋ SAM ๋ฑ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ local dev ๋ฐ hmr์ ์ ์ฉํด์ผ ํํ๋ก์ด ๊ฐ๋ฐ์ด ๊ฐ๋ฅํจ
๋ค์ ํฌ์คํ ์ ์ฐธ์กฐํ์
https://devstarsj.github.io/cloud/2016/11/22/Lambda+APIGateway.02.Route/
AWS Lambda์ API Gateway๋ฅผ ์ด์ฉํด์ Serverless Web API ๋ง๋ค๊ธฐ (2) - RouteWeb API๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ฌ๋ฌ๊ฐ์ง URL์ ๋ํด์ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋๊ฒ์ ํ์์ ์ ๋๋ค. ๊ฐ๊ฐ์ URL์ ๋ณ๋์ Lambda๋ก ๊ตฌํํ์ฌ API Gateway์์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง ํ๋์ Lambda์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์ ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด๋ฒ์๋ ์ ํธ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ฝ๊ฐ์ ์ค๋ช ์ ํ๋ฉด์ ์งํํ๊ฒ ์ต๋๋ค. ์ ํธ์ ๋ด์ฉ์ ์๋ค๋ ๊ฐ์ ํ์ ์งํํ๊ฒ ์ต๋๋ค. ์ฒ์ ์ด ๊ธ๋ถํฐ ๋ณด์๋ ๋ถ๋ค์ ๊ธ์๋ Link์์ ๋ด์ฉ์...devstarsj.github.io
๋๊ธ 0