PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

Vladimir Sitnikov์˜ 2016๋…„ ์ดˆ ๋ณด๊ณ ์„œ "PostgreSQL๊ณผ JDBC๊ฐ€ ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"์˜ ๋…น์ทจ๋ก์„ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ข‹์€ ์˜คํ›„์—์š” ๋‚ด ์ด๋ฆ„์€ ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„์ž…๋‹ˆ๋‹ค. ์ €๋Š” NetCracker์—์„œ 10๋…„ ๋™์•ˆ ์ผํ•ด์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์ฃผ๋กœ ์ƒ์‚ฐ์„ฑ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Java์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ, SQL๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์ด ์ œ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜์€ ํšŒ์‚ฌ์—์„œ PostgreSQL์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ๊ฒช์—ˆ๋˜ ์ผ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ Java๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ค๋Š˜ ์ œ๊ฐ€ ๋ง์”€๋“œ๋ฆด ๋‚ด์šฉ์€ ๋‹จ์ง€ ์ž๋ฐ”์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์Šต์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด์•ผ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง์— ๋Œ€ํ•ด.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์— ๋Œ€ํ•ด.
  • ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ์— ๋Œ€ํ•ด์„œ๋„์š”.
  • ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ๊ธฐ์— ๋ฌปํ˜€ ์žˆ๋Š” ์ˆ˜์ค‘ ๊ฐˆํ€ด์— ๋Œ€ํ•ด์„œ๋„์š”.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ”์—์„œ ํ•˜๋‚˜์˜ ํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ํŒŒ๋ฐ์—๋Š” 20๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ด 20๋ฐ€๋ฆฌ์ดˆ๋Š” ๋งŽ์€ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์š”์ฒญ์ด 100๊ฐœ๋ผ๋ฉด ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ์Šคํฌ๋กคํ•˜๋Š” ๋ฐ ์ดˆ๋‹น ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ธฐ์ง€๊ฐ€ ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌด์—‡์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์€ ๊ฐ„๋‹จํ•œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡์ด ์ข‹์€๊ฐ€์š”? ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ฐ›์•„ ๋ณด๋‚ธ๋‹ค๋Š” ์‚ฌ์‹ค ๊ทธ ์ด์ƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

https://github.com/pgjdbc/pgjdbc/pull/478

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

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

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋‹จ์ˆœ ์ฟผ๋ฆฌ์™€ ํ™•์žฅ ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ฐ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํŠน๋ณ„ํ•œ ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ผํšŒ์„ฑ ์‹คํ–‰์—๋Š” ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ์™„๋ฃŒํ•˜๊ณ  ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ผ๋ถ€ ๊ณ ์„ฑ๋Šฅ ์‹œ์Šคํ…œ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

ํ™•์žฅ ์ฟผ๋ฆฌ โ€“ ๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •๋ง๋กœ ์šฐ๋ฆฌ์—๊ฒŒ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ๋ถ„์„ ๋น„์šฉ๋งŒ ์ ˆ๊ฐ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ „์†ก ๋น„์šฉ์ด ์ ˆ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

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

์„ฑ๋ช…์„œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์ด์— ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์‹ค์ˆ˜๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ดœ์ฐฎ์•„์š”. ๋ชจ๋“  ์ฑ…์— ์ด๋ ‡๊ฒŒ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์›ํ•œ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์™œ? "close" ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์ด๋Š” ๋งˆ์น˜ ํก์—ฐ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "PARSE EXECUTE DEALLOCATE"๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

