์ „์ฒด ๊ธ€

Database/SQL

[๐Ÿ“• ์นœ์ ˆํ•œ SQL ํŠœ๋‹] 1-2. SQL ๊ณต์œ  ๋ฐ ์žฌ์‚ฌ์šฉ

์ด๋ฒˆ์—๋Š” ์†Œํ”„ํŠธ ํŒŒ์‹ฑ๊ณผ ํ•˜๋“œ ํŒŒ์‹ฑ์˜ ์ฐจ์ด์  ์•Œ์•„๋ณด๊ธฐ.   ์†Œํ”„ํŠธ ํŒŒ์‹ฑ  vs ํ•˜๋“œ ํŒŒ์‹ฑ์‚ฌ์šฉ์ž๊ฐ€ SQL๋ฌธ์„ ์ „๋‹ฌํ•˜๋ฉด DBMS๋Š” SQL์„ ํŒŒ์‹ฑํ•˜๊ณ  ํ•ด๋‹น SQL์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ์— ์กด์žฌํ•˜๋Š”์ง€๋ถ€ํ„ฐ ํ™•์ธ์บ์‹œ์—์„œ ์ฐพ์œผ๋ฉด ๊ณง๋ฐ”๋กœ ์‹คํ–‰ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€์ง€๋งŒ, ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ์ตœ์ ํ™” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นจโœจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ๋ž€ ?SQL ํŒŒ์‹ฑ, ์ตœ์ ํ™”, ๋กœ์šฐ ์†Œ์Šค ์ƒ์„ฑ ๊ณผ์ •์„ ๊ฑฐ์ณ ์ƒ์„ฑํ•œ ๋‚ด๋ถ€ ํ”„๋กœ์‹œ์ €๋ฅผ ๋ฐ˜๋ณต ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์บ์‹ฑํ•ด ๋‘๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ, SGA ๊ตฌ์„ฑ ์š”์†Œ์ž„โœจ SGA (System Global Area) ๋ž€ ?์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์ œ์–ด ๊ตฌ์กฐ๋ฅผ ์บ์‹ฑํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๐Ÿ”น ์†Œํ”„ํŠธ ํŒŒ์‹ฑSQL์„ ์บ์‹œ์—์„œ ์ฐพ์•„ ๊ณง๋ฐ”๋กœ ์‹คํ–‰๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ ๐Ÿ”น ํ•˜๋“œ ํŒŒ์‹ฑ์บ์‹œ์—์„œ ์ฐพ๋Š” ๊ฑธ ์‹คํŒจํ•ด ์ตœ์ ํ™”..

Database/SQL

[๐Ÿ“• ์นœ์ ˆํ•œ SQL ํŠœ๋‹] ํ†ต๊ณ„์ •๋ณด์™€ ๋น„์šฉ ๊ณ„์‚ฐ ์›๋ฆฌ

1. ํ†ต๊ณ„ ์ •๋ณด์™€ ๋น„์šฉ ๊ณ„์‚ฐ ์›๋ฆฌ๋ณต์žกํ•œ ๋น„์šฉ ๊ณ„์‚ฐ ์›๋ฆฌ๊นŒ์ง€ ํ•™์Šตํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ, ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํ†ต๊ณ„์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€๋Š” ๊ฐ„๋žตํ•˜๊ฒŒ ์•Œ์•„์•ผํ•˜๋ฏ€๋กœ ์ •๋ฆฌํ•จ ์„ ํƒ๋„์™€ ์นด๋””๋„๋ฆฌํ‹ฐ, ํ†ต๊ณ„์ •๋ณด์— ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ํ•ญ๋ชฉ๋“ค์ด ์žˆ๋Š”์ง€ ํ™•์ธ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ํ†ต๊ณ„์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ์›๋ฆฌ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌ  ์„ ํƒ๋„์™€ ์นด๋””๋„๋ฆฌํ‹ฐโœณ๏ธ ์„ ํƒ๋„ (Selectivity)  ์ „์ฒด ๋ ˆ์ฝ”๋“œ ์ค‘์—์„œ ์กฐ๊ฑด์ ˆ์— ์˜ํ•ด ์„ ํƒ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ๋น„์œจ  ๐Ÿ‘‰ ์„ ํƒ๋„ = 1 / NDV* * NDV (Number of Distinct Values) : ์ปฌ๋Ÿผ ๊ฐ’ ์ข…๋ฅ˜ ๊ฐœ์ˆ˜ โœณ๏ธ ์นด๋””๋„๋ฆฌํ‹ฐ (Cardinality)  ์ „์ฒด ๋ ˆ์ฝ”๋“œ ์ค‘์—์„œ ์กฐ๊ฑด์ ˆ์— ์˜ํ•ด ์„ ํƒ๋˜๋Š” ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜ ๐Ÿ‘‰ ์นด๋””๋„๋ฆฌํ‹ฐ = ์ด ๋กœ์šฐ ์ˆ˜ x ์„ ํƒ๋„ = ์ด ๋กœ์šฐ ์ˆ˜ / NDV ๐Ÿง ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํ’ˆ ..

