Laravel Query Builder vs Eloquent: ์„ฑ๋Šฅ ๋น„๊ต ๐Ÿ“Š

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - Laravel Query Builder vs Eloquent: ์„ฑ๋Šฅ ๋น„๊ต ๐Ÿ“Š

 

 

Laravel์€ PHP ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: Query Builder์™€ Eloquent ORM. ์ด ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์„ฑ๋Šฅ ๋ฉด์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Query Builder์™€ Eloquent์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

ย 

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

1. Query Builder์™€ Eloquent ์†Œ๊ฐœ ๐Ÿ› ๏ธ

1.1 Query Builder๋ž€?

Laravel์˜ Query Builder๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ง๊ด€์ ์ด๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

Query Builder์˜ ์ฃผ์š” ํŠน์ง•:

  • ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์„ ํ†ตํ•œ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ
  • SQL ์ธ์ ์…˜ ๋ฐฉ์ง€
  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ ์šฉ์ด
  • raw SQL ์‚ฌ์šฉ ๊ฐ€๋Šฅ

ย 

์˜ˆ์‹œ ์ฝ”๋“œ:


$users = DB::table('users')
            ->where('status', 'active')
            ->orderBy('name', 'desc')
            ->get();
  

1.2 Eloquent ORM์ด๋ž€?

Eloquent๋Š” Laravel์˜ ORM(Object-Relational Mapping) ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ PHP ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

Eloquent์˜ ์ฃผ์š” ํŠน์ง•:

  • ๋ชจ๋ธ์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํ˜ธ์ž‘์šฉ
  • ๊ด€๊ณ„ ์ •์˜ ๋ฐ ๊ด€๋ฆฌ ์šฉ์ด
  • ์ž๋™ ํƒ€์ž„์Šคํƒฌํ”„
  • ๋ชจ๋ธ ์ด๋ฒคํŠธ ๋ฐ ์˜ต์ €๋ฒ„

ย 

์˜ˆ์‹œ ์ฝ”๋“œ:


$users = User::where('status', 'active')
             ->orderBy('name', 'desc')
             ->get();
  
Query Builder - ์ง์ ‘์ ์ธ SQL ์ œ์–ด - ๋น ๋ฅธ ์‹คํ–‰ ์†๋„ - ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ์ ํ•ฉ Eloquent ORM - ๊ฐ์ฒด ์ง€ํ–ฅ์  ์ ‘๊ทผ - ๊ด€๊ณ„ ๊ด€๋ฆฌ ์šฉ์ด - ๋†’์€ ์ถ”์ƒํ™” ์ˆ˜์ค€ VS

2. ์„ฑ๋Šฅ ๋น„๊ต ๋ฐฉ๋ฒ•๋ก  ๐Ÿ”ฌ

Query Builder์™€ Eloquent์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ์œ„ํ•œ ์ฃผ์š” ๋ฐฉ๋ฒ•๋ก ๊ณผ ๊ณ ๋ ค์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

2.1 ๋ฒค์น˜๋งˆํ‚น ๋„๊ตฌ

์„ฑ๋Šฅ ์ธก์ •์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • Laravel Debugbar: ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง
  • Xdebug: ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ ์ƒ์„ธํ•œ ์„ฑ๋Šฅ ๋ถ„์„
  • Apache JMeter: ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋ฐ ์„ฑ๋Šฅ ์ธก์ •
  • Laravel Telescope: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ, ์˜ˆ์™ธ, ๋กœ๊ทธ ๋“ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋ง

2.2 ์ธก์ • ์ง€ํ‘œ

์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ง€ํ‘œ๋“ค์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ์‹คํ–‰ ์‹œ๊ฐ„: ์ฟผ๋ฆฌ ์‹คํ–‰์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ์ฟผ๋ฆฌ ์‹คํ–‰ ์ค‘ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘
  • CPU ์‚ฌ์šฉ๋ฅ : ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์ค‘ CPU ์‚ฌ์šฉ ์ •๋„
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ
  • ํ™•์žฅ์„ฑ: ๋ฐ์ดํ„ฐ ์–‘ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ๋ณ€ํ™”

2.3 ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ๋‹จ์ˆœ CRUD ์ž‘์—…
  • ๋ณต์žกํ•œ ์กฐ์ธ ์ฟผ๋ฆฌ
  • ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
  • ๊ด€๊ณ„๋ฅผ ํฌํ•จํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ
  • ์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ

ย 

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•๋ก ์„ ํ†ตํ•ด Query Builder์™€ Eloquent์˜ ์„ฑ๋Šฅ์„ ๊ฐ๊ด€์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜์—ฌ, ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์„ ํƒ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿงช

์„ฑ๋Šฅ ๋น„๊ต ํ”„๋กœ์„ธ์Šค ๋ฒค์น˜๋งˆํ‚น ๋„๊ตฌ ์„ ํƒ ์ธก์ • ์ง€ํ‘œ ์ •์˜ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ค๊ณ„ ๊ฒฐ๊ณผ ๋ถ„์„ ๋ฐ ์ตœ์ ํ™”