์™œ ์ด ๋ชจ๋“  ์ถ”๊ฐ€์ ์ธ ๋ช…๋ น๋ฌธ ์ƒ์„ฑ ๋ฐ ์–ธ๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์•„๋ฌด๋„ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœPreparedStatements์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ผ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฅผ ๋‹ซ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ซ๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์šฐ๋ฆฌ๋Š” ๊ฑด๊ฐ•ํ•œ ์‚ฌ๋žŒ๋“ค์ฒ˜๋Ÿผ ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ ์ผํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„ฑ๋ช…์„œ๋ฅผ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๊ณ  ์ค€๋น„ํ•œ ๋‹ค์Œ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ(์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด ์ˆ˜๋ช… ์ค‘ ํ•œ ๋ฒˆ) ๊ตฌ๋ฌธ ๋ถ„์„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ REST์—์„œ ๋™์ผํ•œ ๋ช…๋ น๋ฌธ ID๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์–ด๋–ป๊ฒŒ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„ ๋‹ซ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ โ€œ์ค€๋น„ํ•˜๋‹คโ€ โ€œ์‹คํ–‰ํ•˜๋‹คโ€๋ผ๊ณ  ์”๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

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

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

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ผํ•˜๋Š” ๋ฐฉ๋ฒ•? ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•ญ์ƒ ๋ฌธ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฑ…์—๋Š” ๋‹ซ์œผ๋ผ๊ณ  ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ˆ„์ถœ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  PostgreSQL์€ ์ฟผ๋ฆฌ๋ฅผ ์บ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ฐ ์„ธ์…˜์ด ์ž์ฒด์ ์œผ๋กœ ์ด ์บ์‹œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋„ ๊ตฌ๋ฌธ ๋ถ„์„์— ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

ํ‰์†Œ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์€ ๋ชจ๋“  ๊ฒƒ์„ PgSQL๋กœ ๋ž˜ํ•‘ํ•˜์ž๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์บ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์ด 100500๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์š”์ฒญ์„ ์ˆ˜๋™์œผ๋กœ ์ ˆ์ฐจ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ ์•„๋‹ˆ.

๋‘ ๋ฒˆ์งธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๊ฐ€์ ธ์™€์„œ ์ž๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ ์—ด๊ณ  ์ ˆ๋‹จ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณด๊ณ  ๋˜ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

https://github.com/pgjdbc/pgjdbc/pull/319

์ด๋Š” 2015๋…„ XNUMX์›”์— ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋” ํ˜„๋Œ€์ ์ธ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” PgSQL ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋Š” ๋ชจ๋“  ์˜ค๋ฒ„ํ—ค๋“œ ๋น„์šฉ์„ ๊ฑฐ์˜ XNUMX์œผ๋กœ ์ค„์ด๋Š” ๋ฐ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ผํšŒ์„ฑ ์š”์ฒญ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ์ค€๋น„ ๋ฌธ์€ 5๋ฒˆ์งธ ์‹คํ–‰ ์‹œ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋‹น์‹ ์€ ๋ฌผ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€“ ์ˆซ์ž๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹น์‹ ์€ ๋ฌด์—‡์„ ์–ป๊ณ  ์žˆ๋‚˜์š”? ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ์ˆซ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ฟผ๋ฆฌ๋Š” OLTP ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์•ฝ 20๋ฐ€๋ฆฌ์ดˆ๋ฅผ ์†Œ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰์—๋Š” 0,5๋ฐ€๋ฆฌ์ดˆ, ๊ตฌ๋ฌธ ๋ถ„์„์—๋Š” 20๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ โ€“ 10KiB์˜ ํ…์ŠคํŠธ, 170์ค„์˜ ๊ณ„ํš. OLTP ์š”์ฒญ์ž…๋‹ˆ๋‹ค. 1, 5, 10์ค„์„ ์š”์ฒญํ•˜๋ฉฐ ๋•Œ๋กœ๋Š” ๊ทธ ์ด์ƒ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” 20๋ฐ€๋ฆฌ์ดˆ๋ฅผ ์ „ํ˜€ ๋‚ญ๋น„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ 0์œผ๋กœ ์ค„์˜€์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‚˜์š”? Java๊ฐ€ ์žˆ์œผ๋ฉด ์ตœ์‹  ๋ฒ„์ „์˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ปํ•˜์‹ญ์‹œ์˜ค.

๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค. ์ด๊ฒƒ๋„ ํ•„์š”ํ• ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด PL 8 ๋˜๋Š” LibPQ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์ตœ์ข… ์–ธ์–ด์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์‹คํ–‰์ด๋‚˜ ๊ตฌ๋ฌธ ๋ถ„์„์ด ์•„๋‹Œ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” ํ™•์ธํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ? ๋ชจ๋“  ๊ฒƒ์ด ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ทธ ์™ธ์—๋Š” ์˜ค๋ฅ˜์™€ ์ผ๋ถ€ ํŠน์ด์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ๋‹น์žฅ ๊ทธ๋“ค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ์‚ฐ์—… ๊ณ ๊ณ ํ•™, ์šฐ๋ฆฌ๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ, ์šฐ๋ฆฌ๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์š”์ฒญ์ด ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ. ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚œ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฌธ์ž์—ด์„ ์„œ๋กœ ๋ถ™์—ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์‚ฌ๋žŒ์€ ์™œ ๋‚˜์œ๊ฐ€์š”? ๋งค๋ฒˆ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์˜ hashCode๋ฅผ ๋‹ค์‹œ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ CPU ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ํ•ด์‹œ์—์„œ๋„ ๊ธด ์š”์ฒญ ํ…์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฐ๋ก ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์„ ์ƒ์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ปํ•˜์‹ญ์‹œ์˜ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋‹ค์Œ ๋ฌธ์ œ. ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ข…๋ฅ˜์˜ NULL์ด ์žˆ๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์–ด๋–ค ์ข…๋ฅ˜๋ผ๋„ ์กด์žฌํ•˜๋„๋ก ํ•˜๋Š” ORM์ด ์žˆ์Šต๋‹ˆ๋‹ค. Int๋ผ๋ฉด setInt๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  NULL์ธ ๊ฒฝ์šฐ ํ•ญ์ƒ VARCHAR๋กœ ๋‘ก๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ตญ NULL์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์–ด๋–ค ์ฐจ์ด๋ฅผ ๋งŒ๋“ค๊นŒ์š”? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์‚ฌ์ง„์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ „ํ˜€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ์ด๊ฒƒ์ด ์ˆซ์ž๋ผ๊ณ  ๋งํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ์— VARCHAR์ด๋ผ๊ณ  ๋งํ•˜๋ฉด ์„œ๋ฒ„ ์ค€๋น„ ๋ฌธ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ์„ ์–ธ๋ฌธ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์—ด์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ํ˜ผ๋™๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. NULL์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ReadyStatements๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„์— ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผฐ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ทธ๋“ค์ด ์šด์ „์‚ฌ๋ฅผ ๋ฐ๋ ค๊ฐ”์„ ์ˆ˜๋„ ์žˆ์–ด์š”. ๊ทธ๋ฆฌ๊ณ  ์ƒ์‚ฐ์„ฑ๋„ ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ƒํ™ฉ์ด ๋‚˜๋น ์กŒ์Šต๋‹ˆ๋‹ค.

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

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

์š”์ ์€ ๋‘ ๊ฐœ์˜ ์—ด์ด ์žˆ๊ณ  ๊ฐ ์—ด์€ ์ธ๋ฑ์‹ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ NULL ์—ด์—๋Š” ๋ฐฑ๋งŒ ๊ฐœ์˜ ํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์—ด์—๋Š” 20์ค„๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ธ๋”ฉ๋œ ๋ณ€์ˆ˜ ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ธ๋”ฉ๋œ ๋ณ€์ˆ˜๋กœ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๋ฉด, ์ฆ‰ "?" ๋˜๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด "$1"์„ ์ž…๋ ฅํ•˜๋ฉด ๊ฒฐ๊ตญ ๋ฌด์—‡์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

