Aspnetcore: 2.2 ๋กœ๋“œ๋งต ๋…ผ์˜

์— ๋งŒ๋“  2018๋…„ 06์›” 25์ผ  ยท  117์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/aspnetcore

2.2 ๋กœ๋“œ๋งต ๋ฐœํ‘œ์— ๋Œ€ํ•œ ํ† ๋ก : https://github.com/aspnet/Announcements/issues/307

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

๋กœ๋“œ๋งต, ํŠนํžˆ ์ƒํƒœ ํ™•์ธ ๋ฐ HTTP 2.0์ด ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ์นœ์ ˆํ•œ ๋ฐฉ๋ฒ• ์œผ๋กœ ๊ฐ„๋‹จํ•œ ์ž์‚ฌ Microsoft ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IdentityServer4๋Š” ์ด ๊ฒฉ์ฐจ๋ฅผ ์ž˜ ๋ฉ”์šฐ๋ฉฐ ๋” ๊ฐ„๋‹จํ•œ ๋ฒ„์ „์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋” ์ž˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ธ์ฆ์€ ์–ด๋ ต๊ณ  IdentityServer๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ IdentityServer ์œ„์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ถŒํ•œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ

ASP.NET ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šคํƒ ๋“œ์—…์—์„œ ASP.NET Core ํŒ€์ด Identity Server ์œ„์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ์˜ต์…˜์— ๋Œ€ํ•ด Identity Server ํŒ€๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค!

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

EF Core 2.2 ๋กœ๋“œ๋งต์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

EF Core 2.2 ๋กœ๋“œ๋งต์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

https://github.com/aspnet/Announcements/issues/308

๋กœ๋“œ๋งต, ํŠนํžˆ ์ƒํƒœ ํ™•์ธ ๋ฐ HTTP 2.0์ด ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ์นœ์ ˆํ•œ ๋ฐฉ๋ฒ• ์œผ๋กœ ๊ฐ„๋‹จํ•œ ์ž์‚ฌ Microsoft ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IdentityServer4๋Š” ์ด ๊ฒฉ์ฐจ๋ฅผ ์ž˜ ๋ฉ”์šฐ๋ฉฐ ๋” ๊ฐ„๋‹จํ•œ ๋ฒ„์ „์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋” ์ž˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ธ์ฆ์€ ์–ด๋ ต๊ณ  IdentityServer๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ IdentityServer ์œ„์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ถŒํ•œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ

ASP.NET ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šคํƒ ๋“œ์—…์—์„œ ASP.NET Core ํŒ€์ด Identity Server ์œ„์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ์˜ต์…˜์— ๋Œ€ํ•ด Identity Server ํŒ€๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค!

ASP.NET Core WebHooks์— ๋Œ€ํ•œ ํ˜„์žฌ ๊ณ„ํš์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Dispatcher์™€ ๊ด€๋ จํ•˜์—ฌ ๋ฏธ๋“ค์›จ์–ด์—์„œ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ๐Ÿ˜ฑ
C# public async Task Invoke(HttpContext context, [FromRoute] SomeModel someModel)
[ํ”„๋กฌ์ฟผ๋ฆฌ]?

๋‹จ์ˆœ ์ธ์ฆ ์„œ๋ฒ„์ด์ง€๋งŒ Katana ๋‹จ์ˆœ ์ธ์ฆ ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•œ ์ผ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

@RehanSaeed์˜ ์šฐ๋ ค๋ฅผ ๋ฐ˜์˜ํ•˜๊ณ  ์ด ์ƒˆ ์„œ๋ฒ„๊ฐ€ ์ฑ„์›Œ์•ผ ํ•˜๋Š” ์ •ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์š”์ฒญํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์›น API๊ฐ€ ์•ฑ์˜ ๊ธฐ์กด ์ธ์ฆ ๋‚ด์—์„œ ์œ ํšจํ•œ ์ „๋‹ฌ์ž ํ† ํฐ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์œ„์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์ด๋ฏธ IdentityServer, OpenIddict ๋ฐ AspNet.Security.OpenIdConnect.Server์™€ ๊ฐ™์€ ์ œํ’ˆ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ณต์žก์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์˜ ๋งŽ์€ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์กด ์†”๋ฃจ์…˜์— ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"API ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ(C# & TypeScript)"์˜ TypeScript ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ •๋ง ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ €๋Š” Angular ํด๋ผ์ด์–ธํŠธ API ์„œ๋น„์Šค๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด NSwag๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ๋‹ค์–‘ํ•œ ์กฐํ•ฉ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ธฐ์˜๊ฒŒ ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ(๊ฐ€๋Šฅํ•˜๋ฉด ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ):

  • ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์žˆ๋Š” TypeScript ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” HttpClient๊ฐ€ ์žˆ๋Š” Angular ์„œ๋น„์Šค์ž…๋‹ˆ๊นŒ?
  • Angular๋ผ๋ฉด ์–ด๋–ค ๋ฒ„์ „์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ(RxJS์—์„œ๋„ ์ค‘์š”)?
  • null/์ •์˜๋˜์ง€ ์•Š์€ ์ฒ˜๋ฆฌ
  • ์—ด๊ฑฐํ˜• ์ฒ˜๋ฆฌ
  • ๋‚ ์งœ ์œ ํ˜•์— ๋Œ€ํ•œ JS ๋‚ ์งœ ๋˜๋Š” momentjs?
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
  • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ์ด๋ฆ„ ์ƒ์„ฑ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ(์˜ˆ: ์ƒ์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค์— ๋Œ€ํ•ด xxxDTO์—์„œ DTO ๋ถ€๋ถ„ ์‚ญ์ œ ๋˜๋Š” ์ด๋ฏธ OpenAPI ์ •์˜์— ์žˆ์Œ)

๊ธฐ๋Šฅ์— ํˆฌํ‘œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธฐ์กด ๋ฏธ๋“ค์›จ์–ด์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ๊ฐœ์„  ์‚ฌํ•ญ/์ˆ˜์ • ์‚ฌํ•ญ์ด ๋‚ด ์œ„์‹œ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ Authorization Server ์ œํ’ˆ์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ๋ฐ ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ์€ ๋ณต์žกํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ ์ด๋™ํ•˜๋ ค๋Š” ํฐ ์›€์ง์ž„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ œ์–ด๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์ด๋ฏธ ์ž˜ ๊ตฌ์ถ•๋˜๊ณ  ํ…Œ์ŠคํŠธ๋˜๊ณ  ๋ฌธ์„œํ™”๋˜๊ณ  ์ง€์›๋˜๋Š” IdentityServer4 ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์„ค์ •์—๋Š” 5๋ถ„์ด ์†Œ์š”๋˜๋ฉฐ ๋งŽ์€ ์‹œ์ž‘ ์ƒ˜ํ”Œ, ๋น„๋””์˜ค ๋ฐ ์ž์Šต์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ด์ƒ "์ œ๋กœ ๊ตฌ์„ฑ"์œผ๋กœ ๋ณด์•ˆ์„ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (์ด๋ฆ„ ์ง€์ • ๋ฐ ์‚ฌ์šฉ์—์„œ) ํ˜ผ๋ž€์„ ๋” ๊ฐ€์ค‘์‹œํ‚ค๋Š” ๋ฐ˜๋ฉด, ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋…ธ๋ ฅ์„ ์ง€์†์ ์œผ๋กœ ๋นผ๋ฉด์„œ ์ˆ˜๋…„๊ฐ„ ์ง€์›ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค.

๋˜ํ•œ IIS ์ธํ”„๋กœ์„ธ์Šค ํ˜ธ์ŠคํŒ…์ด ์ด 2.2 ๋กœ๋“œ๋งต์— ์—†๋Š” ์ด์œ ๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฃผ์š” ๊ธฐ๋Šฅ์ด๋ฉฐ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์—์„œ ์—ฌ๊ธฐ์— ์šฐ๋ฆฌ์˜ ์ถœ์‹œ ์ „๋žต ๋ฐ ์ผ์ •์˜ ์ฃผ์š” ์š”์ธ์ด๋ฉฐ, ์ด๋ฏธ ๋Œ€์‹  2.2 ๊ธฐ๊ฐ„์„ ์•ฝ์†, 2.1 ๋ฆด๋ฆฌ์Šค ์ „์— ๋งค์šฐ ๋งˆ์ง€๋ง‰ ์ˆœ๊ฐ„์„ ์ œ๊ฑฐํ–ˆ๋‹ค . ์ด๊ฒƒ์€ ๋‹จ์ง€ ์‹ค์ˆ˜์ผ ๋ฟ์ด๋ฉฐ ๋˜ ๋‹ค๋ฅธ ๊ณ„ํš ๋ณ€๊ฒฝ์ด ์•„๋‹˜์„ ์•Œ๋ ค์ฃผ์„ธ์š”.

ํŽธ์ง‘: @DamianEdwards ๋Š” Twitter ์—์„œ ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์‹ค์ˆ˜ ๋ผ๊ณ  ๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค(2.2๋กœ ๊ณ„ํš๋จ์„ ์˜๋ฏธํ•จ). ํœด!

๋‹ค๋ฅธ ์˜๊ฒฌ์„ ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Authorization/Policy, ํŠนํžˆ ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ํˆฌ์žํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฌธ์„œ ๋ฐ ์Šค์บํด๋”ฉ์— ๋Œ€ํ•œ ํˆฌ์ž์— ๋Œ€ํ•ด OpenIddict ๋ฐ IdentityServer์™€ ๊ฐ™์€ ํŒŒํŠธ๋„ˆ์™€ ๊ฐœ์ธ์ ์œผ๋กœ ํ›จ์”ฌ ๋” ๋งŽ์€ ํ˜‘๋ ฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๋ฆฌ ๋‹จ์ˆœํ•ด๋„ ๋ชจ๋“  ์ž‘์—…์€ ๊ฒฐ๊ตญ ์—„์ฒญ๋‚œ ํƒ€์‚ฌ ์ž‘์—…์„ ๋ณต์ œํ•˜๊ณ  aspnet ํŒ€์— ๋ถˆํ•„์š”ํ•œ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๋Š” ๋Š๋‚Œ์„ ์ง€์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ธ๊ธฐ๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ์˜ ์˜๊ฒฌ๊ณผ ์ง€์›์„ ๋ฐ›์•„ ๋Œ€์ค‘์˜ ๋ˆˆ์— ๋„๋Š” Microsoft Auth Server๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ์˜ Id4, OpenIddict๋Š” ๋ถ„๋ช…ํžˆ ์šฐ์ˆ˜ํ•œ OSS ํ”„๋กœ์ ํŠธ์ด๊ณ , ๊ทธ ๋’ค์— MS์˜ ์ง€์›์„ ๋ฐ›๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‚˜์œ ์ผ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์„ ์ง€์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค...?

์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์›์˜ ์–‘์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ฒฐ๊ตญ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค.

MS OSS ํ–‰๋™ ๊ฐ•๋ น์— "Nuget ์š”์ฒญ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ณต์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™๋ณดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ ์ƒํƒœ๊ณ„์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค."

๋‚ด ์•ˆ์˜ ๋ƒ‰์†Œ์ฃผ์˜์ž๋“ค์€ ์ผ๋ถ€ ๋‚ด๋ถ€์ž๋“ค์—๊ฒŒ Brock๊ณผ Dominick์—๊ฒŒ ํ”ผ ๋ฌป์€ ์ฝ”๋ฅผ ์ฃผ๋Š” ๊ฒƒ์ด ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด ์ œ์•ˆ์˜ ํŠน์ง•์ธ์ง€ ๊ถ๊ธˆํ•ดํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ASP ํŒ€์ด ํ•˜๋Š” ๋ชจ๋“  ์ผ์„ ๋ƒ‰์ •ํ•˜๊ฒŒ ๋น„ํŒํ•˜๋Š” ์†Œ๊ธฐ์—…์—๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

๋˜ํ•œ UI ๋ฐ ๋ฌธ์„œ์™€ ๊ฐ™์ด ๋งจ ์œ„์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ ์™ธ์— ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ž˜ ํ…Œ์ŠคํŠธ๋œ JSON-LD 1.1 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋กœ๋“œ๋งต์— ํ›Œ๋ฅญํ•˜๊ณ  ๊ตฌ์ฒด์ ์ธ ์ถ”๊ฐ€ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ•œ ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜์‹ญ์‹œ์˜ค - ๋‚˜๋Š” ์Šค์Šค๋กœ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค IdentityServer4์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์Šน์ธ ์ž‘์—…์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ›จ์”ฌ ๋” ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฒฉ์ฐจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์—ฌ, ์ƒ˜ํ”Œ ๋ฐ ๊ฐœ์„ ๋œ ํ†ตํ•ฉ ์ง€์ ์„ ํ†ตํ•ด ๊ฒฉ์ฐจ๋ฅผ ํ™•์‹คํžˆ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”์ฐํ•œ ์ƒํƒœ์— ์žˆ๋Š” ์ด ๊ณต๊ฐ„(B2C)์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ผ์šฐ๋“œ์—๋„ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์‹ญ์‹œ์˜ค.

