[์ฑ๋ด/ASP.NET] C#์ผ๋ก Microsoft Azure ์๋ฒ์ ์นด์นด์คํก ์์ ์คํฌ ์๋ฒ ๊ตฌ์ถํ๊ธฐ
์ง๋ ํฌ์คํ ์์ ์นด์นด์คํก ์ฑ๋ด ์คํฌ ์๋ฒ๊ฐ ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์๋์ฐ ๊ธฐ๋ฐ์์ nvm ๋ฐ nodejs๋ฅผ ์ด์ฉํ ์์ ์คํฌ ์๋ฒ๋ฅผ ์คํํ๊ณ ์คํ ๋น๋ ์คํฌ์ ์ฐ๋ํด ๋ณด์์ต๋๋ค.
[์ฑ๋ด] ์๋์ฐ์์ ์นด์นด์คํก ์ฑ๋ด์ ์ํ ์์ ์คํฌ ์๋ฒ ๊ตฌ์ถํ๊ธฐ
์ด๋ฒ ํฌ์คํ ์์๋ ์ข ๋ ์น์ํ C#์ผ๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๊ณ , Microsoft Azure ์๋ฒ์ ๊ฒ์ํ์ฌ ์คํ ๋น๋ ์คํฌ์ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค.
๋ฐ๋ผ ํ๊ธฐ
1. Microsoft Azure ๊ฐ์ ํ๊ธฐ
Microsoft Azure ์๋น์ค๋ ์ ๋ฃ์ด์ง๋ง, ํ์๊ฐ์ ํ 1๋ ๊ฐ์ ๋ฌด๋ฃ๋ก ์ด์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค(2021-02-14 ๊ธฐ์ค). ์๋ ๊ณต์ ํํ์ด์ง์ ์ ์ํ์ฌ Azure ์๋น์ค์ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ณต์ ํํ์ด์ง: ๋งํฌ
ํํ์ด์ง ์ ์ ํ ๊ณ์ ์์ฑ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
Microsoft ๊ณ์ ๋ก๊ทธ์ธ ํ ์๋์ ๊ฐ์ด Azure ์ฒดํ ๊ณ์ ์ ์์ฑํ๊ธฐ ์ํด ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
ID ๊ฒ์ฆ์ ์ํด ์นด๋ ์ ๋ณด๋ ์ ๋ ฅํฉ๋๋ค. ๊ฒฐ์ ๋๋ ๊ฒ์ด ์๋๋ ๊ฑฑ์ ์ ํ์ ๋ ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๊ณ์ฝ ๋์๋ฅผ ํ๋ฉด ๊ฐ์ ์ ์ฐจ๊ฐ ๋๋ฉ๋๋ค.
๊ฐ์ ์ด ์๋ฃ๋๋ฉด ์๋์ ๊ฐ์ ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค.
2. ASP.NET ํ๋ก์ ํธ ์์ฑํ๊ธฐ
์ฐ์ ์๋์ ๊ฐ์ด Visual Studio์ ASP.NET ๋ฐ ์น ๊ฐ๋ฐ ๊ตฌ์ฑ์์๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํด ๋ณด์ธ์. ๋ง์ฝ ์๋ค๋ฉด ๊ตฌ์ฑ์์๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ด์ ์ ์์ ํ๋ ํ๋ก์ ํธ๋ Visual Studio 2017์ด์๋๋ฐ, ์ต๊ทผ์ ๋ค์ ์๋ํด๋ณด๋ ๊ธฐ๋ณธ ํ๋ก์ ํธ์์ ASP.NET ๊ด๋ จ ์๋ฌ๊ฐ ๋ฌด์ํ ํ์๋๋๊ตฐ์. Visual Studio 2019๋ก ์๋ํด๋ณด๋ ๋ฌธ์ ๋ ์์์ต๋๋ค. ํน์ ๊ฐ์ ํ์์ด ์๋ค๋ฉด Visual Studio 2019๋ก ์๋ํด ๋ณด์ธ์.
์ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
ASP.NET Core ์น ์์ฉ ํ๋ก๊ทธ๋จ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
ํ๋ก์ ํธ์ ์ด๋ฆ์ ExamSkillServer๋ผ๊ณ ์ง์ ํ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก API ํญ๋ชฉ์ ์ ํํฉ๋๋ค.
ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด ์๋์ ๊ฐ์ด WeatherForecastController.cs๊ฐ ๋ณด์ ๋๋ค. ๊ธฐ๋ณธ ํ๋ก์ ํธ ์์๋ก ์ผ๊ธฐ ์๋ณด ๊ด๋ จ๋ ๋ด์ฉ์ด ์ถ๊ฐ๋ ๊ฒ๋๋ค.
๊ทธ๋ผ ์ฐ๋ฆฌ๋ ์ฑ๋ด ์คํฌ ์๋ฒ๋ฅผ ์ํ ์๋ก์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์๋์ ๊ฐ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด API์ ์๋ ํญ๋ชฉ์ ์ ํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฆ์๋ sayHello.cs๋ก ์ง์ ํฉ๋๋ค.
์๋ฃ ํ ์๋์ ์ฝ๋๊ฐ ์๋ ์์ฑ๋ฉ๋๋ค.
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ExamSkillServer.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class sayHello : ControllerBase
{
// GET: api/<sayHello>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<sayHello>/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/<sayHello>
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/<sayHello>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<sayHello>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
์ด์ ๋น๋ํ๊ณ ์คํํ๋ฉด ์๋์ ๊ฐ์ ํ์ด์ง๊ฐ ์์ฑ๋ ๊ฒ์ ๋๋ค.
์ ์์ ํ์ด์ง์ ์ฃผ์๋ https://localhost:44372/swagger/index.html์ ๋๋ค. ์ด ์ฃผ์๋ฅผ https://localhost:44372/api/sayHello๋ก ๋ณ๊ฒฝํ๋ฉด ์๋์ ๊ฐ์ด ํ์๋ฉ๋๋ค.
์ ํ์ด์ง๋ ์๋์ ์ฝ๋๊ฐ ์คํ๋ ๊ฒฐ๊ณผ์ ๋๋ค.
// GET: api/<sayHello>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
์ด์ ์ฑ๋ด์ผ๋ก๋ถํฐ ๋ฐ์ POST ๋ฉ์๋์ ๋ํ ์๋ต์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๊ธฐ์กด HttpPost ๋ฉ์๋์ ๋ํ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค.
// POST api/<sayHello>
[HttpPost]
public dynamic Post(dynamic value)
{
Dictionary<string, object> response = new Dictionary<string, object>();
try
{
Dictionary<string, object> text = new Dictionary<string, object>();
Dictionary<string, object> simpleText = new Dictionary<string, object>();
List<Dictionary<string, object>> outputs = new List<Dictionary<string, object>>();
Dictionary<string, object> template = new Dictionary<string, object>();
text.Add("text", "hello I'm Ryan");
simpleText.Add("simpleText", text);
outputs.Add(simpleText);
template.Add("outputs", outputs);
response.Add("version", "2.0");
response.Add("template", template);
}
catch (Exception e)
{
}
return response;
}
๋น๋ํ๋ฉด ์๋ฌ ์์ด ์ฑ๊ณตํ ๊ฒ์ ๋๋ค. ์ด์ Azure ์๋ฒ์ ๊ฒ์ํ ์ฐจ๋ก์ ๋๋ค. ํ๋ก์ ํธ์ ๊ฒ์ ๋ฉ๋ด๋ฅผ ํด๋ฆญํฉ๋๋ค.
์๋์ฒ๋ผ ๊ฒ์ ์ฐฝ์ด ํ์๋๋ฉด Azure๋ฅผ ์ ํํฉ๋๋ค.
ํน์ ๋์์ผ๋ก๋ Azure App Service(Windows)๋ฅผ ์ ํํฉ๋๋ค.
Azure ๊ณ์ ๋ก๊ทธ์ธ ํ๋ฉด์ด ํ์๋๋๋ฐ์. ๊ฐ์ ํ Azure ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํฉ๋๋ค.
๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด ์ ๋ก๋ ๊ฐ๋ฅํ App Service ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค. ์ฒ์ ๊ฐ์ ํ๋ค๋ฉด ๋ชฉ๋ก์ด ์์ ํ ๋ฐ์. ์ฐ์ธก์ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ App Service๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์๋์ ๊ฐ์ด ์ด๋ฆ์ ์ ๋ ฅํ๊ณ ๋ง๋ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
App Service ์์ฑ์ด ์๋ฃ๋๋ฉด ์๋์ ํ๋ฉด์ผ๋ก ์ ํ๋ฉ๋๋ค. ๋ค์ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
API ๊ด๋ฆฌ ๋จ๊ณ๋ ๊ฑด๋๋ฐ๊ณ ๋ง์นจ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ด์ ๊ฒ์ ํ๋ฉด์์ ๊ฒ์ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ๋ก๋ํฉ๋๋ค.
์ถ๋ ฅ ์ฐฝ์ ๋น๋ ๋ฐ ๊ฒ์ ์์ ์ด ์ฑ๊ณตํ๋ค๋ ๋ฉ์์ง๊ฐ ๋ณด์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ Microsoft Azure ํ์ด์ง์ ์ ์ํ ํ App Service ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
ExamSkillServer๊ฐ ์ ์์ ์ผ๋ก ์คํ ์ค์ธ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
3. ์คํ ๋น๋์์ Azure ์คํฌ ์๋ฒ ์ฐ๋ํ๊ธฐ
์ด์ ๋ง์ง๋ง ๋จ๊ณ์ ๋๋ค. ์คํ ๋น๋ ์ฌ์ดํธ์ ์ ์ํ ํ ์คํฌ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ URL ์ ๋ ฅ์ ์์์ ์์ฑํ App Service ์ฃผ์์ /api/sayHello๋ฅผ ๋ถ์ธ ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์คํฌ ์๋ฒ๋ก ์ ์ก ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋ต์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์์ฑ๋ ์คํฌ์ ํน์ ๋ธ๋ก์ ์ฐ๊ฒฐํ์ฌ ์๋ตํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ ๋ฆฌ
์ฌ๊ธฐ๊น์ง ์ ๋ฐ๋ผ ํ์ จ๋์? ์ฌ์ค ์๋ฌ๊ฐ ๋ฐ์ํ ๋ถ๋ถ์ด ์์ด์ ๋ฌธ์ ์์ด ์ ๋ฐ๋ผ ํ์ จ์ ๊ฑฐ๋ผ ์๊ฐ๋ฉ๋๋ค. ๋ณธ๋ฌธ์์๋ Microsoft Azure ์๋ฒ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ด์จ๋ 1๋ ๋ฌด๋ฃ ๊ธฐ๊ฐ๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฌด๋ฃ ๊ธฐ๊ฐ์ด ๋๋๋ฉด ์ ๋ฃ ๊ฒฐ์ ๋ฅผ ์งํํด์ผ ํ๋๋ฐ์. ๋ค์ ํฌ์คํ ์์๋ Synology NAS๋ฅผ ์ด์ฉํ์ฌ ASP.NET ์๋น์ค๋ฅผ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค.
'Programming > ChatBot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[์ฑ๋ด] ์ฝ๋ฉ์์ด ์นด์นด์คํก ์ฑ๋ด ๋ง๋ค๊ธฐ - ๋ฐ๋ก์ฐ๊ฒฐ ๋ฒํผ
[์ฑ๋ด] ์ฝ๋ฉ์์ด ์นด์นด์คํก ์ฑ๋ด ๋ง๋ค๊ธฐ - ๋ฐ๋ก์ฐ๊ฒฐ ๋ฒํผ
2021.05.07 -
[์ฑ๋ด] ์ฝ๋ฉ์์ด ์นด์นด์คํก ์ฑ๋ด ๋ง๋ค๊ธฐ - ์ ๋ค๋ฆญ ๋ฉ๋ด ์ค์
[์ฑ๋ด] ์ฝ๋ฉ์์ด ์นด์นด์คํก ์ฑ๋ด ๋ง๋ค๊ธฐ - ์ ๋ค๋ฆญ ๋ฉ๋ด ์ค์
2021.05.04 -
[์ฑ๋ด] ์๋์ฐ์์ ์นด์นด์คํก ์ฑ๋ด์ ์ํ ์์ ์คํฌ ์๋ฒ ๊ตฌ์ถํ๊ธฐ
[์ฑ๋ด] ์๋์ฐ์์ ์นด์นด์คํก ์ฑ๋ด์ ์ํ ์์ ์คํฌ ์๋ฒ ๊ตฌ์ถํ๊ธฐ
2021.02.16 -
[์ฑ๋ด] ์นด์นด์คํก ์ฑ๋ด์ ์ํ ์นด์นด์ค i ์คํ ๋น๋ ์ดํดํ๊ธฐ
[์ฑ๋ด] ์นด์นด์คํก ์ฑ๋ด์ ์ํ ์นด์นด์ค i ์คํ ๋น๋ ์ดํดํ๊ธฐ
2021.02.13