๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ์นด์นด์˜คํ†ก ์ฑ—๋ด‡ ์Šคํ‚ฌ ์„œ๋ฒ„๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ์œˆ๋„์šฐ ๊ธฐ๋ฐ˜์—์„œ nvm ๋ฐ nodejs๋ฅผ ์ด์šฉํ•œ ์˜ˆ์ œ ์Šคํ‚ฌ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์˜คํ”ˆ ๋นŒ๋” ์Šคํ‚ฌ์— ์—ฐ๋™ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

[์ฑ—๋ด‡] ์œˆ๋„์šฐ์—์„œ ์นด์นด์˜คํ†ก ์ฑ—๋ด‡์„ ์œ„ํ•œ ์˜ˆ์ œ ์Šคํ‚ฌ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ข€ ๋” ์นœ์ˆ™ํ•œ C#์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , Microsoft Azure ์„œ๋ฒ„์— ๊ฒŒ์‹œํ•˜์—ฌ ์˜คํ”ˆ ๋นŒ๋” ์Šคํ‚ฌ์— ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Azure ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•œ ์Šคํ‚ฌ ์„œ๋ฒ„ ๋‹ค์ด์–ด๊ทธ๋žจ

๋”ฐ๋ผ ํ•˜๊ธฐ

1. Microsoft Azure ๊ฐ€์ž…ํ•˜๊ธฐ

๋”๋ณด๊ธฐ

Microsoft Azure ์„œ๋น„์Šค๋Š” ์œ ๋ฃŒ์ด์ง€๋งŒ, ํšŒ์›๊ฐ€์ž… ํ›„ 1๋…„ ๊ฐ„์€ ๋ฌด๋ฃŒ๋กœ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(2021-02-14 ๊ธฐ์ค€). ์•„๋ž˜ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†ํ•˜์—ฌ Azure ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ํ™ˆํŽ˜์ด์ง€: ๋งํฌ

 

์ง€๊ธˆ Azure ์ฒดํ—˜ ๊ณ„์ • ๋งŒ๋“ค๊ธฐ | Microsoft Azure

12๊ฐœ์›” ์ฒดํ—˜ ์„œ๋น„์Šค ๋ฐ USD 200 ํฌ๋ ˆ๋”ง์œผ๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”. Microsoft Azure์—์„œ ์ง€๊ธˆ ์ฒดํ—˜ ๊ณ„์ •์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

azure.microsoft.com

ํ™ˆํŽ˜์ด์ง€ ์ ‘์† ํ›„ ๊ณ„์ • ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

Azure ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€

Microsoft ๊ณ„์ • ๋กœ๊ทธ์ธ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด Azure ์ฒดํ—˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Azure ์ฒดํ—˜ ๊ณ„์ • ์ƒ์„ฑํ•˜๊ธฐ

ID ๊ฒ€์ฆ์„ ์œ„ํ•ด ์นด๋“œ ์ •๋ณด๋„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ˆ ๊ฑฑ์ • ์•ˆ ํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

์นด๋“œ๋กœ ID ๊ฒ€์ฆ ํ™”๋ฉด

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ณ„์•ฝ ๋™์˜๋ฅผ ํ•˜๋ฉด ๊ฐ€์ž… ์ ˆ์ฐจ๊ฐ€ ๋๋‚ฉ๋‹ˆ๋‹ค.

๊ณ„์•ฝ ๋™์˜ ํ™”๋ฉด

๊ฐ€์ž…์ด ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์ž… ์™„๋ฃŒ ํ™”๋ฉด

2. ASP.NET ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

๋”๋ณด๊ธฐ

์šฐ์„  ์•„๋ž˜์™€ ๊ฐ™์ด Visual Studio์— ASP.NET ๋ฐ ์›น ๊ฐœ๋ฐœ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”. ๋งŒ์•ฝ ์—†๋‹ค๋ฉด ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Visual Studio ASP.NET ๊ฐœ๋ฐœ ๊ตฌ์„ฑ ์š”์†Œ ์„ค์น˜ํ•˜๊ธฐ
์ฃผ์˜
 
 

์ฐธ๊ณ ๋กœ ์ด์ „์— ์ž‘์—…ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ๋Š” Visual Studio 2017์ด์—ˆ๋Š”๋ฐ, ์ตœ๊ทผ์— ๋‹ค์‹œ ์‹œ๋„ํ•ด๋ณด๋‹ˆ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ ASP.NET ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋ฌด์ˆ˜ํžˆ ํ‘œ์‹œ๋˜๋”๊ตฐ์š”. Visual Studio 2019๋กœ ์‹œ๋„ํ•ด๋ณด๋‹ˆ ๋ฌธ์ œ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ ๊ฐ™์€ ํ˜„์ƒ์ด ์žˆ๋‹ค๋ฉด Visual Studio 2019๋กœ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ASP.NET Core ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