์ฒซ ๋ฒˆ์งธ ์‹คํ–‰์€ ์˜ˆ์ƒ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” ์กฐ๊ธˆ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋ญ”๊ฐ€๊ฐ€ ์บ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์…‹์งธ, ๋„ท์งธ, ๋‹ค์„ฏ์งธ. ๊ทธ๋Ÿผ ์พ…-๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Ÿฐ ๊ฒƒ. ๊ทธ๋ฆฌ๊ณ  ์ตœ์•…์˜ ์ƒํ™ฉ์€ ์—ฌ์„ฏ ๋ฒˆ์งธ ์‹คํ–‰์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์‹คํ–‰ ๊ณ„ํš์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋ ค๋ฉด ์ •ํ™•ํžˆ XNUMX๋ฒˆ์˜ ์‹คํ–‰์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ˆ„๊ฐ€ ์•Œ์•˜์Šต๋‹ˆ๊นŒ?

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

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

์ด์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ๋ฌผ๋ก  ์—ฌ๊ธฐ์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€์ •ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ +0, OFFSET 0์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๋‹น์‹ ์€ ๊ทธ๋Ÿฌํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์š”์ฒญ์— "+0"์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš์„ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ๊ฐœ๋ฐœ์ž๋Š” ์š”์ฒญ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ "๋ถ„์„ ์„ค๋ช…"์„ 6๋ฒˆ ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 5์ด๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์„ธ ๋ฒˆ์งธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. pgsql-hackers์—๊ฒŒ ํŽธ์ง€๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธ€์„ ์ผ๋Š”๋ฐ ์ด๊ฒƒ์ด ๋ฒ„๊ทธ์ธ์ง€ ๊ธฐ๋Šฅ์ธ์ง€๋Š” ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

๋ฒ„๊ทธ์ธ์ง€ ๊ธฐ๋Šฅ์ธ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๋™์•ˆ ๊ณ ์น˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์„ ๋ฐ›์•„ "+0"์„ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๊ธฐํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€, ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•  ํ•„์š”์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ด ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. "+0" ์—ด์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ณ  ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ด๊ฒƒ์ด 6์˜ ๋ฒ•์น™์ด๋‹ค. ์ด์ œ ํ˜„์žฌ ๋ฒ„์ „์—์„œ๋Š” ๋ฐ”์ธ๋”ฉ๋œ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ์ž‘์—…์„ 6๋ฒˆ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ธ๋”ฉ๋œ ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ตญ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ด ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ๊นŒ๋‹ค๋กœ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์–ผ๋งˆ๋‚˜ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ ๋ฒ„๊ทธ, ์ €๊ธฐ ๋ฒ„๊ทธ. ์‚ฌ์‹ค ๋ฒ„๊ทธ๋Š” ์–ด๋””์—๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘ ๊ฐœ์˜ ์Šคํ‚ค๋งˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” S๊ฐ€ ์žˆ๋Š” ๊ตฌ์„ฑํ‘œ A์™€ ํ…Œ์ด๋ธ” S๊ฐ€ ํฌํ•จ๋œ ๋‹ค์ด์–ด๊ทธ๋žจ B. ์ฟผ๋ฆฌ โ€“ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๊ฐ–๊ฒŒ ๋ ๊นŒ์š”? ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทœ์น™์€ - ๋ฒ„๊ทธ๋Š” ์–ด๋””์—๋‚˜ ์žˆ์œผ๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ด์ œ ์งˆ๋ฌธ์€ "์™œ?"์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ…Œ์ด๋ธ”์„ ์ฐพ์„ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” "search_path" ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋Š” ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฌธ์ œ๋Š” ์„œ๋ฒ„์—์„œ ์ค€๋น„๋œ ๋ช…๋ น๋ฌธ์ด ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด search_path๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์˜์‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋ถ€๋ถ„์€ ์ƒˆ๋กœ์šด ์˜๋ฏธ๋ฅผ ์–ป์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋ฌผ๋ก  ์ด๋Š” ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋‹ค๋ฅธ์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฒ„์ „ 9.1์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ด์ „ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” ๋ฒ„๊ทธ๋ฅผ ์žก์•„์„œ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Œ์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