๊ทธ ์™ธ์—๋„ ๋ชฉํ‘œ๋Š” ๊ธฐ์กด ์˜คํ”ˆ ์†Œ์Šค ์ œํ’ˆ์˜ ๊ธฐ๋Šฅ์„ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ  ์ผ์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” ๊ณ ์ „์ ์ธ ์žฌ์ž‘์„ฑ ํ•จ์ •๊ณผ ๋‹ค์†Œ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. "์ด ์†”๋ฃจ์…˜์€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๊ณ  ์•ฝ๊ฐ„ ์ง€์ €๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ". ์ˆœ์ง„ํ•˜๊ณ  n ๋ฒ„์ „์—์„œ๋Š” ์‹ค์ œ ์†”๋ฃจ์…˜์ด ํ•„์š”๋กœ ํ•˜๊ณ  IdentityServer์™€ ๊ฐ™์€ ๊ฒƒ์ด ์ด๋ฏธ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๋งŽ์€ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋ฐ ๋ˆ์„ ํˆฌ์žํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ๋Š” GitHub ์ธ์ˆ˜์™€ ํ•จ๊ป˜ ์ตœ๊ทผ ์˜คํ”ˆ ์†Œ์Šค์— ๋Œ€ํ•œ Microsoft์˜ ํƒœ๋„์— ๋Œ€ํ•ด ๋งŽ์€ ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค์—์„œ ๋งŽ์€ ์ผ์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ํ›Œ๋ฅญํ•œ ์˜คํ”ˆ ์†Œ์Šค ์‹œ๋ฏผ์ด ๋˜๋Š” ๊ฒƒ์˜ ์ผ๋ถ€๋Š” ๊ธฐ์กด ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์กด์žฌํ•  ๋•Œ ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ๊ธฐ์กด ์˜คํ”ˆ ์†Œ์Šค ์ œํ’ˆ์˜ ๊ธฐ๋Šฅ์„ ๋ณต์ œํ•˜๋Š” ํ”Œ๋žซํผ ์†Œ์œ ์ž์ธ ๊ท€ํ•˜์™€ ๊ฐ™์€ ํ”Œ๋žซํผ ๋ณด์œ ์ž์—๊ฒŒ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ณ ๋ฅผ _๊ถŒ์žฅํ•˜๋Š” ๋™์‹œ์— ํ•ด๋‹น ์ œํ’ˆ์— ์ฐธ์—ฌ _๊ถŒ์žฅ_ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋„ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋…ธ๋ ฅ์˜ ์š”์ ์„ ๋ณผ ์ˆ˜ ์—†์ง€๋งŒ ASP.NET Core ID์˜ _management_๊ฐ€ ๊ฐœ์„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. Damian Edwards๋Š” live.asp.net์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ž์ฒด ๋ณด์•ˆ์„ ๋กค๋ฐฑํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ๋ถ„๋ช…ํžˆ ๋ฐํ˜”์ง€๋งŒ - ์ œ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋†“์นœ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด - ASP.NET Core Identity์—๋Š” ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋กค๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ž์‹ ์˜. ๋‚˜๋Š” ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ณด์•ˆ ํ—ˆ์ ์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์„ ๋งค์šฐ ๋‘๋ ค์›Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋ฌด์„ญ์Šต๋‹ˆ๋‹ค.

MVC ์ˆ˜์ค€์—์„œ 2.2์˜ AspNetCore.Http ์ถ”์ƒํ™”๋กœ ์ฝ˜ํ…์ธ  ํฌ๋งทํ„ฐ๋ฅผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋‹ด๋‹น PM์ด ์ด Identity Server Lite์— ๋Œ€ํ•œ ๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ•˜์—ฌ ASP.NET ํŒ€์ด ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ์กด ํƒ€์‚ฌ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์˜ ๋‹จ์ ์„ ์ •ํ™•ํžˆ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žˆ๋Š” ๊ทธ๋Œ€๋กœ, ๋‹น์‹ ์€ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜์ง€๋งŒ ์ผ๋ถ€ ์Šคํฌํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๊ณ  ๊ทธ๊ฒƒ์€ ๋ณ„๋กœ ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งํ–ˆ๋“ฏ์ด AAD B2C๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•˜๊ณ  MS์— ๋น„์ฆˆ๋‹ˆ์Šค ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ @blowdart๋ฅผ ์ง€๋‚˜์„œ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด Auth ์„œ๋ฒ„ ์ œํ’ˆ์„ ์–ป๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€ ์ƒ๊ฐํ•ด ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

django์™€ ๊ฐ™์€ ๋‚ด์žฅํ˜• RESTful API ์ง€์›์„ ๊ฐ€์งˆ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งค๋ฒˆ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

์ตœ๊ทผ์— Generic RESTful API ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/0xRumple/dorm-portal/blob/master/DormPortal.Web/Controllers/StudentsController.cs

๋˜ํ•œ "๋‚˜๋Š” ๋‹น์‹ ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ด์ƒ "์ œ๋กœ ๊ตฌ์„ฑ"์œผ๋กœ ๋ณด์•ˆ์„ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค." ๋ฐ "๋‹น์‹ ์€ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ์ผ๋ถ€ ์Šคํฌํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ID ์„œ๋ฒ„๋Š” ์ •๋ง ๋ฉ‹์ง„ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๊ธฐ ์‰ฝ๊ณ  ๋” ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์™œ "๋‹จ์ˆœํ™”" ๋ฒ„์ „์ด ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ›จ์”ฌ ๋” ์ž‘์€ ๊ทœ๋ชจ์—์„œ ์™œ ๋‹ค๋ฅธ ์ƒํƒœ ํ™•์ธ ๊ตฌํ˜„์ด ํ•„์š”ํ•œ๊ฐ€์š”? ์ด๋ฏธ ์—ฌ๋Ÿฌ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค๊ณผ 2.2์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@0xRumple ApiController์— ๋Œ€ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์„ ๋œ ์žฅํ™ฉํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋‹ˆ์š”, ๊ธฐ๋ณธ์ ์œผ๋กœ ์—”ํ„ฐํ‹ฐ์— ๋Œ€ํ•œ CRUD API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ผ์€ DAL ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฐ€์ •์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠน์ • ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค๋ฉด 2.2์—์„œ ์ž‘์—…์„ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋ณธ ์œ ํ˜•์ด๋‚˜ ๊ทœ์น™์„ ๋งŒ๋“œ๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@kieronlanning

ํ˜„์žฌ์˜ Id4, OpenIddict๋Š” ๋ถ„๋ช…ํžˆ ์šฐ์ˆ˜ํ•œ OSS ํ”„๋กœ์ ํŠธ์ด๊ณ , ๊ทธ ๋’ค์— MS์˜ ์ง€์›์„ ๋ฐ›๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‚˜์œ ์ผ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์„ ์ง€์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค...? ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์›์˜ ์–‘์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ฒฐ๊ตญ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์ด ๋‚˜์œ ์ผ์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋ฌผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—:

ASP.NET ํŒ€๋„ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ๋œ ์šฉ๋Ÿ‰์œผ๋กœ ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค๋ฅธ ์ผ์—์„œ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๋“ค์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋” ๋งŽ์€ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์–ป๊ธฐ ์œ„ํ•ด ๋” ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ›จ์”ฌ ๋” ๋‚˜์œ ๊ฒƒ์€ Microsoft๊ฐ€ "๊ณต์‹" ํŒจํ‚ค์ง€๋ฅผ ์ถœ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ3์ž ์ƒํƒœ๊ณ„์— ํ”ผํ•ด๋ฅผ ์ž…ํžˆ๊ณ  ์‹ ์ œํ’ˆ์„ ๋‚™๋‹ด์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ํšŒ์‚ฌ๋Š” ๊ธฐ์ˆ ์ ์œผ๋กœ(์ด ๊ฒฝ์šฐ์—๋Š” ๋” ๋‚ฎ์•„์•ผ ํ•จ) Microsoft์—์„œ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ด์œ ๋กœ ์„ ํƒ์— ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค. ์œ ๋Šฅํ•œ. ASP.NET์€ ์ด๋ฏธ Json.NET, Polly, AutoMapper ๋ฐ ๊ธฐํƒ€ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ›Œ๋ฅญํ•œ ์˜ต์…˜์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ๋ณด์•ˆ ์ œํ’ˆ(๋™์ผํ•œ ๊ธฐ๋ณธ ์ฝ”๋“œ์˜ 80%๊ฐ€ ํ•„์š”ํ•จ)์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋กœ๋“œ๋งต์— ๋” ๋งŽ์€ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@์ฐŒ๋ฆ„
๋‚ด ์•ฑ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์ด ํ”„๋ ˆ์ž„์›Œํฌ ์ฑ…์ž„ ๋‚ด์— ์žˆ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

CRUD resources (repository responsibility)

Manipulating data (sieve responsibility)
    Paging
    Filtering
    Searching
    Sorting
    Shaping

๊ทธ๋Ÿฌ๋‚˜ AspNetCore๊ฐ€ AspNetCore.RestFramework ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

  1. HATEOAS(์ž์ฒด ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ API)
  2. ๋ฏธ๋””์–ด ์œ ํ˜•(์‚ฌ์šฉ์ž ์ •์˜ ๋ฏธ๋””์–ด ์œ ํ˜• ์„ค์ •)
  3. ๋ฒ„์ „ ๊ด€๋ฆฌ(๋ฏธ๋””์–ด ์œ ํ˜• ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ)
  4. ์กฐ์ž‘๋œ ๋ฐ์ดํ„ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(X-Pagination ํ—ค๋”๋กœ์˜ ํŽ˜์ด์ง€ ๋งค๊น€, ํ•„ํ„ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋“ฑ).
  5. ์†๋„ ์ œํ•œ ๋ฐ ์กฐ์ ˆ.

๊ฑฐ๊ธฐ์— ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ผ๋ถ€๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. https://github.com/thangchung/awesome-dotnet-core... ํ•˜์ง€๋งŒ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•ฑ์— ์‹ค์ œ๋กœ ์ข‹์€ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค!

์ฒด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ๋งค๊น€, ํ•„ํ„ฐ๋ง ๋“ฑ์„ ์œ„ํ•œ ๊ณต์‹ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด ์•ฑ์—์„œ ์ด ์ฒด๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค: https:// github.com/Biarity/Sieve ํ•˜์ง€๋งŒ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž‘์„ฑ์ž๊ฐ€ ๋ฐ” ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AspNetCore๋Š” django์—์„œ์ฒ˜๋Ÿผ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์„ฑ์ˆ™ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด asp ์„ฑ๋Šฅ ์˜ ๊ณ ๊ธ‰์Šค๋Ÿฌ์›€๊ณผ django ์˜

๊ทธ๋Ÿฌ๋‚˜ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•ฑ์— ์ข‹์€ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค!

^^ ์ด๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์ข‹์€ ๊ฑธ ๊ฐ€์งˆ ์ˆ˜ ์—†์–ด์š” ๐Ÿ˜ž

๊ทธ๋Ÿฌ๋‚˜ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•ฑ์— ์ข‹์€ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค!

๋„ค, ๋ฐ”๋กœ ์—ฌ๊ธฐ์—์„œ ๋ฐ”๋€Œ์–ด์•ผ ํ•˜๋Š” ๋งˆ์Œ๊ฐ€์ง์ž…๋‹ˆ๋‹ค. ASP.NET Core ๋ฐ .NET Core๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ํ•ด๋‹น ์—์ฝ”์‹œ์Šคํ…œ์€ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ _ํฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ณ„์† ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .NET Foundation์˜ ์ผ๋ถ€์ธ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž‘์„ฑ์ž๊ฐ€ ๋ฐ”๋น ์„œ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ "๊ณต์‹์ ์ธ" ํŒจํ‚ค์ง€๋Š” ํšŒ์‚ฌ๊ฐ€ ๊ด€์‹ฌ์„ ์˜ฎ๊ธฐ๋Š” ์ฆ‰์‹œ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฒŒ์‹œํ•œ ์—ฌ๋Ÿฌ ์˜คํ”ˆ ์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด์ „์— Microsoft ํŠน์ • ์ผ์—์„œ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ๋ชจ๋“  ํšŒ์‚ฌ์—์„œ ์ •๋ง ์ž์—ฐ์Šค๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด, ๋‹น์‹ ์ด ๊ทธ์™€ ํ•จ๊ป˜ ์‚ด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ท€ํ•˜์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค. ๊ทธ ์ž‘๊ฐ€๊ฐ€ ๋ˆ„๊ตฌ์ด๋“  ์ƒ๊ด€์—†์ด ๋ง์ด๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์˜ ์ข‹์€ ์ ์€ ์ž‘์„ฑ์ž๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š๋”๋ผ๋„ ์‚ฌ์šฉ์ž ๊ฐ€ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ๊ณต์‹ Microsoft ์†”๋ฃจ์…˜์„ ๊ธฐ๋Œ€ ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•๋ ฅํžˆ ๋ฐ˜๋Œ€ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ๋Šฅ ์†”๋ฃจ์…˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์–ด๋ ต๊ณ  ๋™์‹œ์— ์†์—์„œ ๋ฒ—์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠนํžˆ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ๋ถ€๋ถ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋นผ์•—์•„ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ๊ทธ๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค ์•„์ด๋””์–ด์— ์ •๋ง ๋‚˜์œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค .

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ด NIH ์ฆํ›„๊ตฐ(๋˜๋Š” "<๋Œ€ํ˜• ํšŒ์‚ฌ>์—์„œ ๋ฐœ๋ช…๋˜์ง€ ์•Š์Œ")์œผ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ๋‹ค๋ฉด 2018๋…„์ด๋ฏ€๋กœ ์ด์ œ ๊นจ์–ด๋‚˜์•ผ ํ•˜๋ฉฐ ์ง€๊ธˆ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์ˆ˜์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Microsoft๋Š” ํŒจํ‚ค์ง€ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์†Œํ•œ ํŠน์ • LTS๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://www.microsoft.com/net/support/policy

