๐ŸชŸ
ASP.NET Core
WebAPI ServerASP.NET CoreMain Subject
  • Intro
  • Program.cs
  • Dependency Injection
  • Host
  • MVC
  • Middleware
  • Model Binding
  • Controller
  • Configure
  • Logging
  • Library
    • WebApplicationzBuilder
  • Example Code
    • basic01
    • basic02
    • basic03
    • basic04
    • basic05
    • basic06
    • basic07
Powered by GitBook
On this page
  • ์˜๋ฏธ์™€ ์—ญํ• 
  • ์„œ๋น„์Šค (Service)
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
  • ์ฝ”๋“œ ๋ถ„์„
  • ์ฐธ๊ณ ๋ฌธํ—Œ

Dependency Injection

์˜๋ฏธ์™€ ์—ญํ• 

  • ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

  • ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žก์„ฑ๊ณผ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ

  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ

  • ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด์„œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ์Œ

  • ์„œ๋น„์Šค(builder.service)๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ(bulder.build()) ์ด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ด์คŒ

  • ์‚ฌ์šฉ์ž ๋˜๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ

  • ASP.NET Core ํ”„๋ ˆ์ž„ ์›Œํฌ์— ํฌํ•จ๋œ DI๋Š” builder.Add{GROUP_NAME}์œผ๋กœ ์ถ”๊ฐ€ํ•จ

์„œ๋น„์Šค (Service)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜๋ฏธ

  • Service๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋จ

  • ์‚ฌ์šฉ ๊ณผ์ •

    1. ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ(์ธํ„ฐํŽ˜์ด์Šค, ๊ตฌํ˜„์ฒด) ๊ตฌํ˜„ (ASP.NET Core์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋„ ์žˆ์Œ)

    2. ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

    3. ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก (builder.Service.Add{...})

    4. builder์— ์ด ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ ์˜์กด์„ฑ ์ฃผ์ž…(DI)

  • ASP.NET Core ์˜ˆ์‹œ : DbContext, Logger, ...

  • ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ์ฃผ์ž…ํ•จ

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•Œ์•„์„œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ฃผ์ž…๋œ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ˆ˜๋ช…์ฃผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง. (์ž์„ธํ•œ ์„ค๋ช…์€ MS Docs ์ฐธ๊ณ )

    • ์ง€์ •๋œ ํ˜•์‹์˜ ๋ฒ”์œ„ ์„œ๋น„์Šค ์ง€์ •

    • ํ•œ ๋ฒˆ์˜ ์š”์ฒญ ๋‚ด์—์„œ๋Š” ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•จ. ํ•œ๋ฒˆ์˜ ์š”์ฒญ์—์„œ ์„œ๋น„์Šค๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ˜ํ™˜๋จ

    • ์‹ฑ๊ธ€ํ†ค ์„œ๋น„์Šค ์ง€์ •

    • ํ”„๋กœ๊ทธ๋žจ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๋ฐ˜ํ™˜

    • ๋ชจ๋“  ์š”์ฒญ๋“ค์ด ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•จ

    • ์ž„์‹œ์„œ๋น„์Šค ์ง€์ •

    • ๋งค ์š”์ฒญ, ๋งค ์„œ๋น„์Šค ํ˜ธ์ถœ ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ˜ํ™˜ ๋จ

  • Add{GROUP_NAME}์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ ์„œ๋น„์Šค ๊ทธ๋ฃน์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Œ.

  • AddControllers ๋Š” MVC ์ปจํŠธ๋กค๋Ÿฌ์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•จ

๊ฒŒ์ž„ ์„œ๋ฒ„๋Š” ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ์˜์—ญ์ด ๋  ์ˆ˜ ์žˆ์Œ. ๊ณต์œ ์˜์—ญ์ด ๋˜๋ฉด race condition, dead lock ๋“ฑ์˜ ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ. ๊ณต์œ ์˜์—ญ์„ ์•ˆ ๋งŒ๋“œ๋Š”๊ฒŒ ๊ฐ€์žฅ ์ข‹๊ธฐ ๋•Œ๋ฌธ์—, AddTransient์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ

์ฝ”๋“œ ๋ถ„์„

  • MVC ๋ชจ๋ธ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์˜ˆ์‹œ

// 1. ๋นŒ๋” ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
var builder = WebApplication.CreateBuilder(args);

// 2. ๋นŒ๋”์— ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ
// RazorPage ์„œ๋น„์Šค ์‚ฌ์šฉ์„ ์ถ”๊ฐ€ํ•จ
builder.Services.AddRazorPages();
// ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ์„œ๋น„์Šค ์‚ฌ์šฉ์„ ์ถ”๊ฐ€ํ•จ
builder.Services.AddControllersWithViews();

// 3. ์œ„ ์„œ๋น„์Šค๊ฐ€ ์ถ”๊ฐ€๋œ ๋นŒ๋” ์ปจํ…Œ์ด๋„ˆ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ฆ
var app = builder.Build();

์ฐธ๊ณ ๋ฌธํ—Œ

PreviousProgram.csNextHost

Last updated 1 year ago

AddScoped
AddSingleton
AddTransient
ํ™•์žฅ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ
MS Docs : dependency-injection
MS Docs : webapplicationbuilder
์žฌ์šฐ๋‹ˆ์˜ ๋ธ”๋กœ๊ทธ
Gamechangers ๋ธ”๋กœ๊ทธ