3. Query Builder์˜ ์„ฑ๋Šฅ ๋ถ„์„ ๐Ÿ”

Query Builder๋Š” Laravel์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” Query Builder์˜ ์„ฑ๋Šฅ ํŠน์„ฑ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

3.1 Query Builder์˜ ์žฅ์ 

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

3.2 ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ

๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ Query Builder์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

Query Builder ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ ๋‹จ์ˆœ ์กฐํšŒ ๋ณต์žกํ•œ ์กฐ์ธ ๋Œ€๋Ÿ‰ ์‚ฝ์ž… ์ง‘๊ณ„ ํ•จ์ˆ˜ ๋น ๋ฆ„ ๋Š๋ฆผ

์œ„ ๊ทธ๋ž˜ํ”„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, Query Builder๋Š” ํŠนํžˆ ๋ณต์žกํ•œ ์กฐ์ธ ์ฟผ๋ฆฌ์™€ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—์„œ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

3.3 ์ตœ์ ํ™” ํŒ

Query Builder๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ธ๋ฑ์Šค ํ™œ์šฉ: ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์— ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ฟผ๋ฆฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ถˆํ•„์š”ํ•œ ์ปฌ๋Ÿผ ์ œ์™ธ: select() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒญํฌ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” chunk() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์บ์‹ฑ ํ™œ์šฉ: ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

ย 

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

4. Eloquent์˜ ์„ฑ๋Šฅ ๋ถ„์„ ๐Ÿ”ฌ

Eloquent๋Š” Laravel์˜ ๊ฐ•๋ ฅํ•œ ORM(Object-Relational Mapping) ์‹œ์Šคํ…œ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” Eloquent์˜ ์„ฑ๋Šฅ ํŠน์„ฑ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4.1 Eloquent์˜ ์žฅ์ 

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

4.2 ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ

๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ Eloquent์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

Eloquent ์„ฑ๋Šฅ ์ธก์ • ๊ฒฐ๊ณผ ๋‹จ์ˆœ CRUD ๊ด€๊ณ„ ์กฐํšŒ ๋Œ€๋Ÿ‰ ์กฐํšŒ ์ง‘๊ณ„ ํ•จ์ˆ˜ ๋น ๋ฆ„ ๋Š๋ฆผ

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

4.3 ์ตœ์ ํ™” ํŒ

Eloquent๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Eager Loading ํ™œ์šฉ: N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด with() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ ๋ชจ๋ธ์„ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒญํฌ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” chunk() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟผ๋ฆฌ ์Šค์ฝ”ํ”„ ํ™œ์šฉ: ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ๋ชจ๋ธ์˜ ์Šค์ฝ”ํ”„๋กœ ์ •์˜ํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • Raw ์ฟผ๋ฆฌ ์‚ฌ์šฉ: ๋งค์šฐ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ, Eloquent์˜ ๋ฉ”์„œ๋“œ ๋Œ€์‹  raw SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย 

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

5. Query Builder vs Eloquent: ์ƒ์„ธ ์„ฑ๋Šฅ ๋น„๊ต ๐Ÿ†

์ด์ œ Query Builder์™€ Eloquent์˜ ์„ฑ๋Šฅ์„ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ง์ ‘ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฐ•์ ๊ณผ ์•ฝ์ ์„ ๋” ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

5.1 ๋‹จ์ˆœ CRUD ์ž‘์—…

๊ธฐ๋ณธ์ ์ธ Create, Read, Update, Delete ์ž‘์—…์—์„œ์˜ ์„ฑ๋Šฅ ๋น„๊ต:

๋‹จ์ˆœ CRUD ์ž‘์—… ์„ฑ๋Šฅ ๋น„๊ต Create Read Update Delete ๋น ๋ฆ„ ๋Š๋ฆผ Query Builder Eloquent

๋‹จ์ˆœ CRUD ์ž‘์—…์—์„œ๋Š” Query Builder์™€ Eloquent ๊ฐ„์˜ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Eloquent๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์•ฝ๊ฐ„ ๋Š๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ์ฐจ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฌด์‹œํ•  ๋งŒํ•œ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

5.2 ๋ณต์žกํ•œ ์กฐ์ธ ์ฟผ๋ฆฌ

์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์—์„œ์˜ ์„ฑ๋Šฅ ๋น„๊ต:

๋ณต์žกํ•œ ์กฐ์ธ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋น„๊ต 2-3 ํ…Œ์ด๋ธ” ์กฐ์ธ 4+ ํ…Œ์ด๋ธ” ์กฐ์ธ ๋น ๋ฆ„ ๋Š๋ฆผ Query Builder Eloquent

๋ณต์žกํ•œ ์กฐ์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” Query Builder๊ฐ€ Eloquent๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ํ…Œ์ด๋ธ” ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๊ทธ ์ฐจ์ด๊ฐ€ ๋” ์ปค์ง‘๋‹ˆ๋‹ค. ์ด๋Š” Eloquent์˜ ๊ฐ์ฒด ๋งคํ•‘ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