search_path + ์„œ๋ฒ„ ์ค€๋น„ ๋ช…๋ น๋ฌธ ์„ค์ • =
์บ์‹œ๋œ ๊ณ„ํš์€ ๊ฒฐ๊ณผ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์น˜๋ฃŒํ•˜๋‚˜์š”? ๊ฐ„๋‹จํ•œ ์กฐ๋ฆฌ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€ ๋งˆ์„ธ์š”. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ search_path๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ† ๋ก (์˜ˆ: ์—ด๊ธฐ, ํ† ๋ก , ์ถ”๊ฐ€)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•Œ๋ ค์•ผ ํ•œ๋‹ค๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์„ค๋“ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€œ๋ณด์„ธ์š”. ์—ฌ๊ธฐ์—์„œ ๊ท€ํ•˜์˜ ๊ฐ’์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๋ฌธ์„ ์žฌ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ์š”?โ€ ์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋น„๋ฐ€๋ฆฌ์— ์ž‘๋™ํ•˜๋ฉฐ ๋‚ด๋ถ€ ์–ด๋”˜๊ฐ€์—์„œ ๋ช…๋ น๋ฌธ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ•์กฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Java์—์„œ๋Š” ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PL/pgSQL์—์„œ๋„ ๋™์ผํ•œ ๋‚ด์šฉ์„ ์ผ๋Œ€์ผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ฑฐ๊ธฐ์—์„œ ์žฌํ˜„๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ข€ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ ์„ ํƒ์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„ ํƒํ•˜๊ณ  ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ๋งŒ ๊ฐœ์˜ ํ–‰์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ค„์€ 128ํ‚ฌ๋กœ๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. ์•ฝ XNUMXGB์˜ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Java ์‹œ์Šคํ…œ์—๋Š” XNUMXMB์˜ ์ž‘์—… ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ฑ…์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋Œ€๋กœ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, resultSet์„ ์—ด๊ณ  ๊ฑฐ๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค. ์ž‘๋™ํ• ๊นŒ์š”? ๊ธฐ์–ต์—์„œ ์‚ฌ๋ผ์งˆ๊นŒ? ์ข€ ์ฝ์–ด์ค„๋ž˜? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฏฟ์œผ์„ธ์š”. Postgres๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋ฏฟ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” OFMemory์—์„œ ๋–จ์–ด์งˆ๊นŒ์š”? OutOfMemory๋ฅผ ๊ฒฝํ—˜ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ž…๋‹ˆ๊นŒ? ๊ทธ ํ›„์—๋Š” ๋ˆ„๊ฐ€ ๊ณ ์ณค๋‚˜์š”? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ๋งŒ ๊ฐœ์˜ ํ–‰์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋ƒฅ ๊ณจ๋ผ์„œ ์„ ํƒํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. OFFSET/LIMIT๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์„ ํƒํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ž…๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  autoCommit์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ์ž…๋‹ˆ๊นŒ?

ํ‰์†Œ์™€ ๊ฐ™์ด ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ€์žฅ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ต์…˜์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ‘์ž๊ธฐ autoCommit์„ ๋„๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ ๊ฒ๋‹ˆ๊นŒ? ๊ณผํ•™์€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ์ ์œผ๋กœ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ PgJDBC๋„ ์˜ˆ์™ธ๋Š” ์•„๋‹ˆ๋ฉฐ ๋ชจ๋“  ํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