์˜ˆ๋ฅผ ๋“ค์–ด .NET Core 1.1 ์ง€์›์€ 2019๋…„ 6์›” 27์ผ์— ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค... ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๊ฐ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ ํƒ€์‚ฌ ํŽ˜์ด์ง€ ๋งค๊น€ ํƒœ๊ทธ ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๊ธฐ๋ถ„์ด ์ข‹์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ .NET Core 1.1์šฉ์œผ๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋Œ€ํ•™ ์‹œ์Šคํ…œ์ด์—ˆ์Šต๋‹ˆ๋‹ค. 2.0( ๊ทธ๋Š” ๊ทธ ํŒจํ‚ค์ง€๋ฅผ ๋ฌด๋ฃŒ๋กœ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

์—ฌ๊ธฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์—์„œ๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ 2.0์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ „์ฒด ํŒ€์„ ์„ค๋“ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ!
๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์†Œ์Šค ํ•ดํ‚น์„ ์‹œ์ž‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. https://github.com/cloudscribe/cloudscribe.Web.Pagination/issues/37

๊ทธ๋ฆฌ๊ณ  ๋„ค, ๋ˆ„๊ฐ€ ์ œ๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค์˜ ์—ด๋ ฌํ•œ ํŒฌ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๊นŒ? :confused: ?

@0xRumple ์€ ๊ธฐ์—ฌํ•˜๊ณ  ํ˜‘์—…ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค์˜ ์•„์ด๋””์–ด๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

ํƒ€์‚ฌ ํŽ˜์ด์ง€ ๋งค๊น€ ํƒœ๊ทธ ๋„์šฐ๋ฏธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ "๊ธฐ์—…์—์„œ" ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์—์„œ๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ 2.0์œผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ „์ฒด ํŒ€์„ ์„ค๋“ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ!

"์ „์ฒด ํŒ€์„ ์„ค๋“ํ•˜์—ฌ 2.0์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค๊ณ  ์„ค๋“"ํ•˜๋Š” ๋Œ€์‹ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ Microsoft๊ฐ€ ๋™๋“ฑ๋ฌผ์„ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๋ณด๋‹ค ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ค์‹œ ์ œ๊ณตํ•˜๊ณ  ๋„์›€์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์†Œ์œ ์ž๊ฐ€ ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ๋ฅผ ์ˆ˜๋ฝํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ท€ํ•˜์˜ ํ•„์š”์— ๋”ฐ๋ผ ํฌํฌ๋ฅผ ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

๊ท€ํ•˜์˜ ์‚ฌ๊ณ  ์œ ํ˜•(์ „ํ˜€ ๋ถˆ์พŒ๊ฐ์„ ์ฃผ์ง€ ์•Š์Œ)์ด "Microsoft ์ธ์ฆ ์„œ๋ฒ„"์™€ identityserver์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ๋Š” ์ด์œ ์˜ ํฐ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐธ์—ฌํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? Microsoft๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ?

Microsoft๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด์ ์œผ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์ƒํƒœ๊ณ„์—์„œ ์ข‹์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃฝ์ด์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋งŽ์€ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์‹ค์ œ๋กœ @0xRumple์ด ์–ธ๊ธ‰ํ•œ ํŽ˜์ด์ง€ ๋งค๊น€ taghelper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ž‘์„ฑ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ์˜ ๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ 1.x aspnet ์ฝ”์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์ด์ „ ๋„ˆ๊ฒŸ์ด ์žˆ๋Š” taghelper๊ฐ€ ์•„๋‹Œ pagedlist ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง•๋œ ๋ชฉ๋ก์€ ์‹ค์ œ๋กœ ๋‚ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋””์ž์ธ์„ ์•Œ๋ ค์ฃผ๊ณ  ํ•œ ๋ฒˆ์— ๋ฐ๋ชจ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ๋œ ์ด์ „ ์˜คํ”ˆ ์†Œ์Šค ํ˜ธ์ถœ๊ธฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€์˜€์ง€๋งŒ ํ˜ธ์ถœ๊ธฐ taghelper๋Š” ํŽ˜์ด์ง•๋œ ๋ชฉ๋ก ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ํŽ˜์ด์ง•๋œ ํ˜ธ์ถœ๊ธฐ taghelper๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ตฌํ˜„์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋‚˜๋Š” taghelper์˜ ์ผ๋ถ€๋„ ์•„๋‹ˆ์—ˆ๊ณ  ๊ฒฐ์ฝ” ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํŽ˜์ด์ง€ ๋ชฉ๋ก์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

aspnet core 1.1์— ๊ฐ‡ํžŒ ๊ฒฝ์šฐ ์ƒˆ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๋Š” ํ•œ aspnet core 2.x์—์„œ ์ˆ˜์ • ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์–ป์„ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์—์„œ Microsoft์™€ OSS ๊ฐœ๋ฐœ์ž์˜ nuget ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์‹ค์ œ๋กœ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@joeaudette
๋‚ด์žฅ ์†”๋ฃจ์…˜๊ณผ ํƒ€์‚ฌ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ œ ์š”์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉ๊ธˆ ๊ทธ ์˜ˆ๋ฅผ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํŽ˜์ด์ง€ ๋งค๊น€ ํƒœ๊ทธ ๋„์šฐ๋ฏธ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค... ๋Œ€ํ•™์€ ํŽ˜์ด์ง€ ๋งค๊น€ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค :heart:

@์•Œํ•˜๋””

Microsoft๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ์ฃผ์š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Microsoft๊ฐ€ ๊ณต์‹ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ๋•Œ ๋‹ค๋ฅธ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜๊ณผ ์‹ธ์šฐ๊ฑฐ๋‚˜ ์Šค์Šค๋กœ ๋ชจ๋“  ๋‹จ์ผ ์ฝ”๋“œ ๋ผ์ธ์„ ์ž‘์„ฑํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.์Šค๋งˆ์ผ:

๋ฌผ๋ก  ์•„๋‹™๋‹ˆ๋‹ค. Microsoft๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์„ ์ฑ„ํƒํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๋‹น ์†”๋ฃจ์…˜์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ณต์‹ ์†”๋ฃจ์…˜ ๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜ ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์žฅ์ ์„ ๋ชจ๋‘ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

django ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. RESTful ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์„ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณต/์ฑ„ํƒํ•˜๊ณ  ๊ทธ ์œ„์— ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. django-rest๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„๋ฅผ ์—ฌ๊ธฐ์—์„œ ์‚ดํŽด๋ณด์„ธ์š”. ํ”„๋ ˆ์ž„์›Œํฌ: https://www.djangoproject.com/weblog/2016/jun/22/django-rest-framework-funding/

๊ทธ๋“ค์€ ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ๊ทธ ์œ„์— ๊ฐœ์„ /๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. https://github.com/encode/django-rest-framework... ์•ฝ 800๋ช…์˜ ๊ธฐ์—ฌ์ž๊ฐ€ ์žˆ๋Š” ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค!
๊ทธ๋ฆฌ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” django-rest-auth ๋˜๋Š” django-rest-framework-jwt ์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€ ์œ„์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๋„๋ก ์ฃผ๋„๋ฉ๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ django-admin-site ๋˜๋Š” django-debug-toolbar ์™€ ๊ฐ™์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์š”ํ•œ "๊ณต์‹ ์†”๋ฃจ์…˜"์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "๋ฐฐํ„ฐ๋ฆฌ ํฌํ•จ"์ด๋ผ๋Š” Python ์ฒ ํ•™์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ตœ์†Œ ๊ณตํ†ต ๋ถ„๋ชจ ์†”๋ฃจ์…˜์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋‚˜์ค‘์— ๊ทธ๊ฒƒ์ด ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ”๋žŒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

*PS: Dapper(StackExchange)์™€ EFCore(Microsoft)๋Š” ๋‘˜ ๋‹ค ORM์ด์ง€๋งŒ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Dapper๋Š” 2011๋…„์— ์ฒ˜์Œ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ EFCore 2014๋Š”... EFCore๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋‚˜์œ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๊นŒ? ๋ฌผ๋ก  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉฐ ๊ณต์‹ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค!
https://github.com/crhairr/EntityFrameworkCore.MongoDb/ ์™€ ๊ฐ™์ด ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฏธ ๊ทธ ๋†€๋ผ์šด ๊ฒƒ๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•ํ•˜๊ณ 

EFCore๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋‚˜์œ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๊นŒ?

Uuuh, ๋ˆ„๊ตฌ๋“ ์ง€ NHibernate(๊ธฐ๋Šฅ๋ฉด์—์„œ EF์— ๊ฐ€์žฅ ๊ฐ€๊น๋‹ค)๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ, ์•„๋งˆ ์•„๋‹๊ฑฐ์•ผ, ์™œ๋ƒ๋ฉด EF๊ฐ€ ์ถœ์‹œ๋œ ํ›„ ์ฃฝ์€ ๊ฑฐ๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ˆ๊นŒ ๐Ÿ˜•

@0x๋Ÿผํ”Œ

๋ฌผ๋ก  ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์„ ์ฑ„ํƒํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค๋ฉด ๊ณต์‹ ์†”๋ฃจ์…˜๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜์˜ ๋‘ ๊ฐ€์ง€ ์žฅ์ ์„ ๋ชจ๋‘ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๊ธฐ์กด ์†”๋ฃจ์…˜์„ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์˜๋„์ ์œผ๋กœ ๋” ์ ์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Entity Framework์™€ Dapper๋Š” ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. EF๋Š” ํ•ญ์ƒ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ORM์ด ๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ๋‘˜ ๋‹ค 2007๋…„ ์›๋ž˜

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹น์‹ ์ด ํ‹€๋ ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์„œ๋กœ ๊ณผ๊ฑฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌํ•จํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์ž‘๊ณ  ์ง‘์ค‘๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” REST ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๋™์•ˆ ๋Œ€๋ถ€๋ถ„ ์ธ์ฆ ์„œ๋ฒ„ ์ œํ’ˆ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ํ‘œ์ค€ํ™”๋œ search/paging/filter ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ Web API ์ฝ”๋“œ์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋…ผ์˜๋Š” ์ผ๋ถ€ ์กฐ์ง์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†”๋ฃจ์…˜์— ๋„์ž…๋œ ๋ชจ๋“  ๋‹จ์ผ ์˜คํ”ˆ ์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ์„ค๋ช…ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•œ ์ง„์‹ค์„ ์ธ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋น„๊ธฐ์ˆ ์  ์œ„ํ—˜ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฒ€ํ† ํ•ด์•ผ ํ•˜๋Š” "์œ„ํ—˜" ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž๋™ ์Šค์บ”์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ๊ณผ ์นดํ”ผ๋ ˆํ”„ํŠธ ๋ผ์ด์„ ์Šค์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ํ•ญ๋ชฉ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๋Ÿฌํ•œ ์กฐ์ง์—์„œ ์˜คํ”ˆ ์†Œ์Šค์— ๋‹ค์‹œ ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ด ๋ฏธ์นœ ์ด์•ผ๊ธฐ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Identity Server 4๋Š” ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„๊ธฐ์ˆ ์  ์œ„ํ—˜ ๊ด€๋ฆฌ์ž์—๊ฒŒ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ณด์ฆํ•˜์ง€ ์•Š๋Š” ๊ฒƒ, ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์ง€์›ํ•˜๋Š” ๊ฒƒ, ๋” ๋‚˜์œ ๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์‚ฌ๋žŒ์€ ์ž˜๋ชป ์ธ๋„๋˜์—ˆ์ง€๋งŒ ์ง€์ƒ์˜ ํ‰๋ฒ”ํ•œ ๊ฐœ๋ฐœ์ž๋Š” ์ด ์‹ธ์›€์—์„œ ์ด๊ธฐ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@markrendle์ด ์ ์ ˆํ•˜๊ฒŒ

@edandersen

๊ทธ๋Ÿฌ๋‚˜ ๋น„๊ธฐ์ˆ ์  ์œ„ํ—˜ ๊ด€๋ฆฌ์ž์—๊ฒŒ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ณด์ฆํ•˜์ง€ ์•Š๋Š” ๊ฒƒ, ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์ง€์›ํ•˜๋Š” ๊ฒƒ, ๋” ๋‚˜์œ ๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Microsoft์— ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ IdentityServer ์‚ฌ๋žŒ๋“ค์ด ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋ฉด ์ง€์›์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. OSS๋Š” ๋ฌด๋ฃŒ์™€ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Microsoft์˜ ASP.NET Core ํŒ€์ด "์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค"์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์Šคํฌ์ผ๋Ÿฌ... ๋‹ค ํ•ฉ์น˜๋ฉด 20~30๋ช… ์ •๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ œํ’ˆ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ช‡ ๋ช…๋ฟ์ž…๋‹ˆ๋‹ค.

"๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ"๊ฐ€ ์™œ ๋‚˜์œ์ง€ ์ •๋ง ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Microsoft์˜ ์ด ์ œํ’ˆ์ด ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์•„๋‹ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

@khellang "๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ"๋ฅผ ๋ถ„๋ช…ํžˆ ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ผ์ž…๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์žฅ์—์„œ ์ฃผ์žฅํ•ด์•ผ ํ•˜๋Š” ์ฃผ์žฅ์— ๋†€๋ž„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ "Microsoft๊ฐ€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์ ์€ ๋•Œ๋•Œ๋กœ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ  ์ €๋Š” ๊ฐ€์ƒ์ด์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋Šฅํ•˜์ง€ ์•Š๋Š” ํšŒ์‚ฌ์— ๋Œ€ํ•œ ์•…๋งˆ์˜ ์˜นํ˜ธ์ž ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋™์ผํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ์šฉ์ฃผ๊ฐ€ Identity Server์— ๋Œ€ํ•œ ์ง€์› ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์กฐ๋‹ฌ ํ”„๋กœ์„ธ์Šค๋Š” ์•„๋งˆ๋„ ์ƒ์กด ์˜์ง€๋ฅผ ์•—์•„๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธ€์Ž„, ์šฐ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ ๋น„๊ธฐ์ˆ ์  ๊ด€๋ฆฌ์ž ์ฃผ์žฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ƒํ™ฉ์ด ๋ฏธ์ณ์ง€๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ด ์•„๋‹Œ IMHO๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์‹œํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋ง์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ตœ์†Œํ•œ ๋ฌด์Šจ ๋ง์„ ํ•˜๋Š”์ง€๋Š” ์•Œ์•„์•ผ ํ•˜๊ณ  IdentityServer์™€ ๊ฐ™์€ ์ž˜ ์•Œ๋ ค์ง„ ํŒจํ‚ค์ง€๊ฐ€ MS๋ณด๋‹ค ํ’ˆ์งˆ์ด ๋‚ฎ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ์ €์—๊ฒŒ ๋ช…๋ฐฑํ•œ ์ž˜๋ชป์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ํšŒ์‚ฌ์—์„œ ๋›ฐ๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—์„œ ์š”์ ์€ ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฌด์–ธ๊ฐ€์— ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” ๋ฐ ๋™์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฒฌ๊ณ ํ•˜๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ์ด์ƒํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฉด์˜ ์ง„์งœ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‹จ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค, ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ ์ž์‹ ์˜ ๊ฒƒ์„ ๋งŒ๋“ค์ž. ๊ณ ๊ฐ์ด ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๊นŒ?

๊ฐœ์ธ์ ์œผ๋กœ OAuth-Server ๊ณต๊ฐ„์˜ ๋‹ค๋ฅธ ๊ฒฝ์Ÿ์ž๋ฅผ ๋ฌธ์ œ๋กœ ๋ณด์ง€๋Š” ์•Š์ง€๋งŒ ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค.

์ด ์˜์—ญ์˜ ๊ฐœ๋ฐœ์„ ์ด‰์ง„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ฑฐ๋‚˜ ๊ทธ ์ด์ƒ, ์ฆ‰ ๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์šด ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์šด ์†”๋ฃจ์…˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OAuth ์„œ๋ฒ„์—์„œ ๋” ๋งŽ์€ ๊ฒƒ์„ ์›ํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์šฐ๋ฆฌ ์ค‘ ๋ˆ„๊ตฌ๋„ ๊ธฐ์กด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๊ธฐ๋ณธ OAuth _๊ทธ ์ด์ƒ์€ ํ•˜์ง€ ์•Š๋Š” ์› ํด๋ฆญ ํ…œํ”Œ๋ฆฟ์„ ์›ํ•˜๋ฉด ์ ์–ด๋„ ๋‚˜์—๊ฒŒ๋Š” ์ด๊ฒƒ์ด ๊ฐ€์น˜ ์žˆ๋Š” ๋ชฉํ‘œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” ์ด ์Šค๋ ˆ๋“œ๊ฐ€ .NET Core 2.2์˜ ๋กœ๋“œ๋งต์— ์žˆ๋Š” ๋‚ด์šฉ์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๊ฒƒ๋ณด๋‹ค OSS๊ฐ€ ๋ฌด์—‡์ธ์ง€, MS๊ฐ€ ์ž˜ํ•˜๋Š” ๊ฒƒ๊ณผ ์ž˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋งž๋Œ€๊ฒฐ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@kellang
"NHibernate๋Š” ์ฃฝ์—ˆ๋‹ค"๊ณ  ๋ˆ„๊ฐ€ ๋งํ–ˆ๋Š”๊ฐ€? ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„์ง ์‚ด์•„ ์žˆ๊ณ  ์‹ฌ์ง€์–ด Dapper๋ณด๋‹ค ๋” ๋‚˜์€ ์ถ”์ง„๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๋ด…๋‹ˆ๋‹ค.
https://github.com/nhibernate/nhibernate-core/graphs/contributors
https://github.com/StackExchange/Dapper/graphs/contributors

์•„, ๊ณต์‹ aspcore ํŒจํ‚ค์ง€ ๋‚ด์—์„œ RESTful ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ œ ์š”์ ์„ ๊ณ ์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ๊นŒ์ง€ IdentityServer์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค... ์—ฌ๊ธฐ์— IdentityServer์— ๋Œ€ํ•œ ์ œ ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฒฌ๊ณ ํ•˜๊ณ  ํ›Œ๋ฅญํ•˜์ง€๋งŒ 2์ธ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ธก์ •ํ•ญ๋ชฉ์„ ์‚ดํŽด๋ณด์„ธ์š”.
https://github.com/IdentityServer/IdentityServer4/graphs/contributors

์ž‘์—…์˜ ์•ฝ 85%๋Š” 2๋ช…์ด์„œ ํ•˜๊ณ  ๋ณด์•ˆ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ๋Š” ๊ดœ์ฐฎ์ง€๋งŒ ๊ธฐ์—…์—์„œ๋Š” ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ๋ฏธ๋ž˜์— ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ ํ•œ ํšŒ์‚ฌ์—์„œ "vue.js๋Š” ๊ฑฐ์˜ Evan You"๋ผ๊ณ  ๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ์—์„œ Vus.J ๋Œ€์‹  React๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๊ทธ๋“ค์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๊ณต์‹ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ RESTful ํŒจํ‚ค์ง€๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๋Œ€๊ธฐ์—…๋„ ํ”„๋กœ์ ํŠธ์—์„œ "์ž ์žฌ์ ์ธ" ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  @manigandham์ด ๋งํ–ˆ๋“ฏ์ด ํ‘œ์ค€ํ™”๋˜๊ณ  ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์กฐ์ž‘ / ์ฒด์งˆ(ํŽ˜์ด์ง•, ์…ฐ์ดํ•‘, ์ •๋ ฌ ๋“ฑ)๋„

@manigandham
๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค... ์žฌ์ •์ ์œผ๋กœ๋“  github์„ ํ†ตํ•ด ๊ธฐ์—ฌํ•˜๋“  ์ตœ์†Œํ•œ ๋ฌธ์„œ๋‚˜ ๊ณผ์ •์—์„œ ์–ธ๊ธ‰ํ•˜๋“  ๊ณต์‹์ ์œผ๋กœ ์†”๋ฃจ์…˜์„ ์กฐ์ •ํ•˜๊ณ  ์ง€์› ํ•ฉ๋‹ˆ๋‹ค. ์•„์นด๋ฐ๋ฏธ๋Š” ์ •๋ง ํ›Œ๋ฅญํ•˜๊ณ  ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ์— ๋” ๋งŽ์ด ์ ์‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!).

