[PostgreSQL] ์œˆ๋„์šฐ ํ•จ์ˆ˜(Window Functions)์˜ ๊ฐœ๋…, ์„ฑ๋Šฅ ๋ฐ ์‚ฌ์šฉ๋ฒ• (over, sum/rank/ntitle/cume_dist ๋“ฑ...)

[PostgreSQL] ์œˆ๋„์šฐ ํ•จ์ˆ˜(Window Functions)์˜ ๊ฐœ๋…, ์„ฑ๋Šฅ ๋ฐ ์‚ฌ์šฉ๋ฒ• (over, sum/rank/ntitle/cume_dist ๋“ฑ...)

1. ์œˆ๋„์šฐ ํ•จ์ˆ˜ (Window Functions)๋ž€? ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ํ–‰๊ณผ ํ–‰ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ํ•จ์ˆ˜์ด๋‹ค. ์ด ๊ธฐ๋Šฅ์€ย ์ผ๋ฐ˜ ์ง‘๊ณ„ํ•จ์ˆ˜์˜ ์—ฐ์‚ฐ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ผ๋ฐ˜ ์ง‘๊ณ„ํ•จ์ˆ˜๊ฐ€ ํ–‰ ๊ฐ๊ฐ์„ ๋‹จ์ผ ๊ทธ๋ฃนํ™”ํ•ด์„œ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ˜๋ฉด์—, ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ๊ฐ๊ฐ์˜ ํ–‰๋“ค์ด ๊ทธ๋ฃนํ™”๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ณ„๋„์˜ ID๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ํ˜„์žฌ row์˜ ์ •๋ณด๋ณด๋‹ค ๋” ๋งŽ์€ ์ •๋ณด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ผ๋ฐ˜์ง‘๊ณ„ํ•จ์ˆ˜ : COUNT() + GROUP BY-> ๊ทธ๋ฃน๋ณ„ 1๊ฐœ์˜ ํ–‰ ์ถœ๋ ฅ (๊ทธ๋ฃน ๊ฐœ์ˆ˜๋งŒํผ ์ถœ๋ ฅ, ์ž๋ฅด๊ธฐ + ์ง‘์•ฝ) ์œˆ๋„์šฐ์ง‘๊ณ„ํ•จ์ˆ˜ : COUNT() OVER (PARTITION BY) -> ID๊ฐœ์ˆ˜๋งŒํผ ํ–‰ ์ถœ๋ ฅ (ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค, ์ž๋ฅด๊ธฐ) ...

[PostgreSQL] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์†(Inheritance)์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์„ฑ๋Šฅ๋น„๊ต (Inherits, Only)

[PostgreSQL] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์†(Inheritance)์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ• ๋ฐ ์„ฑ๋Šฅ๋น„๊ต (Inherits, Only)

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์†(Inheritance)์ด๋ž€? ์ƒ์†์€ ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ด๋‹ค. PostgreSQL์€ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ์˜ ์ƒ์† ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์— ์ƒˆ๋กœ์šด ๊ฐ€๋Šฅ์„ฑ๋“ค์„ ์—ด์–ด์ค€๋‹ค. ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์†์„ฑ ๋ฐ ์ธ๋ฑ์Šค ๋“ฑ์˜ ํŠน์ง•๋“ค๋„ ์ž์‹ ํ…Œ์ด๋ธ”๋กœ ์ƒ์†๋˜๊ธฐ์— ์ƒํ™ฉ์— ๋”ฐ๋ผ ํšจ์œจ์ ์ธ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 2.๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์†(Inherits) ๋ฐฉ๋ฒ• ๋‹ค์Œ ์˜ˆ์ œ๋Š” PostgreSQL ๊ณต์‹ ๋ฌธ์„œ์˜ ์˜ˆ์ œ์ด๋‹ค. Capitals - ์ด๋ฆ„, ์ธ๊ตฌ, ๊ณ ๋„, ์š”์•ฝ์–ด๋ฅผ ํฌํ•จํ•œ ์ˆ˜๋„์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ…Œ์ด๋ธ” Cities - ์ด๋ฆ„, ์ธ๊ตฌ, ๊ณ ๋„๋ฅผ ํฌํ•จํ•œ ๋„์‹œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ…Œ์ด๋ธ” ...

[PostgreSQL] ๋‚ ์งœ ํ˜•ํƒœ ๊ฒ€์ฆํ•˜๊ธฐ (ERROR: date/time field value out of range)

[PostgreSQL] ๋‚ ์งœ ํ˜•ํƒœ ๊ฒ€์ฆํ•˜๊ธฐ (ERROR: date/time field value out of range)