FetchSize ํ…Œ๋งˆ์—๋Š” ๋ณ€ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ณ„๋„์˜ ๋ช…๋ น๋ฌธ ์ˆ˜์ค€์—์„œ ์—ฌ๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ 10, 50์œผ๋กœ ์„ ํƒํ•˜๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” autoCommit์„ ๋Œ ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. autoCommit์„ ๋„๋ฉด ์ž‘๋™์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์–ด๋””์„œ๋‚˜ setFetchSize๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์ฒด ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์„ค์ •์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๋งํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ ๋ฒˆ์— 10๊ฐœ์˜ ํ–‰์„ ์„ ํƒํ•˜๋Š” ๋“ฑ ์†Œ๋Ÿ‰์„ ์„ ํƒํ•˜๋ฉด ๊ฐ„์ ‘๋น„๊ฐ€ ๋งค์šฐ ์ปค์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฐ’์€ ์•ฝ XNUMX์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋ฌผ๋ก  ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•˜์ง€๋งŒ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. defaultRowFetchSize๋ฅผ XNUMX ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ๋งŒ์กฑํ•˜์„ธ์š”.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋ฐ์ดํ„ฐ ์‚ฝ์ž…์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค. ์‚ฝ์ž…์ด ๋” ์‰ฝ๊ณ  ๋‹ค์–‘ํ•œ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด INSERT, VALUES์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. "INSERT SELECT"๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์—๋Š” ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ฑ…์—์„œ๋Š” Batch ๋ฌธ์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ , ์ฑ…์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋ณต์žกํ•œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Postgres์—๋Š” ๋†€๋ผ์šด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, COPY๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ด๋ฅผ ์ธก์ •ํ•˜๋ฉด ๋‹ค์‹œ ํฅ๋ฏธ๋กœ์šด ๋ฐœ๊ฒฌ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ช…๋ น์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์‹ค์ œ๋กœ TCP๋Š” ์ด๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ค‘์ด๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ ์š”์ฒญ์„ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์š”์ฒญ์„ ์ฝ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‘๋‹ต์„ ์ฝ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๋™๊ธฐํ™” ํŒจํ‚ท์„ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ ์ƒํ˜ธ ์ž‘์šฉ, ์ถ”๊ฐ€ ์‹œ๊ฐ„ ๋‚ญ๋น„.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„๊ทธ๋ฆฌ๊ณ  ๋” ๋งŽ์ด ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์ƒํ™ฉ์€ ๋”์šฑ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ๋งค์šฐ ๋น„๊ด€์ ์ด๋ฉฐ ๋ผ์ธ ํฌ๊ธฐ ๋“ฑ์— ๋”ฐ๋ผ ์•ฝ 200๋ผ์ธ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

https://github.com/pgjdbc/pgjdbc/pull/380

ํ•œ ์ค„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ชจ๋“  ์ž‘์—… ์†๋„๊ฐ€ 10๋ฐฐ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚œ๋‹ค. ์™œ? ๋Š˜ ๊ทธ๋ ‡๋“ฏ์ด ์ด์™€ ๊ฐ™์€ ์ƒ์ˆ˜๋Š” ์ด๋ฏธ ์–ด๋”˜๊ฐ€์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ’ "128"์€ ์ผ๊ด„ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

Java ๋งˆ์ดํฌ๋กœ๋ฒค์น˜๋งˆํฌ ํ•˜๋„ค์Šค

์ •์‹ ๋ฒ„์ „์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋‹คํ–‰์ž…๋‹ˆ๋‹ค. ์ถœ์‹œ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์˜๋ฏธ๋Š” ํ˜„๋Œ€ ๋ฒ„์ „์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

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

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

COPY๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๊ทธ๋ฆฌ๊ณ  ๊ตฌ์กฐ๋ฌผ์—์„œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์œ ํ˜•์„ ์„ ์–ธํ•˜๊ณ  ๋ฐฐ์—ด๊ณผ INSERT๋ฅผ ํ…Œ์ด๋ธ”์— ์ง์ ‘ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