@kieronlanning
๋‹น์‹  ๋ง์ด ๋งž์•„, ์šฐ๋ฆฌ๋Š” ์ฃผ์š” ์ฃผ์ œ์—์„œ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ ๊ฐ”๋‹ค ... ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด asp ์ฝ”์–ด๋Š” ์ด์ œ ๋ง‰ ๋งค์šฐ ์„ฑ์ˆ™ํ•ด์กŒ๊ณ  (์„ฑ๋Šฅ ๋ฐ ์‹ ๋ขฐ์„ฑ), ์ด์ œ ์™ธ๋ถ€ ์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•  ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

๋‘ ๋ช…์˜ ์ฃผ์š” ๊ธฐ์—ฌ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ๋ฅผ ํ• ์ธํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ฆฌ์„์€ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. IS4๋Š” ๋งค์šฐ ์ž˜ ๊ด€๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ทธ ๋‘ ์‚ฌ๋žŒ์€ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์„ ๋•๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹œ์žฅ์—์„œ OAuth2 ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ์ตœ๊ณ ์˜ FOSS ์†”๋ฃจ์…˜ ์ค‘ ํ•˜๋‚˜๋กœ ๋„๋ฆฌ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

"NHibernate๋Š” ์ฃฝ์—ˆ๋‹ค"๊ณ  ๋ˆ„๊ฐ€ ๋งํ–ˆ๋Š”๊ฐ€? ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„์ง ์‚ด์•„ ์žˆ๊ณ  ์‹ฌ์ง€์–ด Dapper๋ณด๋‹ค ๋” ๋‚˜์€ ์ถ”์ง„๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๋ด…๋‹ˆ๋‹ค.

@0xRumple ๋‚˜๋Š” "์ฃฝ์€ ๊ฒƒ๋งŒํผ ์ข‹๋‹ค"๊ณ  ๋งํ–ˆ๋‹ค ๐Ÿ˜‰ ๋‹น์‹ ์€ OSS ํ”„๋กœ์ ํŠธ์˜ ์ƒํƒœ์™€ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ๋งค์šฐ ์ด์ƒํ•œ ์ง€ํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 2003๋…„ ํ”„๋กœ์ ํŠธ์˜ ์ปค๋ฐ‹ ์ˆ˜์™€ 2011๋…„ ์ดํ›„ ์ง„ํ–‰ ์ค‘์ธ ์ปค๋ฐ‹ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ๊ณต์ •ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ๋˜ํ•œ _๋งค์šฐ_ ๋‹ค๋ฅธ ์ง์Šน์ž…๋‹ˆ๋‹ค(์•ž์„œ ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด). Dapper๋Š” ํ•œ๋™์•ˆ "์™„๋ฒฝ"(์œ ์ง€๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฒ„๋ ค์ง„ ๋“ฑ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Œ)๋œ ๋ฐ˜๋ฉด NHibernate(๋ฐ ํ•ด๋‹น ๊ธฐ๋Šฅ ์„ธํŠธ)๋Š” ๋’ค์ณ์ ธ ์™”์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ง€๋‚œ 7๋…„ ๋™์•ˆ .NET ๋ถ„์•ผ์—์„œ ์ปจ์„คํŒ…์„ ํ•˜๋˜ ์ค‘ ๋งˆ์ง€๋ง‰์œผ๋กœ NHibernate๋ฅผ ์•ผ์ƒ์—์„œ ๋งŒ๋‚ฌ๋˜ ๋•Œ๊ฐ€ ์–ธ์ œ์˜€๋Š”์ง€ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Entity Framework๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋จ). ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ์ด ๊ณต๊ฐ„์„ ์ง€์ผœ๋ณธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์€ NHibernate๊ฐ€ Entity Framework์— ๋’ค์ณ์ ธ ์‹œ์žฅ ์ ์œ ์œจ์„ ์žƒ์–ด๊ฐ€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•„์ฃผ ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. NuGet ๋‹ค์šด๋กœ๋“œ ์ˆ˜๋งŒ ๋ณด์„ธ์š”. Entity Framework์—๋Š” 45.8M์ด ์žˆ๊ณ  NHibernate์—๋Š” 3.4M์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์š”์ ์€ Entity Framework ๋Œ€ NHibernate๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ _ํ•˜๋‚˜์˜_ ์˜ˆ์˜€์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ํ† ๋ก ์„ ๊ณ„์†ํ•ด์„œ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ตœ๊ทผ์— Microsoft๊ฐ€ ASP.NET Core์—์„œ ์ž์ฒด ๊ฒฝ๋Ÿ‰ IoC ์ปจํ…Œ์ด๋„ˆ ๊ตฌํ˜„์„ ๋กค๋งํ•˜๊ฑฐ๋‚˜ Microsoft๊ฐ€ ์ž์ฒด ๊ฐœ์ฒด ๋งคํผ ๋กค๋ง์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ. ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ OSS ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ•œ ๊ณต๊ฐ„์— ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค, ๊ทธ๊ฒƒ์€ ๊ทธ ๊ณต๊ฐ„์—์„œ ๋งŽ์€(๋Œ€๋ถ€๋ถ„?) ๊ณต๊ธฐ๋ฅผ ๋นจ์•„๋“ค์ž…๋‹ˆ๋‹ค. ์ข…์ข… ์†Œ๊ทœ๋ชจ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ๋„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์งˆ์‹ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์™€ ๋Œ€๋ถ€๋ถ„์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ด ์‚ฌ์‹ค์„ ๋„ˆ๋ฌด ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Microsoft ์ž์ฒด(.NET) ์„ธ๊ณ„์—์„œ Microsoft์™€ ๊ฒฝ์Ÿํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ์œ ๋ฃŒ ๊ณ ๊ฐ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•˜๋ฏ€๋กœ ์ด ํ”ผ๋“œ๋ฐฑ์ด ๊ทธ๋“ค์˜ ๋งˆ์Œ์„ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :์Šค๋งˆ์ผ:

๋ฉ‹์ง„ ๊ธฐ๋Šฅ :)

์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ์–ด๋””์—์„œ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ ๊ด€๋ฆฌ ๊ฐœ์„ 

์—ฐ๊ฒฐ๋œ ์›น API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์›น ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์‚ฌ๋‚ด ์‚ฌ์šฉ์ž์™€ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•œ ์‹œ์ ์ด ์˜ต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹จ์œ„, ๊ธฐ๋Šฅ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ธ๊ฐ„๋งŒํผ ์ข‹์€ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค๋Š” ์ •์‹ ์œผ๋กœ ๋‚ด ์›น ์•ฑ์€ ์—ฌ๋Ÿฌ ์›น API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค์—์„œ๋Š” https://localhost ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์›น API๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.. ์›น API๊ฐ€ ์ค€๋น„๋˜๋ฉด(์ถฉ๋ถ„ํžˆ) ๋กœ์ปฌ ์ปดํ“จํ„ฐ์˜ IIS์— ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์‚ฌ์ดํŠธ์—๋Š” ๋‚ด๋ถ€ DNS ์„œ๋ฒ„์— ์„ค์ •ํ•œ ์ ์ ˆํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ Barry Dorrans' - @blowdart - gist https://gist.github.com/blowdart/1cb907b68ed56bcf8498c16faff4221c ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ๋ชจ๋“  ์˜ฌ๋ฐ”๋ฅธ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์•Œ๋žŒ ์—†์ด ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์›น ์•ฑ์— ์•ก์„ธ์Šคํ•  ๋•Œ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค(API ํ˜ธ์ถœ์€ ๋ชจ๋‘ ๋‚ด ๊ฐœ๋ฐœ ์ƒ์ž ๋‚ด์— ์žˆ์Œ). ์‚ฌ์šฉ์ž๊ฐ€ ์‹ฌ๊ฐํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์—๊ฒŒ ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๊ฐ€๋Šฅํ•˜๊ณ  ์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž์ฒด ์„œ๋ช…๋œ ์ธ์ฆ์„œ์—๋Š” ๋™์ผํ•œ ๋ฐœ๊ธ‰์ž ์ด๋ฆ„๊ณผ ์ผ๋ฐ˜ ์ด๋ฆ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์ƒˆ ์›น ์•ฑ์€ ๊ฒฝ๊ณ  ํŽ˜์ด์ง€๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์กฐ์ง์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ  ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์œ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹Œ ์ œ๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‚ด๊ฐ€ ์ƒ์„ฑํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ๋กœ์ปฌ ๋ฃจํŠธ ์ธ์ฆ์„œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์ด๋ฅผ PC, Mac, Android, iPad ๋ฐ iPhone ์žฅ์น˜๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์Šน์ธ๋œ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ  ํŽ˜์ด์ง€๊ฐ€ ๋” ์ด์ƒ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ

  • ๋ชจ๋“  ์˜ฌ๋ฐ”๋ฅธ ์ธ์ฆ์„œ ์ €์žฅ์†Œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฑ„์šฐ๋Š” Kestrel ๋ฐ IIS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” API์šฉ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•