Database/SQL

[๐Ÿ“• ์นœ์ ˆํ•œ SQL ํŠœ๋‹] 1-1. SQL ํŒŒ์‹ฑ๊ณผ ์ตœ์ ํ™”

1์žฅ์—์„œ๋Š” ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ SQL์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€, ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฝ๊ณ  ์ €์žฅํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด์ž.  1. SQL ํŒŒ์‹ฑ๊ณผ ์ตœ์ ํ™”โœณ๏ธ SQL ํŒŒ์‹ฑ  ํŒŒ์‹ฑ ํŠธ๋ฆฌ ์ƒ์„ฑ : SQL๋ฌธ์„ ์ด๋ฃจ๋Š” ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„์„ํ•ด์„œ ํŒŒ์‹ฑ ํŠธ๋ฆฌ ์ƒ์„ฑ Syntax ์ฒดํฌ : ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜ ํ™•์ธ ๐Ÿ‘‰ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๋˜๋Š” ์ˆœ์„œ, ๋ˆ„๋ฝ๋œ ํ‚ค์›Œ๋“œ ํ™•์ธSemantic ์ฒดํฌ : ์˜๋ฏธ์ƒ ์˜ค๋ฅ˜ ํ™•์ธ ๐Ÿ‘‰ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ” ๋˜๋Š” ์ปฌ๋Ÿผ ์‚ฌ์šฉ์—ฌ๋ถ€, ์‚ฌ์šฉํ•œ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๊ถŒํ•œ ํ™•์ธ โœณ๏ธ SQL ์ตœ์ ํ™”  ํŒŒ์‹ฑ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ์„œ DBMS ๋‚ด๋ถ€์—์„œ ํ”„๋กœ์‹œ์ €๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ปดํŒŒ์ผํ•ด์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ์ „ ๊ณผ์ • ๐Ÿ‘‰ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์—ญํ•  ์ˆ˜ํ–‰์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ๋ฏธ๋ฆฌ ์ˆ˜์ง‘ํ•œ ์‹œ์Šคํ…œ ๋ฐ ์˜ค๋ธŒ์ ํŠธ ํ†ต๊ณ„์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค..

Database/SQL

[๐Ÿ“• Real MySQL 8.0 (2)] ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐ ์ตœ์ ํ™” - MySQL ๋‚ด์žฅํ•จ์ˆ˜(2)

