๐Ÿš€ WhereDynamic๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ .NET8+์—์„œ ๋™์  LINQ ์ฟผ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

๋ฐœํ–‰: (2025๋…„ 12์›” 2์ผ ์˜คํ›„ 05:30 GMT+9)
4 min read
์›๋ฌธ: Dev.to

Source: Dev.to

Introducing WhereDynamic

์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๊ฒฝํ—˜ํ•ด๋ดค์Šต๋‹ˆ๋‹ค: ์กฐ๊ฑด๋ถ€ ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋์—†์ด if ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, ์„œ๋กœ ๋‹ค๋ฅธ ํ•„ํ„ฐ ์กฐํ•ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์—”๋“œํฌ์ธํŠธ์— ๋กœ์ง์„ ๋ณต์ œํ•˜๋Š” ์ƒํ™ฉ์„. ์ด๋Š” ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

The Problem

.NET๊ณผ Entity Framework๋ฅผ ์‚ฌ์šฉํ•ด API ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ๋•Œ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ „ํ†ต์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฝ”๋“œ๊ฐ€ ๋ถ€ํ’€์–ด ์˜ค๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

The Solution

WhereDynamic์€ ๋Ÿฐํƒ€์ž„์— LINQ Where ์ ˆ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ํƒ€์ž…โ€‘์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ, ๋ฐ˜๋ณต์ ์ธ ์กฐ๊ฑด ๋กœ์ง์„ ์—†์• ๋ฉด์„œ๋„ EF Core๊ฐ€ SQL๋กœ ์™„์ „ํžˆ ๋ณ€ํ™˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Practical Use Cases

1. Advanced Search Filters

์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์˜ ๊ธฐ์ค€(์˜ˆ: ๋‚ ์งœ ๋ฒ”์œ„, ํ…์ŠคํŠธ ๋งค์น˜, ์ˆซ์ž ๋ฒ”์œ„)์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žกํ•œ ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€๋ฅผ ๋ณ„๋„์˜ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

2. Multiโ€‘Tenant Data Filtering

ํ…Œ๋„ŒํŠธ๋ณ„ ํ•„ํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ ์šฉํ•˜์—ฌ ๊ฐ ์š”์ฒญ์ด ํ˜„์žฌ ํ…Œ๋„ŒํŠธ์— ์†ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

3. API Query Parameters

์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ LINQ ํ”„๋ ˆ๋””์ผ€์ดํŠธ์— ์ง์ ‘ ๋งคํ•‘ํ•˜์—ฌ REST ๋˜๋Š” GraphQL ์—”๋“œํฌ์ธํŠธ์—์„œ ์œ ์—ฐํ•œ ํด๋ผ์ด์–ธํŠธโ€‘์ฃผ๋„ ํ•„ํ„ฐ๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

4. Complex Nested Conditions

๋™์ ์œผ๋กœ ์ค‘์ฒฉ๋œ AND/OR ๊ทธ๋ฃน์„ ๊ตฌ์„ฑํ•˜์—ฌ โ€œ(A AND B) OR (C AND (D OR E))โ€์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉ ์—†์ด ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Key Benefits

  • Cleaner Code โ€“ ๋ฐ˜๋ณต์ ์ธ ์กฐ๊ฑด ๋กœ์ง์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • Type Safety โ€“ IntelliSense ์ง€์›๊ณผ ์ปดํŒŒ์ผ ์‹œ์  ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Performance โ€“ ์ตœ์ ํ™”๋œ SQL ์ฟผ๋ฆฌ๋กœ ์ง์ ‘ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • Maintainability โ€“ ํ•„ํ„ฐ ๋กœ์ง์ด ์ค‘์•™ ์ง‘์ค‘ํ™”๋˜์–ด ํ…Œ์ŠคํŠธ์™€ ํ™•์žฅ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • Flexibility โ€“ ๊ธฐ์กด Entity Framework ์ฝ”๋“œ์™€ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Built For Modern .NET

WhereDynamic์€ .NETโ€ฏ8+์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ Entity Framework Core์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ๊ณผ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. REST API, GraphQL ์—”๋“œํฌ์ธํŠธ, ๋ณต์žกํ•œ ๋ณด๊ณ  ์‹œ์Šคํ…œ ๋“ฑ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ์š”๊ตฌ์— ๋งž๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

C#๋กœ ์–‘๋ฐฉํ–ฅ TOON ํŒŒ์„œ ๊ตฌ์ถ•: TOON JSON์„ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜

์†Œ๊ฐœ Toon Tokenโ€‘Oriented Object Notation์€ LLM ํ† ํฐ์„ ์ €์žฅํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ์ƒˆ๋กญ๊ฒŒ ํ™๋ณด๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ปดํŒฉํŠธํ•˜๊ณ  ์ธ๊ฐ„์ด ์ฝ๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ๊ทน๋„๋กœ โ€ฆ

โ€˜Dependency Injection Principles, Practices, and Patternsโ€™์—์„œ ๋ฐฐ์šด ๊ตํ›ˆ

์†Œ๊ฐœ ๋‚ด ์ฒซ ๋ฒˆ์งธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž ์ง์—…์€ Microsoft์™€ ๋งค์šฐ ๊ธด๋ฐ€ํžˆ ํ˜‘๋ ฅํ•˜๋˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์—์ด์ „์‹œ์—์„œ C๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋‹ˆ์–ด ์—”์ง€๋‹ˆ์–ด๋กœ์„œ...

์ฒดํฌ๋ฐ•์Šค Aria TagHelper

์†Œ๊ฐœ ASP.NET Core ํŽ˜์ด์ง€์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ฒดํฌ๋ฐ•์Šค ์ž…๋ ฅ์„ ์‚ฌ์šฉ์ž ์ •์˜ TagHelper๋ฅผ ์‚ฌ์šฉํ•ด ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. TagHelper๋Š” checked attr๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.