@CrispinH ๋ฃจํŠธ CA๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ๋ฃจํŠธ CA๋ฅผ ํšŒ์ „์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์‹œ์ ์— ์žˆ๋‹ค๋ฉด ๋ฃจํŠธ CA๋ฅผ ์ง์ ‘ ๊ฐ€๋™ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ์ž์ฒด ์„œ๋ช…๋œ ์ง€์›์€ ๊ธ€๋กœ๋ฒŒ ๋„๊ตฌ๋‚˜ ๋‚ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ฒจ๋ถ€ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ์กฐ์ง์— ์žˆ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์กฐ์ง์€ Windows ๋˜๋Š” OpenSSL์„ ํ†ตํ•ด ๋‚ด๋ถ€ CA๋ฅผ ์‹คํ–‰ํ•˜๊ณ  AD ์ •์ฑ… ๋˜๋Š” ๊ธฐํƒ€ ์ˆ˜๋‹จ์„ ํ†ตํ•ด ๋ฃจํŠธ๋ฅผ ๋ฐ€์–ด๋‚ด๋Š” ์ธ์ฆ์„œ ์ „๋žต์„ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@blowdart ๋‚ด๊ฐ€ ๋ถˆ๋งŒ์„ ํ’ˆ์€ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฃจํŠธ CA๋ฅผ ๊ฐ€๋™ํ•˜๋Š” ๋ฐ ๋ฉฐ์น ์„ ๋ณด๋ƒˆ๊ณ  ์ด ์˜์—ญ์— ๋Œ€ํ•œ ์—ญ๋Ÿ‰์ด ๋ถ€์กฑํ–ˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋ฃจํŠธ CA๋ฅผ ์ˆ˜๋ฝํ•˜๋„๋ก ์š”์ ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์ฐพ์€ ๋ชจ๋“  ๋ฌธ์„œ๋Š” ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋กœ์ง€ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋กœ API์™€ ์›น ์•ฑ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ฆ์„œ(์ด์ƒ์ ์œผ๋กœ๋Š” ๋ฃจํŠธ CA ๊ธฐ๋ฐ˜)๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜€์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํŠน์ •ํ•œ ๊ฒฝ์šฐ์˜ ๋ฌธ์„œ๊ฐ€ ํ•„์š”ํ•œ ์ „๋ถ€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@CrispinH Window Server๋Š” ์ธ์ฆ ๊ธฐ๊ด€ ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฉฐ, ์™„์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์›ํ•  ๊ฒฝ์šฐ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ฆ์„œ๋Š” ์‰ฌ์šด ์ฃผ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๋ฐ”๋กœ ๊ทธ๊ฒƒ์„ ํ•  ๊ฝค ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ชฉ์ ์„ ์œ„ํ•ด ์ž์ฒด ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋Š” ์™„์ „ํžˆ ํ›Œ๋ฅญํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. CA ์„ค์ • ๋ฐ ๊ด€๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ทธ ๋ฐ–์˜ ๋ชจ๋“  ๊ฒƒ์€ ๋” ์ด์ƒ ๊ฐœ๋ฐœ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ฉฐ ํ™•์‹คํžˆ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋น„ํ•ด ๋„ˆ๋ฌด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

@CrispinH @poke๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ œ๋Œ€๋กœ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ CA๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ์‹œ์Šคํ…œ์ด ์žˆ์œผ๋ฉด ๋ฐœ๊ธ‰๋œ ๋ชจ๋“  ์ธ์ฆ์„œ๊ฐ€ ์‹ ๋ขฐ๋˜๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๋ฐœ ์ƒ์ž์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฒฐ๊ตญ nuget ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฃจํŠธ CA๋ฅผ ํ›”์น˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ƒํ™œ์—์„œ ๋ฃจํŠธ CA๋Š” ์˜คํ”„๋ผ์ธ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฉฐ, ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ, ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ์ œํ•œ๋œ ๋‘ ๋ฒˆ์งธ ์ธ์ฆ์„œ์— ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํƒ€ํ˜‘์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. CA๋ฅผ ๋”์ฐํ•˜๊ฒŒ ๋ชจ์š•ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹คํ–‰ํ•ด์•ผ ํ•  ์ผ์ด ์•„๋‹ˆ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ดํ•ดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋Š” ๋”์ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ธ์ฆ์„œ ๊ต์ฒด, ํ•ด์ง€, OCSP ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ธ์ฆ์„œ ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ CA๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊บผ์ ธ ์žˆ๋Š” VM์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋” ๋งŽ์€ ์‹œํ—˜ ์ธ์ฆ์„œ๋ฅผ ์–ป์„ ๋•Œ ๊ทธ๊ฒƒ์„ ์ผค ๋•Œ ๋งค์šฐ ๊ธด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ง„์ •์œผ๋กœ ์ด ๋ฃจํŠธ(๋ง์žฅ๋‚œ ์˜๋„)๋กœ ๋‚ด๋ ค๊ฐ€๊ณ  ์‹ถ๋‹ค๋ฉด https://infiniteloop.io/powershell-self-signed-certificate-via-self-signed-root-ca/ ๊ฐ€ powershell์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CRL ๋˜๋Š” OCSP ๋˜๋Š” ํ•ด์ง€ ์ง€์›์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://gist.github.com/Soarez/9688998 ์€ OpenSSL์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. CRL์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Windows์— CA๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์€ https://leastprivilege.com/2008/08/14/how-to-build-a-developmenttestdemo-ca/์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

_๋‚˜๋Š” ์œ„์˜ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ(๋งˆ์ง€๋ง‰ ๋งํฌ์˜ ์ž‘์„ฑ์ž๋ฅผ ์‹ ๋ขฐํ•˜์ง€๋งŒ) ์ด๊ฒƒ์€ ์–ด๋–ค ํ˜•์‹์˜ ๊ณต์‹ MSFT ๊ถŒ์žฅ ์‚ฌํ•ญ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ASP.NET ๋ณด์•ˆ ํŒ€์˜ ๊ณต์‹ ๊ถŒ์žฅ ์‚ฌํ•ญ์€ ์ธํ”„๋ผ์™€ ์œ„ํ—˜์„ ์ดํ•ดํ•˜๋Š” ์‚ฌ๋žŒ์ด ํšŒ์‚ฌ CA๋ฅผ ์„ค์ •ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. IT ๋ถ€์„œ์— ๋ฌธ์˜ํ•˜์„ธ์š”_

@blowdart ์•„๋‹ˆ์š”, ์ €๋Š” ์ •๋ง _๊ทธ '๋ฃจํŠธ'๋กœ ๋‚ด๋ ค๊ฐ€๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์ด์ œ ์•Œ ์ˆ˜ ์žˆ์–ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚ด ํœด๋จธ๋…ธ์ด๋“œ ํ…Œ์ŠคํŠธ๋Š” Let's Encrypt ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ ํ˜ธ์ŠคํŠธ์˜ ๊ณต์šฉ ์ธํ„ฐ๋„ท์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜์ง€๋งŒ, ์—ฟ๋ณด๋Š” ๋ˆˆ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ ๋ฒฝ์ด ์žˆ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ํ•ญ๋ชฉ๊ณผ ์˜ˆ์‚ฐ์— ๋”ฐ๋ผ DigiCert์™€ ๊ฐ™์€ ์ผ๋ถ€ ํšŒ์‚ฌ๋Š” ๊ด€๋ฆฌํ˜• PKI ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ ๋ฃจํŠธ ๋˜๋Š” ๊ณต๊ฐœ ๋ฃจํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„์šฉ์€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

HTTPS๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  azurewebsites.net ํ•˜์œ„ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

IdentityServer4์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋…ธ๋ ฅ์„ ๋ฐฐ์šฐ๊ณ  ์ˆ˜์šฉํ•˜๊ณ  ์ฐธ์—ฌํ•˜๊ณ  ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๋„ˆ๊ฒŸ ๋ฐ ์„ค์ •์—์„œ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋…์ฐฝ์ ์ธ IdentityServer "Lite" ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ตฌํ˜„ ๋Œ€์‹  ์ƒˆ๋กœ์šด OpenID ๊ตฌํ˜„์— ๋ฌด๊ฒŒ๋ฅผ ๋‘ก๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๋ชจ๋‘ ๊ณผ๋ฏผ ๋ฐ˜์‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ASP.NET ํŒ€์€ ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @DamianEdwards ๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์˜ Community Standup์—์„œ

๋‹ค์Œ์€ ๊ฐ€์žฅ ๊ด€๋ จ์„ฑ์ด ๋†’์€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ๋ชจ๋‘ ๋“ค์–ด๋ณด๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค).

"์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ง€๊ธˆ IdentityServer ์‚ฌ๋žŒ๋“ค๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."
https://youtu.be/Tzh2EXwgEk8?t=25m15s

"MSFT ์ธ์ฆ ์„œ๋ฒ„" ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ํ† ๋ก ์ด ์–ผ๋งˆ๋‚˜ ์—ด์ •์ ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ํฅ๋ฏธ๋กœ์šด ์ผ์ž…๋‹ˆ๋‹ค.

๋ง๋ถ™์—ฌ์„œ, Vittorio Bertocci๋Š” ์ด ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ฐ˜์œผ๋กœ OpenIddict(๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” OIDC ์„œ๋ฒ„)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ 2๋…„ ์ „์— ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด ์ €์—๊ฒŒ ์—ฐ๋ฝํ–ˆ์Šต๋‹ˆ๋‹ค.
์ž‘๋…„์— ๋‚˜๋Š” ๊ทธ๋“ค์ด ๋น„์ฆˆ๋‹ˆ์Šค ๊ด€์ ์—์„œ (๋‚ด๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š”) ๋•Œ๋ฌธ์— ํƒ€์‚ฌ OSS๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋Œ€์‹  ์ž์ฒด ๊ตฌํ˜„์„ ์„ ํ˜ธํ•œ๋‹ค๋Š” ๋ง์„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์Œ์ด ๋ฐ”๋€Œ๊ณ  ๋งˆ์นจ๋‚ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋งŒ๋“œ๋Š” ๋Œ€์‹  IdentityServer4์™€ ๊ฐ™์€ ๊ธฐ์กด OSS ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. .NET ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋ณด๋‚ธ ์•„์ฃผ ์ข‹์€ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค. ๋ฐ•์ˆ˜:

์ด๊ฒƒ์€ ์Šค๋ ˆ๋“œ์—์„œ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚˜์ง€ ๋งŒ https://stackoverflow.com/questions/51123289/how-to-generate-a-response-to-a-csr- in-net-core-ie-to-write-a-csr-signing-se. .NET Core 2.0์—๋Š” ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. CA ์‹คํ–‰์— ๋Œ€ํ•œ ์„ค๋ช…๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„๊ตฌ๋Š” ๊ฑฐ์˜ ์กด์žฌํ•˜๋ฉฐ ์กฐ์ง์— ๋”ฐ๋ผ ๋งŽ์€ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ผ๋ถ€ ์„œ๋ฒ„์—์„œ ์ผ๋ถ€ ์ œ์–ด๋œ ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ† ํฐ์—์„œ JSON-LD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ(DER ์ธ์ฝ”๋”ฉ๋œ) ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(CSR)์„ ์ฝ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋งŽ์€ ์•”ํ˜ธํ™”. :)

Windows์˜ App Services, Azure์˜ Linux ๋ฐ Docker์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” LetsEncrypt ์ง€์›๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@kieronlanning ์•ž์„œ ์–ธ๊ธ‰ํ•œ CSR ์„œ๋ช…๊ณผ ๊ด€๋ จ๋œ DER ์ธ์ฝ”๋”ฉ ์™ธ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค(์—์ง€ ์ผ€์ด์Šค ์—†์ด ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์›Œ ๋ณด์ด์ง€๋Š” ์•Š์ง€๋งŒ). .NET์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ์ง€๋งŒ(Let's Encrypt ํŽ˜์ด์ง€์—๋„ ๋‚˜์™€ ์žˆ์Œ) ์•ฝ๊ฐ„์˜ ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Let's Encryptc์™€ ๊ด€๋ จํ•˜์—ฌ ๊ฐ€์žฅ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š” .NET์€ Certes ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ BouncyCastle ์— ์ข…์† ๋ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ .NET Standard 2.0 ์ „์šฉ์ด ๋˜๋„๋ก ๋„์™€์ค€๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ํ•œ ๊ฐ€์ง€ ์ด์œ ๋Š” BouncyCastle์ด Orleans TaskScheduler ์™€ ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. :)