1. ๊ฐ’์˜ ๋น„๊ต์™€ ๋Œ€์ฒด (CASE WHEN ... THEN ... END)CASE WHEN์€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ SQL๊ตฌ๋ฌธํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” SWITCH ๊ตฌ๋ฌธ๊ณผ ๊ฐ™์€ ์—ญํ•  CASE๋กœ ์‹œ์ž‘ํ•˜๊ณ , END๋กœ ๋๋‚˜์•ผ ํ•จWHEN ... THEN ... ์€ ํ•„์š”ํ•œ ๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ’์„ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ผ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด์ „์ธ์ง€ ์ดํ›„์ธ์ง€ ๋น„๊ตํ•ด ์„ค๋ช…์„ ๋ถ™์ด๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉCASE WHEN ์ ˆ์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ THEN ์ดํ•˜์˜ ํ‘œํ˜„์‹์ด ์‹คํ–‰๋จ๐Ÿ”น Marketing(d001) ๋ถ€์„œ์— ์†Œ์†๋œ ์ ์ด ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์›์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ธ‰์—ฌ ์กฐํšŒSELECT de.dept_no, e.first_name, e.gender, (SELECT s.salary FROM salaries s WHERE ..

Database/SQL

[๐Ÿ“• Real MySQL 8.0 (2)] ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐ ์ตœ์ ํ™” - MySQL ๋‚ด์žฅํ•จ์ˆ˜(1)

1. NULL ๊ฐ’ ์ฒ˜๋ฆฌโœณ๏ธ NULL ๊ฐ’ ๋น„๊ต ๋ฐ ๋Œ€์ฒด (IFNULL, ISNULL) ๐Ÿ”ท IFNULL()์ปฌ๋Ÿผ์ด๋‚˜ ํ‘œํ˜„์‹์˜ ๊ฐ’์ด NULL์ธ์ง€ ๋น„๊ตํ•˜๊ณ , NUnLL์ด๋ฉด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” NULL์ธ์ง€ ์•„๋‹Œ์ง€ ๋น„๊ตํ•˜๋ ค๋Š” ์ปฌ๋Ÿผ์ด๋‚˜ ํ‘œํ˜„์‹๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ’์ด NULL์ผ ๊ฒฝ์šฐ ๋Œ€์ฒดํ•  ๊ฐ’์ด๋‚˜ ์ปฌ๋Ÿผ ์„ค์ •ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ NULL์ด ์•„๋‹ˆ๋ฉด ์ฒซ ๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ’์„, ์ฒซ ๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ’์ด NULL์ด๋ฉด ๋‘ ๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ’ ๋ฐ˜ํ™˜ ๐Ÿ”ท ISNULL()์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ‘œํ˜„์‹์ด๋‚˜ ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด NULL์ธ์ง€ ์•„๋‹Œ์ง€ ๋น„๊ตNULL์ด๋ฉด TRUE(1), NULL์ด ์•„๋‹ˆ๋ฉด FALSE(0) ๋ฐ˜ํ™˜     2. ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ฒ˜๋ฆฌโœณ๏ธ ํ˜„์žฌ ์‹œ๊ฐ ์กฐํšŒ (NOW, SYSDATE) ๐Ÿ”ท NOW()ํ•˜๋‚˜์˜ SQL์—์„œ ๊ฐ™..

Database/SQL

[๐Ÿ“• Real MySQL 8.0 (2)] ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐ ์ตœ์ ํ™” - ์‹œ์Šคํ…œ ๋ณ€์ˆ˜์™€ ์—ฐ์‚ฐ์ž

์ฟผ๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜๊ฒŒ ํ•˜๋ ค๋ฉด DB ์„œ๋ฒ„์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ• ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.๊ทธ๋Ÿฌ๋ฏ€๋กœ SQL ์ž‘์„ฑ ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ทœ์น™, ๋‚ด๋ถ€์ ์ธ ์ฒ˜๋ฆฌ๋ฐฉ์‹(์˜ตํ‹ฐ๋งˆ์ด์ €)์— ๋Œ€ํ•œ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค. ์ด ์ฑ•ํ„ฐ์—์„œ๋Š” ์ฟผ๋ฆฌ์˜ ํŒจํ„ด๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€์™€ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์ƒ๋‹นํžˆ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ์ฟผ๋ฆฌ ํŒจํ„ด์„ ๋‹ค๋ฃฌ๋‹ค.   1. ์ฟผ๋ฆฌ ์ž‘์„ฑ๊ณผ ์—ฐ๊ด€๋œ ์‹œ์Šคํ…œ ๋ณ€์ˆ˜โœณ๏ธ SQL ๋ชจ๋“œ sql_mode๋ผ๋Š” ์‹œ์Šคํ…œ ์„ค์ •์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์ด ๋™์‹œ์— ์„ค์ •๋  ์ˆ˜ ์žˆ๋‹ค.โ›” MySQL ์„œ๋ฒ„์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด sql_mode ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ž„์ฐธ๊ณ ๋กœ MySQL 8.0 ์„œ๋ฒ„์˜ sql_mode ๊ธฐ๋ณธ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.- ONLY_FULL_GROUP_BY- STRICT_TRANS_TABLES- N..

Spring/Spring WebFlux

[๐Ÿ“• Reactive] Operators ไธญ

Sequence ๋ณ€ํ™˜ Operatorโœณ๏ธ mapupstream์—์„œ emit๋œ ๋ฐ์ดํ„ฐ๋ฅผ mapper function์„ ์‚ฌ์šฉํ•ด ๋ณ€ํ™˜ํ•œ ํ›„, downstream์œผ๋กœ emitmap() operator ๋‚ด๋ถ€์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ sequence๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ ์ง€์› Mono mono = Mono.just("Reactor") .map(String::toUpperCase);mono.subscribe(System.out::println); // ์ถœ๋ ฅ: REACTOR โœณ๏ธ flatMapupstream์—์„œ emit๋œ ๋ฐ์ดํ„ฐ๊ฐ€ Inner Sequence์—์„œ ํ‰ํƒ„ํ™” ์ž‘์—…์„ ๊ฑฐ์น˜๋ฉด์„œ ํ•˜๋‚˜์˜ Sequence๋กœ ๋ณ‘ํ•ฉ๋˜์–ด downstream์œผ๋กœ emitpublic class Example { public..

Spring/Spring WebFlux

[๐Ÿ“• Reactive] Spring WebFlux

Spring WebFlux ๊ฐœ์š”Spring 5.0๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์ ์€ ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋กœ ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋™๊ธฐ Non-Blocking I/O ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.     Spring WebFlux ๊ธฐ์ˆ  ์Šคํƒ โœณ๏ธ Spring MVC์™€ Spring WebFlux ๊ธฐ์ˆ  ์Šคํƒ ๋น„๊ต  ๐Ÿ”ท ์„œ๋ฒ„Spring MVC์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›ŒํฌApache Tomcat๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ Blocking I/O ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘Spring WebFluxNon-Blocking I/O ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” Netty ๋“ฑ์˜ ์„œ๋ฒ„ ์—”์ง„์—์„œ ๋™์ž‘ ๐Ÿ”ท ์„œ๋ฒ„ APISpring MVC์„œ๋ธ”๋ฆฟ API ์‚ฌ์šฉSpring WebFlux Jetty๋‚˜ Undertow ๊ฐ™์€ ์„œ๋ฒ„ ์—”์ง„์—์„œ ์ง€์›ํ•˜๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ์Šค..

soogoori
๐Ÿƒ๐Ÿป‍โ™€๏ธ์Šคํ…๋ฐ”์ด์Šคํ…