AWS JDBC Wrapper Driver
AWS Advanced JDBC Wrapper Driver
AWS ์์๋ Amazon Aurora๋ฅผ ์ํ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ ํฌํจํ Advanced JDBC Wrapper Driver์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์กฐ์ง์์๋ Aurora PostgreSQL์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์ PostgreSQL JDBC Driver๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ฌ์ฉ์ ๋ฐ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ์ ์ธ์ฆ ์ ์ฌ์ฉํด์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ, ๋ฌ๊ธ์์ด AWS ์ธํ๋ผ ์ฌ๊ตฌ์ฑ๊ณผ ๋๋ถ์ด IAM ์ญํ ์ ํ์ ํฌํจํ IAM ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ๋์ ํ๊ฒ ๋์์ต๋๋ค. AWS JDBC Wrapper๋ IAM ๊ธฐ๋ฐ ์ธ์ฆ์ ์ํ ํ๋ฌ๊ทธ์ธ ๋ฟ๋ง ์๋๋ผ ํ์ผ์ค๋ฒ, ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ถํ ๋ฑ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ์ง์ํฉ๋๋ค.
PostgreSQL 2์ฐจ์ ๋ฐฐ์ด์ ๋ํ ์ด์
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
๊ธฐ์กด์ ์ฌ์ฉํ๋ ์คํ๋ง ๋ฐ์ดํฐ์์ค์ ๋๋ผ์ด๋ฒ๋ฅผ PostgreSQL JDBC Driver ์์ software.amazon.jdbc.Driver ๋ก ๋ณ๊ฒฝํจ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ค์ด๋ ์ผ๋ถ SQL ํธ์ถ์์ ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ํ์ฌ ์กฐ์ง์์๋ JPA ๋๋ MyBatis์ ๊ฐ์ SQL ๋งคํ ๊ธฐ์ ์ ์ฌ์ฉํ์ง ์๊ณ ์ผ๋ฐ ์คํ๋ง JDBC์ SQL ํจ์ ํธ์ถ๊ณผ ํจ๊ป RowMapper์ ๋ํ ๊ตฌํ์ฒด๋ฅผ ๋ณ๋๋ก ๋ง๋ค์ด์ ํ์ฉํ๊ณ ์์ต๋๋ค. ๊ธฐ์กด์๋ PostgreSQL JDBC Driver๋ฅผ ์ฌ์ฉํ์ผ๋ฏ๋ก RowMapper ๋ด ์ฝ๋์๋ PGobject ๋๋ PgArray์ ๊ฐ์ ํด๋์ค๋ฅผ ์ง์ ์ ์ผ๋ก ์์กดํ๋๋ก ๋์ด์์์ต๋๋ค. AWS JDBC Wrapper๋ ๊ธฐ์กด ๋๋ผ์ด๋ฒ์ ๋ํด ๊ธฐ๋ฅ์ ๋ณด์ํ๊ธฐ ์ํด ๋ํํ ๋๋ผ์ด๋ฒ๋ก PgResultSet์ ResultSetWrapper๋ก PgArray๋ ArrayWrapper๋ก ๋ณ๊ฒฝ๋์ด๋ฒ๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ Wrapper ํด๋์ค ์์๋ ์๋ณธ ResultSet๊ณผ Array๋ฅผ ํฌํจํ๊ณ ์๊ฒ ๋ฉ๋๋ค.
๊ธฐ์กด์ ๋ณ๋๋ก ๊ตฌํ๋ RowMapper ์์๋ ๋ฐฐ์ด ๋๋ ์ปฌ๋ ์ ํ์ ์ ํ๋๋ฅผ ๋์ํ๊ธฐ ์ํ์ฌ PgArray์ ๋ํ ์ธ์คํด์ค์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด instanceOf ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฑ๋์ด์์์ต๋๋ค. AWS JDBC Wrapper ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ ์๊ฐ ArrayWrapper ํด๋์ค๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก PgArray์ ๋ํ ๋ก์ง์ ์ํ๋์ง ์๊ณ ๋ฌด์๋์ด ์ต์ข ์ ์ผ๋ก๋ GSON์ ์ฌ์ฉํ์ฌ ์ ๋ค๋ฆญ ํ์ ์ ๋ํ ๋ณํ์ ์๋ํ๋ ๊ฒ ์ ๋๋ค.
Array array = jdbcTemplate.queryForObject("SELECT ARRAY [[1,2,3],[4,5,6]]::BIGINT[][]", Array.class);
Long[][] arrays = (Long[][]) array.getArray();
๋ฐ๋ผ์, PostgreSQL JDBC Driver์ software.amazon.jdbc.Driver๋ฅผ ๋ชจ๋ ๋์ํ ์ ์๋๋ก ๊ธฐ์กด RowMapper์ ์ฝ๋๋ฅผ Array์ ๊ฐ์ JDBC ์ธํฐํ์ด์ค์ ์์กดํ๋๋ก ์ต๋ํ ๋ณ๊ฒฝํ๊ณ ์ผ๋ถ ์์ธ ์ผ์ด์ค๋ค์ ์ฐพ์์ ๋์ํ ์ ์๋๋ก ๋ค์ ๊ตฌํํด์ผํฉ๋๋ค.
No results were returned by the query
ResultSet ์์ ๊ฐ์ ธ์จ ArrayWrapper์ getArray ํจ์๋ฅผ ํธ์ถํ๋ฉด ์์ ๊ฐ์ ๋ฐํ๊ฐ์ด ์๋ค๋ ๋ฉ์์ง๊ฐ ํฌํจ๋ PSQLException์ด ๋ฐ์ํ๊ฒ ๋๋ ์ผ์ด์ค๊ฐ ์์์ต๋๋ค. ๋๋ฒ๊ทธ ๊ฒฐ๊ณผ ์ โ[]โ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ๋ก ๋น ๋ฐฐ์ด์ด ์๋ ์์ธ๊ฐ ๋ฐ์ํด๋ฒ๋ฆฝ๋๋ค. ArrayWrapper์๋ ๋น์ด์๋์ง์ ๋ํ ์ ๋ฌด๋ฅผ ์ ๊ณตํ๋ ํจ์๋ ์์ผ๋ ์ด์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋น์ด์๋ ๊ฐ์ด ๋ช ํํ๋ฏ๋ก try-catch ๊ตฌ๋ฌธ์ผ๋ก ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ResultSet.getString ์ผ๋ก ๋น ๋ฐฐ์ด๋ก ํํ๋๋ ๋ฌธ์์ด์ธ์ง๋ฅผ ๊ฒ์ฌํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ ์ ์์ต๋๋ค.
aws-jdbc-wrapper-test ์์ ์ฌ๋ฌ๊ฐ์ง SQL ํธ์ถ๊ณผ AWS JDBC Wrapper์ ๋ํด ํ ์คํธํด๋ณด๊ณ ์์ต๋๋ค.