์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ASP.NET Core ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์•”ํ˜ธํ™” ์–ธ๊ธ‰์— ๋Œ€ํ•ด MS๋Š” ๋ธ”๋ก์ฒด์ธ์„ ๋งŽ์ด ์ถ”์ง„ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ .NET์€ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. _ํ‘œ๋ฉด์ ์œผ๋กœ_ ์ด ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด ASP.NET ์ฝ”์–ด์™€๋„ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ(์˜ˆ: https://etherscan.io/์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ธ”๋ก์ฒด์ธ ํƒ์ƒ‰๊ธฐ ๊ตฌํ˜„) Inferno์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”Œ๋žซํผ์— ๊ตฌ์šด ๋” ๋งŽ์€ ๊ธฐ๋Šฅ. ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ๋Š” https://github.com/sdrapkin/SecurityDriven.Inferno/issues/10#issuecomment -395778931์— ์žˆ์Šต๋‹ˆ๋‹ค(๋ˆ„๊ตฐ๊ฐ€ ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฌ๊ธฐ์— ๋ˆˆ์„ ๋นŒ๋ ค์ฃผ์„ธ์š”).

@kieronlanning์˜ ์ด๊ฒƒ์ด ์ €์˜ ๊ฐ€์žฅ ํฐ ๊ธฐ๋Šฅ ์š”์ฒญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"LetsEncrypt์— ๋Œ€ํ•œ ์ง€์›๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."

๋‹ค์Œ์€ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค: https://github.com/aspnet/Home/issues/1190. ๊ฐ€์„œ ํˆฌํ‘œํ•ด ์ฃผ์„ธ์š”.

SignalR๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ์˜ asp.net ์ฝ”์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” messagepack์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๊นŒ? Http2 ํ”„๋ ˆ์ด๋ฐ์€ ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ํŒฉ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฏธ๋ฆฌ๋ณด๊ธฐ3์—์„œ ์ธ์ฆ ์„œ๋ฒ„ ์ถœ์‹œ?

์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Https://IdentityServer.io

@์ตœ์†Œ ๊ถŒํ•œ
IdentityServer๋ฅผ ์ข‹์•„ํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Microsoft ๊ตฌํ˜„์„ ๋ณด๊ณ  ์™œ (microsoft)๊ฐ€ ํ•ต์‹ฌ์— identityserver๋ฅผ ํ†ตํ•ฉํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@danroth27 - ์ตœ์‹  ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Microsoft๋Š” IdentityServer๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? Microsoft๋Š” IDS4 ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? Microsoft๋Š” IDS4 ๊ธฐ๋Šฅ์„ ์ถ•์†Œํ•ฉ๋‹ˆ๊นŒ? ์—ฌ๊ธฐ ๋ชจ๋ธ์ด ๋ญ์—์š”? ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋“ค ์‚ฌ์ด์— ๊ฐ€๋Šฅํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

Microsoft๋Š” ํ‘œ์ค€ nuget ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ตฌ์„ฑ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ ๋ฐ ASP.NET ID์™€ ์ž˜ ์–ด์šธ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์„ค์ •์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹ค์•ผ.

์˜ค๋Š˜๋‚  ์ด๋ฏธ ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ์„ฑ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ ์ €์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์ธ์ฆ ์„œ๋ฒ„์˜ ๊ณต๋ฐฑ์ด IdentityServer4๋กœ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ๊ณ  ๊นœ์ง ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋‚ด ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด IdentityServer์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๋Š” ์ธ์ฆ์ด ์•„๋‹ˆ๋ผ ์ธ์ฆ์ž…๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ IdentityServer๋Š” ์ธ์ฆ ์„œ๋ฒ„๋กœ ๊ดœ์ฐฎ์ง€๋งŒ ์ธ์ฆ ์„œ๋ฒ„๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด PolicyServer๋ฅผ ๋งŒ๋“  ์ด์œ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@leastprivilege IdentityServer๊ฐ€ PolicyServer์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๊นŒ?

@Ruard ๊ทธ๋ž˜์„œ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค (Dominick์€ ์•„๋งˆ๋„ ์„ค๋ช…์„

OAuth๋Š” ์ธ์ฆ์ด์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋ฒ”์œ„ ๋“ฑ์— ๋”ฐ๋ผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋žฉํ•‘์—์„œ Identity Server๋Š” ๋กœ๊ทธ์ธ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์ดˆ๊ธฐ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ์„ฑ๊ณต), ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ† ํฐ์„ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋‹ค์‹œ ์ „๋‹ฌํ•˜๊ณ , ํ† ํฐ์€ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  API๋กœ ์ „์†ก๋˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ API ๋‚ด์—์„œ ๊ถŒํ•œ ๋ถ€์—ฌ ๊ทœ์น™์œผ๋กœ ๋” ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OIDC๋Š” ์•ฑ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ถŒํ•œ์„ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์‹ ์› ์ •๋ณด๋ฅผ ํš๋“ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ OIDC๋ฅผ ๋”์šฑ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค...

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ Identity Server๋Š” ์•ฑ์ด ์ด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ID๋ฅผ ์ œ๊ณตํ•˜๊ณ  ASP.NET์˜ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MichelZ ์„ฑ์žฅ ์Šคํ† ๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•  ๊ฒƒ์ด๋ฉฐ, ์ผ๋‹จ ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด IdentityServer ๊ตฌ์„ฑ ๋ชจ๋ธ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@blowdart ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ IdentityServer๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ธฐ๋Šฅ์— ๊นŠ์€ ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค!). ๊ทธ๋Ÿฌ๋‚˜ Microsoft์˜ "์žฅ๊ธฐ ์ง€์›" ์ •์ฑ…์˜ ์ด์ ์„ ์–ป๋Š” ๊ฒƒ๋„ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์—์„œ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋„ˆ์ง€ ํšจ๊ณผ๊ฐ€ ๋ฌด์—‡์ด๋“  ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ASP.NET Core์™€ IdentityServer(4) ๋‘ ์ œํ’ˆ์„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. IMHO.
๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ์ด ์ •ํ™•ํžˆ "์ง์ ‘์ ์ธ" ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ๋„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋‹น์‹ ์ด ์ดํ•ดํ•˜๋Š” ๋กœ์ผ“ ๊ณผํ•™์ด ์•„๋‹ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ง์„ ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ •๋ง ๊ฐ„๋‹จํ•œ ํ”„๋กœํ† ์ฝœ์„ ๋ฐœ๋ช…ํ•˜๊ณ  ๋ชจ๋“  ๋ ˆ๊ฑฐ์‹œ ๊ตฌํ˜„์„ ๋’ค๋กœํ•˜๊ณ  ๋ฏธ๋ž˜์— ์ง‘์ค‘ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์šฉ๋„๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

File New > Web API with Individual Authentication์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ๋‹ค๋ฅธ API๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ ๋ชจ๋“  ๊ฒƒ์ด ์ปจ๋ฒค์…˜ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ๊ทœ์น™์ด ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์•ฑ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ตฌ์„ฑ์„ ์šฐ๋ฆฌ์˜ ๊ตฌ์„ฑ์œผ๋กœ ๊ต์ฒดํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. :)

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ •๋ง ๊ฐ„๋‹จํ•œ ํ”„๋กœํ† ์ฝœ์„ ๋ฐœ๋ช…ํ•˜๊ณ  ๋ชจ๋“  ๋ ˆ๊ฑฐ์‹œ ๊ตฌํ˜„์„ ๋’ค๋กœํ•˜๊ณ  ๋ฏธ๋ž˜์— ์ง‘์ค‘ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์•ฑ์ด ์ ์  ๋” ๋ณต์žกํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์•ˆ๋„ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์‚ฌ๋žŒ๋“ค์ด IdentityServer๊ฐ€ ๋ณต์žกํ•˜๋‹ค๋Š” ๋ง์„ ๋“ค์„ ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ๋’ค๋กœ ๋ฌผ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ข…์ข… ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ž‘๋™ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Microsoft๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ๊ธฐ์ˆ ์„ "๋ณด์ฆ"ํ•˜๊ณ  ๊ถ๊ทน์ ์œผ๋กœ "์ง€์›"ํ•  ๋•Œ (์•„๋งˆ๋„) ์ถ”๊ฐ€ ๋ณด์ฆ์€ ์ˆœ๊ธˆ์ž…๋‹ˆ๋‹ค.... !
๋‹น์‹ ์€ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ฐจ์›์œผ๋กœ ์˜ฌ๋ผ๊ฐ”์Šต๋‹ˆ๋‹ค!

@brockallen ์˜ˆ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์•„๋งˆ๋„ ๋งŽ์€ ๊ฒƒ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ OIDC ํ”„๋กœํ† ์ฝœ์€ OAuth 2.0์—์„œ ์ผ๋ถ€ ๋‚ด์šฉ์„ ์ƒ์†๋ฐ›์•˜์œผ๋ฉฐ, ์ด ํ”„๋กœํ† ์ฝœ์ด ๋” ์ข‹์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ํŒ€์›(@leastprivilege๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค)์€ OIDC๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๋œ๋‹ค๋ฉด ์ง€๊ธˆ๊ณผ ์ƒ๋‹นํžˆ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ผ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด "๋‚˜์˜๋‹ค"๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ์— ์ •๋ง ๊ฐ์‚ฌํ•˜๋ฉฐ ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์— ์ •๋ง ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ด€๋ จ๋œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋“ค์ด ํ•œ ์ผ์„ ์ž๋ž‘์Šค๋Ÿฌ์›Œํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

@ํŒ€;
๋ฏธ๋ฆฌ๋ณด๊ธฐ 3์˜ ๊ฒฝ์šฐ "์ธ์ฆ ์„œ๋ฒ„"์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ธ๋ถ€ ๋ฌธ์„œ์™€ Vue์™€ ๊ฐ™์€ ์›น API ๋ฐ ํด๋ผ์ด์–ธํŠธ ์ธก JS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ฒฐ์ •์„ ๋‚ด๋ ค์•ผ ํ•˜๋ฉฐ Authorization Server์˜ ์ด ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋Š” ์ค‘์š”ํ•œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์ด๋ฉฐ ๋ชจ๋“  ์„ธ๋ถ€ ๋ฌธ์„œ์—์„œ ๊ฒฐ์ •์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

์•ž์„œ ๋…ผ์˜ํ•œ ๋ฐ”์™€ ๊ฐ™์ด

https://identityserver.io

๋ฐฉ๊ธˆ US ์˜คํ”ˆ ๋ฐ์ดํ„ฐ API๊ฐ€ JSON-LD์— ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. https://project-open-data.cio.gov/v1.1/schema/ . ์ด๊ฒƒ์€ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ์ถ”์„ธ์ด๋ฏ€๋กœ ASP.NET๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ํ’๋ถ€ํ•œ JSON-LD .NET ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