ASP.NET Core ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ASP.NET Core ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ํƒ

ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์€ ExamSkillServer๋ผ๊ณ  ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์„ค์ •

๋งˆ์ง€๋ง‰์œผ๋กœ API ํ•ญ๋ชฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

API ํ•ญ๋ชฉ ์„ ํƒ

ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด WeatherForecastController.cs๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ๋กœ ์ผ๊ธฐ ์˜ˆ๋ณด ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋œ ๊ฒ๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” ์ฑ—๋ด‡ ์Šคํ‚ฌ ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ ์ถ”๊ฐ€ํ•˜๋Š” ๋ชจ์Šต

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด API์˜ ์•„๋ž˜ ํ•ญ๋ชฉ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

API์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋™์ž‘์ด ํฌํ•จ๋œ 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๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

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 ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

Azure ๊ณ„์ • ๋กœ๊ทธ์ธ ํ™”๋ฉด

๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜๋ฉด ์—…๋กœ๋“œ ๊ฐ€๋Šฅํ•œ App Service ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๊ฐ€์ž…ํ–ˆ๋‹ค๋ฉด ๋ชฉ๋ก์ด ์—†์„ ํ…๋ฐ์š”. ์šฐ์ธก์˜ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ App Service๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

App Service ํ™”๋ฉด

์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

App Service ์ƒ์„ฑ ํ™”๋ฉด

App Service ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜์˜ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

App Service ์„ ํƒ ํ™”๋ฉด

API ๊ด€๋ฆฌ ๋‹จ๊ณ„๋Š” ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋งˆ์นจ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

API ๊ด€๋ฆฌ ํ™”๋ฉด

์ด์ œ ๊ฒŒ์‹œ ํ™”๋ฉด์—์„œ ๊ฒŒ์‹œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œ ํ™”๋ฉด

์ถœ๋ ฅ ์ฐฝ์— ๋นŒ๋“œ ๋ฐ ๊ฒŒ์‹œ ์ž‘์—…์ด ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ ์ฐฝ ํ™”๋ฉด

๊ทธ๋ฆฌ๊ณ  Microsoft Azure ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ ํ›„ App Service ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

Azure ํ™ˆ ํ™”๋ฉด

ExamSkillServer๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ ์ค‘์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

App Service ์ƒํƒœ ํ™•์ธ

3. ์˜คํ”ˆ ๋นŒ๋”์—์„œ Azure ์Šคํ‚ฌ ์„œ๋ฒ„ ์—ฐ๋™ํ•˜๊ธฐ

๋”๋ณด๊ธฐ

์ด์ œ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ๋นŒ๋” ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ํ›„ ์Šคํ‚ฌ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  URL ์ž…๋ ฅ์— ์œ„์—์„œ ์ƒ์„ฑํ•œ App Service ์ฃผ์†Œ์— /api/sayHello๋ฅผ ๋ถ™์ธ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜คํ”ˆ ๋นŒ๋” ์Šคํ‚ฌ ํ™”๋ฉด

์Šคํ‚ฌ ์„œ๋ฒ„๋กœ ์ „์†ก ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์‘๋‹ต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ‚ฌ ์„œ๋ฒ„ ์‘๋‹ต ํ™•์ธ

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ์Šคํ‚ฌ์€ ํŠน์ • ๋ธ”๋ก์— ์—ฐ๊ฒฐํ•˜์—ฌ ์‘๋‹ตํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธ”๋ก์— ์Šคํ‚ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ‚ฌ ์„œ๋ฒ„๋กœ ์‘๋‹ตํ•œ ๋ฉ”์‹œ์ง€

์ •๋ฆฌ

์—ฌ๊ธฐ๊นŒ์ง€ ์ž˜ ๋”ฐ๋ผ ํ•˜์…จ๋‚˜์š”? ์‚ฌ์‹ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋ถ€๋ถ„์ด ์—†์–ด์„œ ๋ฌธ์ œ์—†์ด ์ž˜ ๋”ฐ๋ผ ํ•˜์…จ์„ ๊ฑฐ๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์—์„œ๋Š” Microsoft Azure ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์–ด์จŒ๋“  1๋…„ ๋ฌด๋ฃŒ ๊ธฐ๊ฐ„๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ ๊ธฐ๊ฐ„์ด ๋๋‚˜๋ฉด ์œ ๋ฃŒ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ์š”. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” Synology NAS๋ฅผ ์ด์šฉํ•˜์—ฌ ASP.NET ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•