์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
BEST

JPA (ORM) ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ณ ์„ฑ๋Šฅ SQL (High-Performance SQL)

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์„ธ์š”!

์ค‘๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[SQL, performance-tuning] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • Hibernate ๋ฐ JPA ๋ถ„์•ผ์˜ ์„ธ๊ณ„์ ์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” SQL ์„ฑ๋Šฅ ํŠœ๋‹๊ณผ ์ตœ์ ํ™” ๋…ธํ•˜์šฐ๋ฅผ ๋ฐฐ์›๋‹ˆ๋‹ค.

  • ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ํšจ์œจ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ณ ๋ คํ•œ SQL ์ž‘์„ฑ๋ฒ•์„ ์ตํž™๋‹ˆ๋‹ค.

  • JOIN, ์„œ๋ธŒ์ฟผ๋ฆฌ, CTE, ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๋“ฑ ๋‹ค์–‘ํ•œ SQL ์ „๋žต ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ORM ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • Oracle, SQL Server, MySQL, PostgreSQL ๋“ฑ ๋Œ€ํ‘œ์ ์ธ RDBMS์—์„œ์˜ ์„ฑ๋Šฅ ๊ฐœ์„  ์ฟผ๋ฆฌ ์ „๋žต์„ ๋น„๊ตํ•˜๊ณ , ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž˜ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์„ ๋ช…ํ™•ํžˆ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

  • Upsert, Merge์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ์ฟผ๋ฆฌ ๊ธฐ๋ฒ•์„ ๋‹ค์–‘ํ•œ RDBMS ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ์‹ค๋ฌด ์‚ฌ๋ก€ ์ค‘์‹ฌ์œผ๋กœ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์ด์Šˆ, ๋ฝํ‚น ์ „๋žต, JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๊ณ ๊ธ‰ ์ธ๋ฑ์‹ฑ ์ „๋žต ๋“ฑ ์ตœ์‹  SQL ์ฃผ์ œ๋ฅผ ๋‹ค๋ค„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์—ญ๋Ÿ‰์„ ํ‚ค์›๋‹ˆ๋‹ค.

Vlad๋‹˜-๋ ๋ฐฐ๋„ˆ(์ˆ˜์ •)

๊ธ€๋กœ๋ฒŒ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๋ฐฐ์šฐ๋Š”
๊ณ ์„ฑ๋Šฅ SQL ํŠœ๋‹ ์ „๋žต

์ง€๊ธˆ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋Š” SQL, ์ •๋ง ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‚˜์š”?

DB ์„ฑ๋Šฅ์€ ์ฝ”๋“œ ์ตœ์ ํ™”๊ฐ€ ์•„๋‹Œ โ€˜์ฟผ๋ฆฌ ์„ค๊ณ„โ€™์—์„œ ํŒ๊ฐ€๋ฆ„๋‚ฉ๋‹ˆ๋‹ค.

"์ฟผ๋ฆฌ์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๋Š” ์ˆœ๊ฐ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค."

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด SQL์„ ์ž‘์„ฑํ•˜๋ฉฐ ๋กœ์ง ๊ตฌํ˜„์—๋Š” ์ต์ˆ™ํ•˜์ง€๋งŒ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋Š” ๊ฑด ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ–ˆ๋А๋ƒ์ž…๋‹ˆ๋‹ค.

์กฐ์ธ์˜ ์ˆœ์„œ, ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์œ„์น˜, ์ธ๋ฑ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ๋„ ์ˆ˜์‹ญ ๋ฐฐ์˜ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์‹คํ–‰ ๊ณ„ํš(Execution Plan)์„ ์ฝ์ง€ ์•Š๊ณ , ORM์ด ์ƒ์„ฑํ•œ SQL์„ ๊ทธ๋Œ€๋กœ ์“ฐ๊ฑฐ๋‚˜ ์ต์ˆ™ํ•œ ํŒจํ„ด๋งŒ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒฝ์šฐ, ๋ณ‘๋ชฉ์˜ ์‹ค์ฒด๋Š” ๋Š˜ โ€˜๊นŠ์ˆ™์ด ์ˆจ๊ฒจ์ง„ ์ฑ„โ€™ ์šด์˜์— ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค.

๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๊ฐ€ DBA ์ˆ˜์ค€์˜ ๊นŠ์€ SQL ์ดํ•ด๋„๋ฅผ ๊ฐ–์ถœ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฒฐ์ฝ” ๋†“์ณ์„  ์•ˆ ๋  ํ•ต์‹ฌ์ ์ธ SQL ์„ฑ๋Šฅ ๊ธฐ๋ฒ•๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ORM๋งŒ ์ž˜ ์•Œ๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ SQL๋งŒ ์ž˜ ์•„๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ์œ ๊ธฐ์ ์œผ๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด ๊ฐ•์˜๋Š” ORM๊ณผ SQL์„ ๋ถ„๋ฆฌ๋œ ๊ธฐ์ˆ ์ด ์•„๋‹Œ ์„œ๋กœ ์‹œ๋„ˆ์ง€๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋กœ์„œ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