@veikkoeeva NuGet API๋„ (์ ์–ด๋„ ์ผ๋ถ€) json-ld.net์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@khellang ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(https://github.com/linked-data-dotnet/json-ld.net/issues/26). ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜คํ”ˆ ์†Œ์Šค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๊ณ  ์ด๋ก ์ ์œผ๋กœ ๋‚ด๊ฐ€ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ ์–ด๋„ ๋‹น๋ถ„๊ฐ„์€ ์ด๊ฒƒ์„ ๋•๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์–‡์•„์ง‘๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด, ๋งŽ์€ ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์˜๋ฏธ ์ฒด๊ณ„ ํ˜•์‹์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  .NET์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

IMHO, ASP.Net Core์˜ ์ฝ”์–ด์— IdentityServer4๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.
.NetCore๋ฅผ ๋ชจ๋†€๋ฆฌ์‹ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋งŒ๋“ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
.NetCore๊ฐ€ ์žˆ๊ณ  IdentityServer4๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์ž์‹ ์˜ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

@mikeandersun ๊ณ„ํš์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ IdSrv๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ง์ ‘ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ์— ํฌํ•จํ•  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ASP.NET Core๋ฅผ ๋ชจ๋†€๋ฆฌ์‹์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ASP.NET Core != .NET Core btw.

2.2๋Š” LTS ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๊นŒ? (์ด๋ฏธ ๋ฐœํ‘œ๋๋Š”์ง€ ๋ฌป๋Š” ๊ฒƒ์ด์ง€ ์ƒˆ๋กœ ๋ฐœํ‘œํ•˜๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.)

@yzorg ์•„๋‹ˆ์š” ๋ฐœํ‘œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ์ •์€ ์ข…์ข… ํ’ˆ์งˆ/์•ˆ์ •์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถœ์‹œ ํ›„์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

@blowdart , ์ด ํ…œํ”Œ๋ฆฟ์€ API ๋Œ€์‹  ์›น ์•ฑ MVC ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๋Š” ID ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?

@Ponant ์•„๋‹ˆ์š”. API ์ „์šฉ์ž…๋‹ˆ๋‹ค. 3.x ํƒ€์ž„๋ผ์ธ์—์„œ ์ด๋ฅผ ์žฌํ‰๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค... ์ด ์งˆ๋ฌธ์€ ์–ด์ œ ํšŒ์˜์—์„œ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. Web API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์™„์ „ํ•œ "MVC" ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•œ๋‹ค๋ฉด 2.2์— ํ†ตํ•ฉ๋œ ์ƒˆ๋กœ์šด ASP.Net 2.2 IS4 ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์‚ฌ์žฅ(๋ฐฐ๋ฆฌ)์ด ๋ฐฉ๊ธˆ ์งˆ๋ฌธ์— ๋‹ตํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@blowdart allias ํฐ ๋ณด์Šค: ํ•œ ๋ฒˆ์— ์™„๋ฃŒ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? asp.net ์ฝ”์–ด ID IS4 ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” mvc ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์›น API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ธ๋œป ๋ณด๊ธฐ์— ์‚ฌ์†Œํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

@Ponant ๋ฌดํ•œํ•œ ์ž์›์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๋งŒ ๋ณ€๊ฒฝํ•˜๋Š” MVC ํ๋ฆ„์˜ ์ฃผ์š” ๋ถ€๋ถ„์„ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‚ญ์ œํ•˜๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ฐœ๋ณ„ ์ธ์ฆ API๋Š” ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์™€ ASP.NET Core ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฐ„๊ทน์„ ์ฑ„์šฐ๋Š” ๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์—ˆ๋‹ค. Identity Server์—๋Š” ์ด๋ฏธ Identity Server๋ฅผ "ํ•ต์‹ฌ"์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” MVC์šฉ ์ž‘์—… ํ…œํ”Œ๋ฆฟ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@CrispinH @blowdart ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ, ์—ญํ• , ํ…Œ๋„Œ์‹œ ๋ฐ ์‚ฌ์šฉ์ž ๊ทธ๋ฃน์ด ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆ˜๋ฐฑ ๋ช…์˜ ๊ฐœ๋ฐœ์ž์™€ ํšŒ์‚ฌ์— ๋Œ€ํ•ด

--> ์‚ฌ์šฉ์ž/๊ทธ๋ฃน/ํ…Œ๋„ŒํŠธ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค.

image


--> ์—ฌ๊ธฐ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์‹œ ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค ... ํŠธ์œ„ํ„ฐ์™€ ํŽ˜์ด์Šค๋ถ์—์„œ๋„ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ WP ๋ฐ PHP์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์ด ๋” ์‰ฌ์šด ์ด์œ ์ž…๋‹ˆ๋‹ค!

image

@manigandham ์€ ID ์„œ๋ฒ„๊ฐ€ ๋งค์šฐ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ GUI ๊ด€๋ฆฌ ๋„๊ตฌ์— ๋Œ€ํ•ด ๋งŽ์€ ๋น„์šฉ์„ ์ฒญ๊ตฌํ•˜๊ณ  ๋งŽ์€ ๊ตญ๊ฐ€์™€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ €๋ ดํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ฎ์€ TCO ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋„ ๋ถˆ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์—ฐ ์ด๊ฒƒ์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์–ผ๋งˆ๋‚˜ ๋ ๊นŒ์š”. ํฐ ์žฅ์• ๋ฌผ์ด์—ˆ๊ณ  ๋’ค๋กœ ๋ฌผ๋Ÿฌ์„œ์„œ Users/roles/Roles-User_groups/Tenants๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๊ณผ GUI๊ฐ€ ํ•„์š” ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@papyr ์ด๊ฒƒ์„ ์œ„ํ•ด ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“  ๊ฒƒ์„ ์œ„ํ•œ ์™„์ „ํ•œ GUI๋Š” ํ”„๋ ˆ์ž„์›Œํฌ(ํ…œํ”Œ๋ฆฟ)์— ๊ตฌ์ถ•๋  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒ€์ด ์˜ˆ๋ฅผ ๋“ค์–ด Bootstrap์„ ๋ณ€๊ฒฝํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฏธ ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€ ์•Œ๋ฉด, ๋‚˜๋Š” ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์— ๋” ๋งŽ์€ ๋…ธ๋ ฅ์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ, ๋‚˜๋Š” ์ด๊ฒƒ์ด ์กด์žฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๊ฒƒ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋…ธ๋ ฅํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@papyr @poke ์ƒˆ๋กœ์šด ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์šฐ์ˆ˜ํ•œ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

WordPress์™€ ๊ฒฝ์Ÿํ•˜๋„๋ก ์„ค๊ณ„๋œ MS์˜ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์›ํ•˜๋ฉด Orchard๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/OrchardCMS/OrchardCore

ํ”„๋ ˆ์ž„์›Œํฌ ๋Œ€์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋” ์›ํ•˜๋ฉด ๋‹ค์ค‘ ํ…Œ๋„Œ์‹œ, ์‚ฌ์šฉ์ž ๋ฐ ์—ญํ•  ๋ฐ ํด๋ ˆ์ž„ ๊ด€๋ฆฌ UI๋ฅผ ์œ„ํ•œ nugets๊ฐ€ ์žˆ๋Š” cloudscribe๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ์—ฌ๊ธฐ์—๋Š” ์„ ํƒ์  identityserver4 ํ†ตํ•ฉ๊ณผ ์„ ํƒ์  cms(cloudscribe.Simple/content)๊ฐ€ ๋ฏธ๋ฆฌ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋„ˆ๊ฒŸ.
https://www.cloudscribe.com/docs/introduction
https://github.com/cloudscribe/cloudscribe
https://github.com/cloudscribe/cloudscribe.SimpleContent

WordPress์™€ ๊ฒฝ์Ÿํ•˜๋„๋ก ์„ค๊ณ„๋œ MS์˜ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์›ํ•˜๋ฉด Orchard๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/OrchardCMS/OrchardCore

๋‚˜๋Š” ์ด ์ถ”์ฒœ์„ ๋‘ ๋ฒˆ์งธ๋กœ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Orchard Core๋Š” ๊ทน๋„๋กœ ๋ชจ๋“ˆํ™”๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์ค‘ ํ…Œ๋„Œ์‹œ ๋ชจ๋“ˆ๋งŒ ์ถ”์ถœํ•˜์—ฌ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋˜ํ•œ ์ด๋ฏธ ์‚ฌ์šฉ์ž ๋ฐ ์—ญํ• ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ์ด ์žˆ์œผ๋ฉฐ ๋” ๋‚˜์€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ฑ„๋„ ์—์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์˜ ๋ฐ๋ชจ๋ฅผ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@papyr ์ด๊ฒƒ์„ ์œ„ํ•ด ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

https://github.com/IdentityManager/IdentityManager2

์ด UI๋Š” ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์— UI๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์ž‘์—…์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ถ€ ์ด๋ฉ”์ผ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”)์„ ์‚ฌ์ „ ์Šน์ธํ•˜๊ณ  API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ "ํ”„๋กœ์„ธ์Šค ์š”๊ตฌ"๋ฅผ ์ถฉ์กฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. , ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์กฐ์ธ ๋˜๋Š” ๋‹ค๋ฅธ ๊ณณ์˜ ํ˜ธ์ถœ ๋“ฑ์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ† ํฐ ๋ฐ UI ๋กœ์ง์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ™์€ ์ข‹์€ ์ž์Šต์„œ๋ฅผ ๊ฐ€์ง€๊ณ  https://mcguirev10.com/2018/01/28/login-identity-management-best-practices.html ๋˜๋Š” ๊ทธ https://mcguirev10.com/page2/์ด (UI๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ๋Š๋‚Œ์„ ํŠนํžˆ EF๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ ํƒํ•œ ๊ธฐ์ˆ (Aurelia/Angular/Razor/React/Vue ๋“ฑ)์— ๋Œ€ํ•œ UI์™€ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@scottbrady91 ์™ธ์—๋„ ํ”„๋กœ์ ํŠธ์™€ ์ด๋ฆ„์„ ๋ช…๋ช…ํ•  ๋•Œ @LindaLawton , https://github.com/abergs/fido2-net-lib ( @abergs , @aseigler), @TomCJones , @mackie1001 ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ต์œก์ ์ด๋ผ๋Š” ๊ฒƒ์„