1. ๋‚ ์งœ ํ˜•ํƒœ๋กœ ํ˜• ๋ณ€ํ™˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ ๋‚ ์งœํ˜•ํƒœ๋กœ ํ˜• ๋ณ€ํ™˜์„ ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. -- Unixํƒ€์ž„(int)ํ˜• ๋ณ€ํ™˜ SELECT to_timestamp(1658792421) -- varchar ํƒ€์ž… ๋ณ€ํ™˜ SELECT to_timestamp('20231026','yyyymmdd') -- ๋‚ ์งœํ˜•์„ char๋กœ ๋ณ€ํ™˜ SELECT to_char(to_timestamp(1658792421), 'DD-MM-YYYY') 2. ์œ ํšจํ•œ ๋‚ ์งœํ˜•ํƒœ ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ ์ •์ œ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•„ ์กฐํšŒํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ์— ๋‚ ์งœ์œ ํ˜•์—์„œ ๋ฒ—์–ด๋‚œ ๋ฐ์ดํ„ฐย ('20231301',202301', '20231232' ๋“ฑ)๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์„ ๊ฒฝ์šฐ ์กฐํšŒ ์ž์ฒด๊ฐ€ ์•ˆ๋œ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ ๋‚ ์งœ ๊ทœ๊ฒฉ์— ๋งž์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์ • ํ›„ ์—ฐ์‚ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐย ๋‹จ์ˆœ ์›”๋ณ„ ์ผ€์ด์Šค๋ฌธ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‚ ์งœ ์œ ํ˜•์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ row๋งˆ๋‹ค ๋‚ ์งœ ์œ ํ˜•์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜ ์œค๋‹ฌ์„ ์ฒดํฌํ•  ์ˆ˜ ์—†๋‹ค. ...

[Java] ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ (Virtual Threads)๋ž€? ์ž๋ฐ” 21์˜ ๊ฐ€์ƒ์Šค๋ ˆ๋“œ (Virtual Thread) ๋„์ž…

[Java] ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ (Virtual Threads)๋ž€? ์ž๋ฐ” 21์˜ ๊ฐ€์ƒ์Šค๋ ˆ๋“œ (Virtual Thread) ๋„์ž…

1. ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ (Virtual Threads)๋ž€? 2023.09.20 ๋ฆด๋ฆฌ์ฆˆ ๋œ ์ž๋ฐ” 21์— ์ถ”๊ฐ€๋œ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ(Virtual Threads)๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด์ž. ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋Š” ๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ๋กœ, ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์˜ ๋™์‹œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑ, ์œ ์ง€ ๋ฐ ๊ด€์ฐฐํ•˜๋Š” ์ž‘์—… ๊ณต์ˆ˜๋ฅผ ํฌ๊ฒŒ ์ค„์ธ๋‹ค.ย OS์Šค๋ ˆ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  JVM ์ž์ฒด์ ์œผ๋กœ ์Šค์ผ€์ฅด๋ง์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ์ด๋ฉฐ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜์‹ญ - ์ˆ˜๋ฐฑ๋งŒ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ• ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. 2. ์ž๋ฐ”์˜ ์ „ํ†ต์ ์ธ ์Šค๋ ˆ๋“œ ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ทผ 30๋…„๋™์•ˆ ๋™์‹œ์„ฑ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์Šค๋ ˆ๋“œ์— ์˜์กดํ•ด์™”๋‹ค. ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ๊ตฌ๋ฌธ๋“ค์€ ์Šค๋ ˆ๋“œ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋ฉฐ, 1๊ฐœ์˜ ์š”์ฒญ์„ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์Šคํ”„๋ง์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ์ด๊ธฐ์—, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์ด ๋™์‹œ์— ๋ฐœ์ƒํ•˜๋ฉฐ ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์Šค๋ ˆ๋“œ์˜ ์ˆ˜ ์—ญ์‹œ ์ฆ๊ฐ€ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ํ•˜๋Š” ์Šคํƒ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ์˜ Context๋„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์˜ˆ๋ฅผ๋“ค์–ด Exception์€ ๋™์ผ ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ์˜ ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด throw/catch ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์Šค๋ ˆ๋“œ์˜ Stack trace๋กœ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๊ณ , ๊ทธ ์™ธ Debugger (์Šค๋ ˆ๋“œ์˜ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๊ตฌ๋ฌธ์„ ์ฐจ๋ก€๋กœ ํ›‘์–ด๋ณธ๋‹ค), Profiler(JFR) (์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ํ–‰๋™์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ์Šค๋ ˆ๋“œ์˜ ์„ฑ๋Šฅ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.)๋„ ๋ชจ๋‘ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ...

[Java] Switch์™€ else-if์˜ ํšจ์œจ์„ฑ ๋น„๊ต (Switch์™€ else-if ์ค‘์— ์–ด๋–ค ๊ฑธ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?)

[Java] Switch์™€ else-if์˜ ํšจ์œจ์„ฑ ๋น„๊ต (Switch์™€ else-if ์ค‘์— ์–ด๋–ค ๊ฑธ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?)

1. Switch์™€ if-else ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‹คํ–‰์„ ๋ถ„๊ธฐํ•ด์•ผ ํ•  ๋•Œ ์šฐ๋ฆฌ๋Š” ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค. Java์—์„œ๋Š” switch / if-else ๋‘ ์กฐ๊ฑด๋ฌธ์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ณดํ†ต ๊ฐ€๋…์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒ์„ ๋งŽ์ด ํ•˜๋‚˜, ํšจ์œจ์„ฑ ๊ธฐ์ค€์—์„œ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ๋น„๊ตํ•ด๋ณด๋ ค ํ•œ๋‹ค. ์ผ๋‹จ switch ๊ตฌ๋ถ„์—์„œ Strings๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด, Theย switch statement compares theย Stringย object in its expression with the expressions associated with eachย caseย label as if it were using theย String.equalsย method; consequently, the comparison ofย Stringย objects inย switchย statements is case sensitive. The Java compiler generates generally more efficient bytecode fromย switchย statements that useย Stringย objects than from chainedย if-then-elseย statements. ...