SQL์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์˜์‚ฌ๊ฒฐ์ •์˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์ฟผ๋ฆฌ์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด, ์„ฑ๋Šฅ ๊ฐœ์„ ์€ ๋” ์ด์ƒ ๊ฐ์ด ์•„๋‹Œ, ์„ค๊ณ„์˜ ์˜์—ญ์ด ๋ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š”
SQL ์‚ฌ๊ณ ๋ฒ•

"๊ณ ์„ฑ๋Šฅ SQL" ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉด

๊ธฐ๋Šฅ ๋‚˜์—ด์ด ์•„๋‹Œ, ์ „๋žต์  ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์‹ค์ „ SQL

JOIN, ์„œ๋ธŒ์ฟผ๋ฆฌ, CTE, ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ๊ทธ ์ž์ฒด๋ณด๋‹ค ์–ด๋–ป๊ฒŒ ์กฐํ•ฉํ•˜๊ณ , ์–ธ์ œ ์„ ํƒํ•˜๋А๋ƒ๊ฐ€ ์‹ค์ „์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ•์˜๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ์„ ๋‚˜์—ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ „๋žต์„ ๋น„๊ตํ•˜๊ณ , ๊ทธ์ค‘ ์ตœ์ ์˜ ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์‹ค๋ฌดํ˜• ์‚ฌ๊ณ  ํ๋ฆ„์„ ํ›ˆ๋ จํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ โ€˜์ง์ ‘ ์ฒด๋“ํ•˜๋Š”โ€™ ํ•™์Šต ๋ฐฉ์‹

๋‹จ์ˆœํžˆ ๋ฌธ๋ฒ•์„ ์ตํžˆ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‹ค์ œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‘๋‹ต ์†๋„๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉฐ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์ง€์ , ๊ฐœ์„ ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ผ์ธ ๋‹จ์œ„๋กœ ์งš์–ด๊ฐ€๋ฉฐ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. PostgreSQL, MySQL, Oracle ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ๋„ ํ†ตํ•˜๋Š” SQL ์„ค๊ณ„ ์›๋ฆฌ ์ค‘์‹ฌ์œผ๋กœ ์„ค๋ช…๋˜์–ด, ํŠน์ • ํˆด์— ์˜์กดํ•˜์ง€ ์•Š๊ณ ๋„ ์„ฑ๋Šฅ ํŠœ๋‹์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๋ชธ์— ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜๋ถ€ํ„ฐ JSON๊นŒ์ง€, ๊ณ ๊ธ‰ SQL๋กœ ์‹ค๋ฌด ๋ ˆ๋ฒจ์—…

์œˆ๋„์šฐ ํ•จ์ˆ˜, ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€, ๋‚™๊ด€์ /๋น„๊ด€์  ๋ฝํ‚น, JSON ์ฒ˜๋ฆฌ๊นŒ์ง€โ€”์‹ค๋ฌด์—์„œ ์ž์ฃผ ์ ‘ํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ ์ตํžˆ๊ธฐ ์–ด๋ ค์šด ๊ณ ๊ธ‰ ์ฃผ์ œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ด ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœ ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋Šฅ๋ ฅ์„ ๋„˜์–ด,
์„ฑ๋Šฅยท๋™์‹œ์„ฑยท๋ฐ์ดํ„ฐ ์„ค๊ณ„๊นŒ์ง€ ์•„์šฐ๋ฅด๋Š” ์‹ค์ „ํ˜• SQL ์‹ค๋ ฅ์„ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ

๋‹ค์–‘ํ•œ JOIN ๋ฐฉ์‹๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

INNER, OUTER, NATURAL, LATERAL JOIN ๋“ฑ SQL์˜ ๋‹ค์–‘ํ•œ ์กฐ์ธ ๋ฐฉ์‹์„ ๋น„๊ตํ•˜๊ณ , ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์„ ํƒ ๊ธฐ์ค€๊ณผ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ณ„ํš์„ ์ค‘์‹ฌ์œผ๋กœ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ๋ฆ„์„ ํ•™์Šตํ•˜๋ฉฐ, ์‹ค์ œ๋กœ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์ง€์ ์„ ์‹๋ณ„ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฆ…๋‹ˆ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ํŒŒ์ƒ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•œ ์ฟผ๋ฆฌ ๊ตฌ์กฐํ™”

JOIN๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•˜๊ณ , EXISTS, IN, ANY/ALL ๋“ฑ ๋‹ค์–‘ํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ ํ‘œํ˜„์‹์˜ ๋‚ด๋ถ€ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. Derived Table, ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)์„ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๊ณ , ๊ฐ€๋…์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ํ™•๋ณดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€ ์ฟผ๋ฆฌ์™€ ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