5.3 ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

์ˆ˜์ฒœ ๋˜๋Š” ์ˆ˜๋งŒ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ์˜ ์„ฑ๋Šฅ ๋น„๊ต:

๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๋น„๊ต ๋Œ€๋Ÿ‰ ์กฐํšŒ ๋Œ€๋Ÿ‰ ์‚ฝ์ž…/์ˆ˜์ • ๋น ๋ฆ„ ๋Š๋ฆผ Query Builder Eloquent

๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—์„œ๋Š” Query Builder๊ฐ€ Eloquent๋ณด๋‹ค ํ›จ์”ฌ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๋Ÿ‰ ์‚ฝ์ž…์ด๋‚˜ ์ˆ˜์ • ์ž‘์—…์—์„œ ๊ทธ ์ฐจ์ด๊ฐ€ ๋”์šฑ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. ์ด๋Š” Eloquent์˜ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

5.4 ์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ

COUNT, SUM, AVG ๋“ฑ์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์„ฑ๋Šฅ ๋น„๊ต:

์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์„ฑ๋Šฅ ๋น„๊ต COUNT SUM ๋ณตํ•ฉ ์ง‘๊ณ„ ๋น ๋ฆ„ ๋Š๋ฆผ Query Builder Eloquent

์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ์—์„œ๋Š” Query Builder์™€ Eloquent์˜ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์ง‘๊ณ„ ์ž‘์—…์—์„œ๋Š” ๊ฑฐ์˜ ๋™์ผํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ด์ง€๋งŒ, ๋ณต์žกํ•œ ์ง‘๊ณ„ ์ž‘์—…์—์„œ๋Š” Query Builder๊ฐ€ ์•ฝ๊ฐ„ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

5.5 ์ข…ํ•ฉ ๋ถ„์„

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

์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ „๋žต์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ผ๋ฐ˜์ ์ธ CRUD ์ž‘์—…์—๋Š” Eloquent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„์™€ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ์กฐ์ธ์ด๋‚˜ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Query Builder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์—์„œ๋Š” raw SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
  • ์บ์‹ฑ ์ „๋žต์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ, Query Builder์™€ Eloquent๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ํ˜ผ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ’ก

6. ๊ฒฐ๋ก  ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ ๐ŸŽฏ

Laravel์˜ Query Builder์™€ Eloquent ORM์€ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๋ก ๊ณผ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

6.1 Query Builder ์‚ฌ์šฉ ๊ถŒ์žฅ ์ƒํ™ฉ

  • ๋ณต์žกํ•œ ์กฐ์ธ์ด๋‚˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ (์˜ˆ: ์ˆ˜๋งŒ ๊ฑด์˜ ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…/์ˆ˜์ •)
  • ์„ฑ๋Šฅ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์—์„œ
  • raw SQL์— ๊ฐ€๊นŒ์šด ์„ธ๋ฐ€ํ•œ ์ฟผ๋ฆฌ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

6.2 Eloquent ์‚ฌ์šฉ ๊ถŒ์žฅ ์ƒํ™ฉ

  • ์ผ๋ฐ˜์ ์ธ CRUD ์ž‘์—…์—์„œ
  • ๋ณต์žกํ•œ ๋ชจ๋ธ ๊ด€๊ณ„๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ
  • ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
  • ๋ชจ๋ธ ์ด๋ฒคํŠธ๋‚˜ ๊ธ€๋กœ๋ฒŒ ์Šค์ฝ”ํ”„ ๋“ฑ Eloquent์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

6.3 ์ตœ์ ์˜ ์‚ฌ์šฉ ์ „๋žต

์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”Œ๋žซํผ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ „๋žต์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Laravel ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ์ „๋žต Eloquent ์ผ๋ฐ˜์ ์ธ CRUD ๋ชจ๋ธ ๊ด€๊ณ„ ๊ด€๋ฆฌ Query Builder ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ Raw SQL ๊ทน๋„๋กœ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

1. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ๋ฒ• ์ฑ„ํƒ: Eloquent์™€ Query Builder๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ํ˜ผ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ CRUD ์ž‘์—…์—๋Š” Eloquent๋ฅผ, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋‚˜ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—๋Š” Query Builder๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง: Laravel Debugbar๋‚˜ Telescope์„ ํ™œ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

3. ์บ์‹ฑ ์ „๋žต ์ˆ˜๋ฆฝ: ์ž์ฃผ ์ ‘๊ทผ๋˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ: ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์— ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

5. ์ฒญํฌ ์ฒ˜๋ฆฌ: ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ์ฒญํฌ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

6. Eager Loading ํ™œ์šฉ: N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Eloquent์˜ Eager Loading ๊ธฐ๋Šฅ์„ ์ ๊ทน ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

7. ์ฃผ๊ธฐ์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ: ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•œ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฆฌ๋ทฐํ•˜๊ณ  ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

ย 

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