pgjdbc/ubenchmsrk/InsertBatch.java ๋งํฌ๋ฅผ ์—ด๋ฉด ์ด ์ฝ”๋“œ๋Š” GitHub์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์š”์ฒญ์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์šฐ๋ฆฌ๋Š” ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๊นจ๋‹ฌ์€ ๊ฒƒ์€ ๋ฐฐ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ผ๊ด„ ์ฒ˜๋ฆฌ ์˜ต์…˜์€ XNUMX์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ผํšŒ์„ฑ ์‹คํ–‰์— ๋น„ํ•ด ์‹คํ–‰ ์‹œ๊ฐ„์ด ์‚ฌ์‹ค์ƒ XNUMX์ž…๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐœ์˜ ์—ด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ด ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ๋ชจ๋‘ ๋Œ€๋žต ๋น„์Šทํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  COPY๊ฐ€ ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์ด๋•Œ ์กฐ๊ฐ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. VALUES ๊ฐ’ 10๊ฐœ, VALUES ๊ฐ’ 1๊ฐœ, VALUES ๊ฐ’ 2๊ฐœ๋ฅผ ๋งํ•˜๊ฑฐ๋‚˜ ๊ทธ ์ค‘ 4๊ฐœ๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ˆ˜ํ‰์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 128, XNUMX, XNUMX, XNUMX. ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๊ทธ๋ ค์ง„ Batch Insert๋ฅผ ๋ณด๋ฉด ๊ธฐ๋ถ„์ด ํ›จ์”ฌ ์ข‹์•„์ง€๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ํ•œ ๋ฒˆ์— XNUMX๊ฐœ๋ฅผ ์‚ฝ์ž…ํ•ด๋„ VALUES์— ์กฐ๊ธˆ ๋” ๋„ฃ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฐฐ๋กœ ์ข‹์•„์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. EXECUTE ์ž‘์—…์ด ์ ์Šต๋‹ˆ๋‹ค.

์†Œ๊ทœ๋ชจ ๋ณผ๋ฅจ์—์„œ COPY๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋‘ ๊ฐœ๋Š” ๊ทธ๋ฆฌ์ง€๋„ ์•Š์•˜์–ด์š”. ๊ทธ๋“ค์€ ์ฒœ๊ตญ์— ๊ฐ‘๋‹ˆ๋‹ค. ์ฆ‰, COPY๋ฅผ ์œ„ํ•œ ๋…น์ƒ‰ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

COPY๋Š” ๋ฐ์ดํ„ฐ ํ–‰์ด XNUMX๊ฐœ ์ด์ƒ์ผ ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ฐ๊ฒฐ์„ ์—ฌ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฝ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ ์ €๋Š” ์ด ๋ฐฉํ–ฅ์œผ๋กœ ํŒŒ๊ณ ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Batch๋ฅผ ์ตœ์ ํ™”ํ–ˆ์ง€๋งŒ COPY๋Š” ์ตœ์ ํ™”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์—๋Š” ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์˜๋ฏธ๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ตฌ์กฐ๋‚˜ ์˜๋ฆฌํ•œ ๋ฐ”ํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL๊ณผ JDBC๋Š” ๋ชจ๋“  ์ฃผ์Šค๋ฅผ ์งœ๋ƒ…๋‹ˆ๋‹ค. ๋ธ”๋ผ๋””๋ฏธ๋ฅด ์‹œํŠธ๋‹ˆ์ฝ”ํ”„

์˜ค๋Š˜ ๋ณด๊ณ ์„œ์—์„œ ๋ฌด์—‡์„ ๋นผ๋‚ด์•ผ ํ• ๊นŒ์š”?

  • ReadyStatement๋Š” ์šฐ๋ฆฌ์˜ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์‚ฐ์„ฑ์— ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ณ ์— ํฐ ๋ฉ์–ด๋ฆฌ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  EXPLAIN ANALYZE๋ฅผ 6๋ฒˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฟผ๋ฆฌ์˜ ๋‚˜๋จธ์ง€ ๋น„์œจ์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด OFFSET 0๊ณผ +0๊ณผ ๊ฐ™์€ ํŠธ๋ฆญ์„ ํฌ์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€