Recursive CTE๋ฅผ ํ™œ์šฉํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋‚˜ ์กฐ์ง๋„์ฒ˜๋Ÿผ ๊ณ„์ธต์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ์žฌ๊ท€ ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๋ฐฉ์‹๊ณผ ์„ฑ๋Šฅ ์ธก๋ฉด ๊ณ ๋ ค์‚ฌํ•ญ์„ ํ•จ๊ป˜ ๋‹ค๋ฃจ๋ฉฐ, ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„์— ํ•„์š”ํ•œ SQL ๊ธฐ์ˆ ์„ ์ตํž™๋‹ˆ๋‹ค.

์œˆ๋„์šฐ ํ•จ์ˆ˜๋กœ ๋ณต์žกํ•œ ๋ถ„์„ ์ฟผ๋ฆฌ ๊ตฌ์„ฑํ•˜๊ธฐ

ROW_NUMBER, RANK, DENSE_RANK, LAG/LEAD ๋“ฑ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ์ง‘๊ณ„, ์ •๋ ฌ, ์ˆœ์œ„ ๊ตฌํ•˜๊ธฐ ๋“ฑ ๋ณต์žกํ•œ ๋ถ„์„ ๋กœ์ง์„ SQL๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์œˆ๋„์šฐ ํ”„๋ ˆ์ž„๊ณผ PARTITION BY์˜ ๋‚ด๋ถ€ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ณ , ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ๋Š” SQL ํ™œ์šฉ ๊ธฐ๋ฒ•

Upsert์™€ Merge ๊ตฌ๋ฌธ์„ ํ™œ์šฉํ•ด ์‚ฝ์ž…๊ณผ ๊ฐฑ์‹ ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํžˆ๊ณ , Pivot/Unpivot์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€ํ˜•ํ•˜๋Š” ๊ธฐ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ SQL ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ , ๋‹ค์–‘ํ•œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋ฐฉ์‹์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ตํžˆ๋ฉฐ ์ฟผ๋ฆฌ ํ๋ฆ„์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜๊ณผ JSON ์ฒ˜๋ฆฌ๊นŒ์ง€ ์•„์šฐ๋ฅด๋Š” ๊ณ ๊ธ‰ SQL

ACID ํŠน์„ฑ๊ณผ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋ฒ•์„ ์ตํžˆ๊ณ , ๋น„๊ด€์ /๋‚™๊ด€์  Locking ์ „๋žต์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. JSON ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ SQL์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ํ•จ๊ป˜ ๋‹ค๋ฃจ๋ฉฐ, ํ˜„๋Œ€์ ์ธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ๋œ SQL ์—ญ๋Ÿ‰์„ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ORM์€ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ๊ฐœ์„ ์— ๋Œ€ํ•œ ๊ฐˆ๋ง์ด ์žˆ์œผ์‹  ๋ถ„

  • SQL ํŠœ๋‹์€ DBA ๋ถ„๋“ค์ด ๋‹ด๋‹นํ•ด์„œ SQL ์„ฑ๋Šฅ ๊ฐœ์„  ๊ฒฝํ—˜์— ๊ฐˆ๋ง์ด ์žˆ์œผ์‹  ๋ถ„

  • SQL์€ ์“ฐ์ง€๋งŒ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐฉ๋ฒ•์ด๋‚˜ ์ „๋žต ์„ ํƒ ๊ธฐ์ค€์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋А๋ผ๋Š” ๋ถ„

  • ์‹ค๋ฌด์—์„œ ๋งˆ์ฃผ์น˜๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ๊ฐ์„ ํ‚ค์šฐ๊ณ  ์‹ถ์€ ๋ถ„

  • JOIN, CTE, ํŠธ๋žœ์žญ์…˜, JSON ๋“ฑ ๊ณ ๊ธ‰ SQL ์ฃผ์ œ๊นŒ์ง€ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • JAVA, Spring Framework ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

  • ๊ธฐ๋ณธ์ ์ธ SQL ์ž‘์„ฑ ๋Šฅ๋ ฅ

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ๊ฒฝํ—˜

์•ˆ๋…•ํ•˜์„ธ์š”
Vlad Mihalcea์ž…๋‹ˆ๋‹ค.

1,041

๋ช…

์ˆ˜๊ฐ•์ƒ

39

๊ฐœ

์ˆ˜๊ฐ•ํ‰

4.4

์ 

๊ฐ•์˜ ํ‰์ 

2

๊ฐœ

๊ฐ•์˜

My name is Vlad Mihalcea, and Iโ€™m a Java Champion. I wrote the High-Performance Java Persistence book, which became one of the best-selling Java books on Amazon.

 