.net ์ฝ”์–ด์— ์ •์ƒ์ ์ธ ๋ฉด๋„๊ธฐ ์›น ํŽ˜์ด์ง€๊ฐ€ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ณต์žกํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋‹จ์ผ ๋ฉด๋„๊ธฐ(C#) ํŽ˜์ด์ง€์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ตœ์†Œํ•œ ๋ชจ๋ธ์ด๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ ์—†์ด ๋•Œ๋•Œ๋กœ ๋ณด๊ธฐ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ.

์ฆ‰, ๋ณด๊ธฐ์—์„œ sql์— ์—ฐ๊ฒฐํ•˜๊ณ  GET ๋ฐ POST ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ๋ฌผ๋ก  ์‚ญ์ œ๋˜๋ฉฐ ํ˜„์žฌ Striptag.cs๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

.net ์ฝ”์–ด์— ์ •์ƒ์ ์ธ ๋ฉด๋„๊ธฐ ์›น ํŽ˜์ด์ง€๊ฐ€ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-2.1&tabs=visual-studio์— Razor ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑํ‚น ํŽ˜์ด์ง€ ๋ชจ๋ธ ํด๋ž˜์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹จ์ง€ ํ•œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

benaadams ๋‹ต๋ณ€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฉด๋„๊ธฐ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ GET ๋ฐ POST ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜๊ณ  SQL ์„œ๋ฒ„์— ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ado ์—”ํ„ฐํ‹ฐ, linq ๋˜๋Š” ORM์ด ์•„๋‹Œ ์ผ๋ฐ˜ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ ์ผ๋ฐ˜ ์ฟผ๋ฆฌ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ข‹๋‹ค:

var msql = "SELECT * FROM customerss WHERE lastname LIKE <strong i="7">@0</strong> ORDER BY lastname OFFSET " + thisoffset + " ROWS FETCH NEXT 5 ROWS ONLY";

์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์ด ์ง€๊ธˆ json ํŒŒ์ผ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋ณด๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒƒ๋“ค์€ ๊นŠ์ด ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ํ•™์Šต ๊ณก์„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ทฐ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ _์ „์—_ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ํ•ด๋‹น ์ž‘์—…์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ HomeController.ViewReports ์ž‘์—… ๋ฐ Views/Home/ViewReports.cshtml ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

public class HomeController
{
  public ActionResult ViewReports()
  {
    // fetch data from the SQL using...something...
    return View(data);
  }
}

ํŽ˜์ด์ง€ ๋กœ๋“œ ์ดํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ JSON ํ˜•์‹ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ผ๋ถ€ ์ˆœ์ˆ˜ GET/POST ๋์ ์— ๋Œ€ํ•œ AJAX ์š”์ฒญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์ž‘์—… ์—†์ด ํŽ˜์ด์ง€์—์„œ ์—ฌ์ „ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ญ”๊ฐ€

<strong i="6">@page</strong>
<strong i="7">@using</strong> System.Data.SqlClient
<strong i="8">@using</strong> Microsoft.AspNetCore.Http
<strong i="9">@using</strong> Microsoft.Extensions.Configuration
<strong i="10">@inject</strong> IConfiguration Configuration

@{
    var lastname = Request.Query["lastname"];
    if (!string.IsNullOrEmpty(lastname))
    {
        var offset = 0;
        var count = 5;
        if (Request.Method == HttpMethods.Post)
        {
            int.TryParse(Request.Form["offset"], out offset);
            int.TryParse(Request.Form["count"], out count);
            count = Math.Min(count, 50);
        }

        var connectionString = Configuration.GetConnectionString("MyConnectionString");
        using (var conn = new SqlConnection(connectionString))
        {
            using (var cmd = new SqlCommand(@"
            SELECT * FROM customers
            WHERE lastname LIKE <strong i="11">@lastname</strong>
            ORDER BY lastname
                OFFSET (@offset) ROWS
                FETCH NEXT (@count) ROWS ONLY"))
            {
                cmd.Parameters.AddWithValue("@lastname", lastname);
                cmd.Parameters.AddWithValue("@offset", offset);
                cmd.Parameters.AddWithValue("@count", count);

                await conn.OpenAsync();
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        <div>@reader["lastname"]</div>
                    }
                }
            }
        }
    }
    else
    {
        <div>Nothing chosen</div>
    }
}

๋‚˜๋Š” mvc asp.net๊ณผ webforms์™€ ์˜ค๋ž˜๋œ ๋ฉด๋„๊ธฐ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์™”๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 3์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ๋ฉด๋„๊ธฐ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <form id="petform" method="post" action="pets/razdb3">
        <input type="text" name="psearch" id="psearch" />
        <input type="submit" />
    </form>

</body>
</html>

html ํŽ˜์ด์ง€๋งŒ ๋กœ๋“œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace petnewtry.Pages.pets
{
    public class razdb3Model : PageModel
    {
        public string myvar { get; set; }

        public void OnGet()
        {

        }

        public void OnPost()
        {
            myvar = Request.Form["psearch"];
        }
    }
}

๋ณด๋‹ค:

<strong i="13">@page</strong>
<strong i="14">@model</strong> petnewtry.Pages.pets.razdb3Model
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>razdb3</title>
</head>
<body>
    <div>@Model.myvar</div>
    <div>hello</div>
</body>
</html>

3์‹œ๊ฐ„์ด๋ฉด ๋นˆ ํŽ˜์ด์ง€๋งŒ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋‚˜๋Š” return ๋ฌธ ๋“ฑ์„ ์‹œ๋„ํ–ˆ๋‹ค.

http://localhost :51307/pets/razdb3๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์ธ "hello"๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ
@Model.myvar ๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ์–ป์ง€ ๋ชปํ•œ๋‹ค.

์ €๋Š” .net ์ฝ”์–ด๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ณ  ๋ฉด๋„๊ธฐ ํŽ˜์ด์ง€๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

VS ์ปค๋ฎค๋‹ˆํ‹ฐ 2017์—์„œ

@Model.myvar ๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ์–ป์ง€ ๋ชปํ•œ๋‹ค.

myvar ๊ฐ’์„ psearch ์–‘์‹์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์‹œ๋ฌผ ์š”์ฒญ( OnPost )์— ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ํ•ด๋‹น ๊ฐ’์œผ๋กœ POST ์š”์ฒญ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ธŒ๋ผ์šฐ์ €์—์„œ URL๋กœ ์ด๋™ํ•˜์—ฌ ์–ป๋Š” GET ์š”์ฒญ( OnGet )์—์„œ; ๋Œ€์‹  ์–‘์‹ ํฌ์ŠคํŠธ๋ฐฑ์ด ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์ด ํ๋ฅด๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•˜์ง€ ์•Š์„ ๋•Œ ํ‘œ์‹œ๋˜๋„๋ก ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

public string myvar { get; set; } = "Not Set";

๋กœ ๋ณ€๊ฒฝ

public string myvar { get; set; } = "Not Set";

๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๋นˆ ํŽ˜์ด์ง€. @Model.myvar๊ฐ€ ๋งž์Šต๋‹ˆ๊นŒ?

์‹ฌ์ง€์–ด ๋ณ€๊ฒฝ

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace petnewtry.Pages.pets
{
    public class razdb3Model : PageModel
    {
        [BindProperty]
        public string psearch { get; set; }

        public void OnGet()
        {

        }

        public void OnPost(string psearch)
        {
            psearch = Request.Form["psearch"];
        }
    }
}
<strong i="12">@page</strong>
<strong i="13">@model</strong> petnewtry.Pages.pets.razdb3Model
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>razdb3</title>
</head>
<body>
    <div>@Model.psearch</div >
        <div>hello</div>
</body>
</html>

๊ทธ๊ฒƒ์€ ์˜ค๋ฅ˜ ์—†์ด ์ž˜ ๋นŒ๋“œ๋˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ์‹œ๋„ํ•˜๋“  ๋นˆ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ •์ค‘ํ•œ ๋…ผํ‰/์ƒ๊ฐ: "์ผ๋ฐ˜ ๋ฉด๋„๊ธฐ ํŽ˜์ด์ง€"์— ๋Œ€ํ•œ ์ด ํ† ๋ก ์ด ์ด ์Šค๋ ˆ๋“œ์˜ ์ฃผ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ์ฃผ์ œ์—์„œ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚˜๊ธฐ ์‹œ์ž‘ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿ˜Š ๐Ÿ˜Š

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํฌ๋Ÿผ์„ ์‚ฌ์šฉํ–ˆ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. @benaadams ์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

https://www.c-sharpcorner.com/article/razor-page-web-application-with-asp-net-core-using-ado-net/

์ด๊ฒƒ์€ "์ƒˆ๋กœ์šด"ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์จŒ๋“  ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

EmployeeDataAccessLayer objemployee = new EmployeeDataAccessLayer();

.net ์ฝ”์–ด์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์•ˆ์‹ฌ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

.net ์ฝ”์–ด๋Š” ์ด์ „์˜ ์ผ๋ถ€ asp.net ํ”„๋ ˆ์ž„์›Œํฌ๋ณด๋‹ค ํ•™์Šต ๊ณก์„ ์ด ๋” ๊ฐ€ํŒŒ๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๊ณ ๋งˆ์›Œ.

๋ฆด๋ฆฌ์Šค ์ •๋ณด์—์„œ๋Š” ํ–ฅํ›„ ๋ช‡ ๊ฐœ์›” ๋™์•ˆ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ์ œ๊ณต๋  "์ธ์ฆ ์„œ๋ฒ„" ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋‹ค๋ฆด์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ž์ฒด ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜์‹ญ์‹œ์˜ค.

๋ฆด๋ฆฌ์Šค ์ •๋ณด์—์„œ๋Š” ํ–ฅํ›„ ๋ช‡ ๊ฐœ์›” ๋™์•ˆ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ์ œ๊ณต๋  "์ธ์ฆ ์„œ๋ฒ„" ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธฐ๋‹ค๋ฆด์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ž์ฒด ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜์‹ญ์‹œ์˜ค.

ํ˜„์žฌ ๊ณ„ํš์€ https://github.com/IdentityServer/IdentityServer4 ๋ฅผ "๋ฏธ๋ฆฌ ํŒจํ‚ค์ง•๋œ" ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

IS4 ํŒ€๊ณผ MS ๋ณด์•ˆ ํŒ€์˜ ๋ฉ”๋ชจ์— ๋”ฐ๋ฅด๋ฉด MS๋Š” ๋‹จ์ˆœํžˆ IS4์˜ ๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์šด ํŒจํ‚ค์ง•์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด์•ˆ์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ์ง€ํ˜œ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ๋ณด์˜€์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ–‰๋™ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

IS4์™€ ASP๊ฐ€ ์™„์ „ํžˆ ํ†ตํ•ฉ๋˜์–ด Web API์™€ MVC๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์‚ฐ์—…์ ์œผ๋กœ ๊ฐ•๋ ฅํ•œ ์ธ์ฆ/์ธ๊ฐ€๊ฐ€ ์ตœ์†Œํ•œ์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ์‹œ๋Œ€์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค(OSS)๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์ผ๋ถ€ OSS ๋ณด์•ˆ ์ œํ’ˆ์—๋Š” ๊ธฐ์—… ์›น์‚ฌ์ดํŠธ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์‹ฌ๊ฐํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ 85%๋Š” ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ณด์•ˆ ์œ„ํ—˜์ด ์žˆ๋Š” ์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 45%์˜ ์›น ์„œ๋ฒ„๋Š” IIS(https://www.cvedetails.com/product/3436/)๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ทจ์•ฝ์ ์ด ์žˆ๋Š” Apache(https://www.cvedetails.com/vendor/45/Apache.html)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Microsoft-IIS.html?vendor_id=26). Identity Server์™€ ๊ฐ™์€ ์ œํ’ˆ์€ ๊ดœ์ฐฎ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐ์ •ํ•˜๋ฉด ์™„์ „ํžˆ ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์•ˆ์ „ํ•œ Net Core์— ๋‚ด์žฅ๋œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...

์‚ฐ์—…์ ์œผ๋กœ ๊ฐ•๋ ฅํ•œ ์ธ์ฆ/์ธ๊ฐ€๊ฐ€ ์ตœ์†Œํ•œ์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ์‹œ๋Œ€์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค(OSS)๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์ผ๋ถ€ OSS ๋ณด์•ˆ ์ œํ’ˆ์—๋Š” ๊ธฐ์—… ์›น์‚ฌ์ดํŠธ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์‹ฌ๊ฐํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ 85%๋Š” ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ณด์•ˆ ์œ„ํ—˜์ด ์žˆ๋Š” ์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 45%์˜ ์›น ์„œ๋ฒ„๋Š” IIS(https://www.cvedetails.com/product/3436/)๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ทจ์•ฝ์ ์ด ์žˆ๋Š” Apache(https://www.cvedetails.com/vendor/45/Apache.html)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Microsoft-IIS.html?vendor_id=26). Identity Server์™€ ๊ฐ™์€ ์ œํ’ˆ์€ ๊ดœ์ฐฎ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐ์ •ํ•˜๋ฉด ์™„์ „ํžˆ ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์•ˆ์ „ํ•œ Net Core์— ๋‚ด์žฅ๋œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...

๋‹น์‹ ์˜ ์š”์ ์€ ์ ˆ๋Œ€์ ์œผ๋กœ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๋น„๋””์˜ค์—์„œ MS ์ง์›์€ [๋ณด์•ˆ] ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜๊ณ  ํƒ€์‚ฌ [IS4] ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ ๋ชจ๋‘์—๊ฒŒ ์œˆ/์œˆ ์ƒํ™ฉ์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์‚ฐ์—…์ ์œผ๋กœ ๊ฐ•๋ ฅํ•œ ์ธ์ฆ/์ธ๊ฐ€๊ฐ€ ์ตœ์†Œํ•œ์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ์‹œ๋Œ€์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค(OSS)๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์ผ๋ถ€ OSS ๋ณด์•ˆ ์ œํ’ˆ์—๋Š” ๊ธฐ์—… ์›น์‚ฌ์ดํŠธ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์‹ฌ๊ฐํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ 85%๋Š” ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ณด์•ˆ ์œ„ํ—˜์ด ์žˆ๋Š” ์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 45%์˜ ์›น ์„œ๋ฒ„๋Š” IIS(https://www.cvedetails.com/product/3436/)๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ทจ์•ฝ์ ์ด ์žˆ๋Š” Apache(https://www.cvedetails.com/vendor/45/Apache.html)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Microsoft-IIS.html?vendor_id=26). Identity Server์™€ ๊ฐ™์€ ์ œํ’ˆ์€ ๊ดœ์ฐฎ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐ์ •ํ•˜๋ฉด ์™„์ „ํžˆ ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์•ˆ์ „ํ•œ Net Core์— ๋‚ด์žฅ๋œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...

"ํ•ญ์ƒ ์•ˆ์ „ํ•œ" ๊ฒƒ์€ ์—†์œผ๋ฉฐ ํŠนํžˆ Microsoft์˜ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ;)
๊ทธ๊ฒƒ์„ ๋งŒ๋“ค๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ ์‚ฌ์šฉ์ž์˜ ์†์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

IdentityServer๋Š” 2.2 ์ดํ›„ ์ถœ์‹œ๋˜๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ดˆ์ ์€ API ์•ก์„ธ์Šค ์ œ์–ด์ด์ง€๋งŒ ํ–ฅํ›„ ํ™•์žฅํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ASP.NET Core๋Š” ํ…œํ”Œ๋ฆฟ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋‹ค๋ฃจ๋Š” ๊ฐ„์†Œํ™”๋œ ๊ตฌ์„ฑ API์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€๋งŒ ์‹œ์ž‘ํ•˜๊ธฐ๋Š” ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ œ๊ณตํ•˜๋Š” IS ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์‹œ์Šคํ…œ์œผ๋กœ ์–ธ์ œ๋“ ์ง€ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IdentityServer๋Š” 2.2 ์ดํ›„ ์ถœ์‹œ๋˜๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ดˆ์ ์€ API ์•ก์„ธ์Šค ์ œ์–ด์ด์ง€๋งŒ ํ–ฅํ›„ ํ™•์žฅํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ASP.NET Core๋Š” ํ…œํ”Œ๋ฆฟ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋‹ค๋ฃจ๋Š” ๊ฐ„์†Œํ™”๋œ ๊ตฌ์„ฑ API์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€๋งŒ ์‹œ์ž‘ํ•˜๊ธฐ๋Š” ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ œ๊ณตํ•˜๋Š” IS ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์‹œ์Šคํ…œ์œผ๋กœ ์–ธ์ œ๋“ ์ง€ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค Dominick;
๋‚˜๋Š” ์ด "๋””๋”ค๋Œ"์ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‹œ์ž‘ํ•˜๊ณ  ์™„์ „ํ•œ IS๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ˆ˜.

IdentityServer๋Š” 2.2 ์ดํ›„ ์ถœ์‹œ๋˜๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ดˆ์ ์€ API ์•ก์„ธ์Šค ์ œ์–ด์ด์ง€๋งŒ ํ–ฅํ›„ ํ™•์žฅํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ASP.NET Core๋Š” ํ…œํ”Œ๋ฆฟ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋‹ค๋ฃจ๋Š” ๊ฐ„์†Œํ™”๋œ ๊ตฌ์„ฑ API์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€๋งŒ ์‹œ์ž‘ํ•˜๊ธฐ๋Š” ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ œ๊ณตํ•˜๋Š” IS ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์‹œ์Šคํ…œ์œผ๋กœ ์–ธ์ œ๋“ ์ง€ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ์•„ ๋‘˜๋งŒ ํ•œ! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด API ์•ก์„ธ์Šค ์ œ์–ด๋Š” OAuth ๋ฒ”์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๊นŒ?
policyserver.io์— ์„ค๋ช…๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋” ํœ˜๋ฐœ์„ฑ์ธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์ง€์›์ด ์—†์Šต๋‹ˆ๊นŒ?

IdentityServer๋Š” 2.2 ์ดํ›„ ์ถœ์‹œ๋˜๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ดˆ์ ์€ API ์•ก์„ธ์Šค ์ œ์–ด์ด์ง€๋งŒ ํ–ฅํ›„ ํ™•์žฅํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ASP.NET Core๋Š” ํ…œํ”Œ๋ฆฟ ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ๋‹ค๋ฃจ๋Š” ๊ฐ„์†Œํ™”๋œ ๊ตฌ์„ฑ API์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€๋งŒ ์‹œ์ž‘ํ•˜๊ธฐ๋Š” ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ œ๊ณตํ•˜๋Š” IS ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์‹œ์Šคํ…œ์œผ๋กœ ์–ธ์ œ๋“ ์ง€ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ์•„ ๋‘˜๋งŒ ํ•œ! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด API ์•ก์„ธ์Šค ์ œ์–ด๋Š” OAuth ๋ฒ”์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๊นŒ?
policyserver.io์— ์„ค๋ช…๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋” ํœ˜๋ฐœ์„ฑ์ธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์ง€์›์ด ์—†์Šต๋‹ˆ๊นŒ?

PolicyServer๋Š” ์ƒ์šฉ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

์ด API ์•ก์„ธ์Šค ์ œ์–ด๋Š” OAuth ๋ฒ”์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๊นŒ?
policyserver.io์— ์„ค๋ช…๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋” ํœ˜๋ฐœ์„ฑ์ธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์ง€์›์ด ์—†์Šต๋‹ˆ๊นŒ?

"์ „์šฉ" IdentityServer. ASP.NET Core์—๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต API๊ฐ€ ์žˆ์œผ๋ฉฐ PolicyServer(์ œํ’ˆ)๊ฐ€ ํฅ๋ฏธ๋กญ๊ฒŒ ๋ณด์ด๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

ASP.NET Core 2.2๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ASP 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Authorization Server ๊ฐœ์„  ์‚ฌํ•ญ์ด ์–ธ์ œ ์ œ๊ณต๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

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