I'm currently developing the amazing Hypersistence Optimizer, and in my free time, I develop various open-source projects (e.g., Hypersistence Utils and FlexyPool) and answer questions on StackOverflow.

 

์ €๋Š” Java ์ฑ”ํ”ผ์–ธ์ด์ž Hibernate ORM ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ๊ธฐ์—ฌ์ž์ž…๋‹ˆ๋‹ค. Hypersistence Optimizer ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, ์ด ๋„๊ตฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ๊ณผ ๋งคํ•‘์„ ์Šค์บ”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์•Œ๋ ค์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

StackOverflow์—์„œ Hibernate, Java, JPA ํƒœ๊ทธ์— ๊ด€๋ จ๋œ ์ˆ˜์ฒœ ๊ฐœ์˜ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋ฉฐ ๊ณจ๋“œ ๋ฐฐ์ง€๋ฅผ ํš๋“ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ์— ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹ ๋ขฐํ•˜๋ฉฐ, ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ฐธ์—ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ๋„๊ตฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด Hypersistence Utils๋‚˜ FlexyPool๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

79๊ฐœ โˆ™ (7์‹œ๊ฐ„ 37๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

12๊ฐœ

4.8

12๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ํ™”๋ฅผ์ฐธ์ž๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ํ™”๋ฅผ์ฐธ์ž

    ์ˆ˜๊ฐ•ํ‰ 6

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    8% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

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

    • Vlad Mihalcea
      ์ง€์‹๊ณต์œ ์ž

      Thank you for appreciating my course. I'm glad you enjoyed it.

  • ๋ชจ๊น…๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ๋ชจ๊น…

    ์ˆ˜๊ฐ•ํ‰ 23

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    34% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ํƒ‘ ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ค์‹์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š”์ง€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚จ์€ ๊ฐ•์˜๋„ ๊ผญ๊ผญ ์”น์–ด๋จน๊ฒ ์Šต๋‹ˆ๋‹ค!

    • Vlad Mihalcea
      ์ง€์‹๊ณต์œ ์ž

      Thank you for your review. I'm happy you found the course useful.

  • asdf๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    asdf

    ์ˆ˜๊ฐ•ํ‰ 10

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    37% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์–ด๋–ค ์ „๋žต์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€์ง€ ์ž˜ ์„ค๋ช…ํ•ด ์ฃผ์‹ญ๋‹ˆ๋‹ค. SQL ์—ญ๋Ÿ‰์„ ํ‚ค์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋งŽ์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • Vlad Mihalcea
      ์ง€์‹๊ณต์œ ์ž

      Thanks and stay tuned for more.

  • hahahl๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    hahahl

    ์ˆ˜๊ฐ•ํ‰ 42

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    9% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์‚ฌ๊ณ ์˜ ํ๋ฆ„์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋„์›€์ด ๋งŽ์ด ๋ฉ๋‹ˆ๋‹ค. ์˜์–ด๋กœ ๋“ฃ๊ณ  ๋ณต์Šต์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด 2๋ฐฐ์† ํ•œ๊ตญ์–ด๋กœ ๋“ฃ๋Š”๋ฐ ์ „ํ˜€ ์–ด์ƒ‰ํ•จ์ด ์—†๋„ค์š”

    • Vlad Mihalcea
      ์ง€์‹๊ณต์œ ์ž

      I'm glad you liked it. My course was recorded in English, but the Inflearn platform managed to provide the dubbing and subtitiles in Korean.

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฐ€์ฆˆ์•™๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฐ€์ฆˆ์•™

    ์ˆ˜๊ฐ•ํ‰ 2

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    6% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์ง„์งœ ๋ธ”๋กœ๊ทธ๋กœ๋งŒ ๋ณด๋‹ค๊ฐ€ ์ด๋ฒˆ์— ๊ฐ•์˜๋‚˜์™“๋‹คํ•ด์„œ ๋ฐ”๋กœ ์‹ ์ฒญํ–‡์–ด์—ฌ!! ์ข‹์€๊ฐ•์˜ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ•˜๊ณ  ํ•œ๊ตญ์–ด๋กœ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๋ถ€๋‹ด๊ฐ์—†์ด ๋“ฃ๊ณ ์ž‡์–ด์š”~~~

    • Vlad Mihalcea
      ์ง€์‹๊ณต์œ ์ž

      Thank you for such a quick enrolment and enjoy the video lessons.

๋น„์Šทํ•œ ๊ฐ•์˜

๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

์—ฐ๊ด€ ๋กœ๋“œ๋งต

๊ฐ•์˜๊ฐ€ ํฌํ•จ๋œ ๋กœ๋“œ๋งต์œผ๋กœ ํ•™์Šตํ•ด ๋ณด์„ธ์š”!

์›” โ‚ฉ45,760

5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

โ‚ฉ228,800