์Šคํ”„๋ง DB 2ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ™œ์šฉ ๊ธฐ์ˆ  ์„น์…˜ 2 ์ˆ˜๊ฐ•

์„น์…˜ 2. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  - ์Šคํ”„๋ง JdbcTemplate ์ˆ˜๊ฐ• ์™„๋ฃŒ!!

JdbcTemplate ์žฅ์ 

  • ์„ค์ •์˜ ํŽธ๋ฆฌํ•จ

    • JdbcTemplate์€ spring-jdbc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์Šคํ”„๋ง์œผ๋กœ JDBC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.
  • ๋ฐ˜๋ณต ๋ฌธ์ œ ํ•ด๊ฒฐ

    • JdbcTemplate์€ ํ…œํ”Œ๋ฆฟ ์ฝœ๋ฐฑ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ, JDBC๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ˜๋ณต ์ž‘์—…์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

      • ์ปค๋„ฅ์…˜ ํš๋“
      • statement๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์‹คํ–‰
      • ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜๋ณตํ•˜๋„๋ก ๋ฃจํ”„ ์‹คํ–‰
      • ์ปค๋„ฅ์…˜ ์ข…๋ฃŒ, statement, resultset ์ข…๋ฃŒ
      • ํŠธ๋žœ์žญ์…˜์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ปค๋„ฅ์…˜ ๋™๊ธฐํ™”
      • ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์Šคํ”„๋ง ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ์‹คํ–‰
    • ๊ฐœ๋ฐœ์ž๋Š” SQL์„ ์ž‘์„ฑํ•˜๊ณ , ์ „๋‹ฌํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์‘๋‹ต ๊ฐ’์„ ๋งคํ•‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

JdbcTemplate ๋‹จ์ 

  • ๋™์  SQL์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

template.queryForObject()

  • ๊ฒฐ๊ณผ ๋กœ์šฐ๊ฐ€ ํ•˜๋‚˜์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • RowMapper๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ์ธ ResultSet์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด EmptyResultDataAccessException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ€ ๋‘˜ ์ด์ƒ์ด๋ฉด IncorrectResultSizeDataAccessException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

template.query()

  • ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • RowMapper๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ์ธ ResultSet์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ๋นˆ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ 1

์ˆœ์„œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉ
JdbcTemplate์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์•„์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋ฆ„ ์ง€์ • ๋ฐ”์ธ๋”ฉ
JdbcTemplate์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด NamedParameterJdbcTemplate์ด๋ผ๋Š”, ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ 2

์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ
ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด Map์ฒ˜๋Ÿผ key, value ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ key๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„, value๋Š” ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์ด ๋œ๋‹ค.

์ด๋ฆ„ ์ง€์ • ๋ฐ”์ธ๋”ฉ์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • Map
  • SqlParameterSource
    • MapSqlParameterSource
      Map๊ณผ ์œ ์‚ฌํ•œ๋ฐ, SQL ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋“ฑ SQL์— ์ข€ ๋” ํŠนํ™”๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • BeanPropertySqlParameterSource
      ์ž๋ฐ” ๋นˆ ํ”„๋กœํผํ‹ฐ ๊ทœ์•ฝ์„ ํ†ตํ•ด์„œ ์ž๋™์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
      ์˜ˆ: getXxx() -> xxx, getItemName() -> itemName
      • key=itemName, value=์ƒํ’ˆ๋ช… ๊ฐ’

BeanPropertyRowMapper

BeanPropertyRowMapper๋Š” ResultSet์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์ž๋ฐ” ๋นˆ ๊ทœ์•ฝ์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•œ ๊ฒฐ๊ณผ๊ฐ€ select id, price๋ผ๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

Item item = new Item();
item.setId(rs.getLong("id"));
item.setPrice(rs.getInt("price"));

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•œ ๊ฒฐ๊ณผ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ setId(), setPrice()์ฒ˜๋Ÿผ ์ž๋ฐ” ๋นˆ ํ”„๋กœํผํ‹ฐ ๊ทœ์•ฝ์— ๋งž์ถ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ณ„์นญ

๋ณ„์นญ as๋ฅผ ์‚ฌ์šฉํ•ด์„œ SQL ์กฐํšŒ ๊ฒฐ๊ณผ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ๊ฐ์ฒด ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๋•Œ ๋ณ„์นญ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” member_name์ด๋ผ ๋˜์–ด ์žˆ๋Š”๋ฐ, ๊ฐ์ฒด์— username์ด๋ผ๊ณ  ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
select member_name as username

๊ด€๋ก€์˜ ๋ถˆ์ผ์น˜

์ž๋ฐ” ๊ฐ์ฒด๋Š” ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ˜๋ฉด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ฃผ๋กœ ์Šค๋„ค์ดํฌ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
BeanPropertyRowMapper๋Š” ์Šค๋„ค์ดํฌ ํ‘œ๊ธฐ๋ฒ•์„ ์นด๋ฉœ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ๋”ฐ๋ผ์„œ select item_name์œผ๋กœ ์กฐํšŒํ•ด๋„ setItemName()์— ๋ฌธ์ œ์—†์ด ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

JdbcTemplate - SimpleJdbcInsert

JdbcTemplate์€ INSERT SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก SimpleJdbcInsert๋ผ๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • withTableName: ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ…Œ์ด๋ธ” ๋ช…์„ ์ง€์ •ํ•œ๋‹ค.
  • usingGeneratedKeyColumns: key๋ฅผ ์ƒ์„ฑํ•˜๋Š” PK ์ปฌ๋Ÿผ ๋ช…์„ ์ง€์ •ํ•œ๋‹ค.
  • usingColumns: INSERT SQL์— ์‚ฌ์šฉํ•  ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•œ๋‹ค. ํŠน์ • ๊ฐ’๋งŒ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

JdbcTemplate ๊ธฐ๋Šฅ ์ •๋ฆฌ

JdbcTemplate: ์ˆœ์„œ ๊ธฐ๋ฐ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ง€์›ํ•œ๋‹ค.
NamedParameterJdbcTemplate: ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ง€์›ํ•œ๋‹ค. (๊ถŒ์žฅ)
SimpleJdbcInsert: INSERT SQL์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
SimpleJdbcCall: ์Šคํ† ์–ด๋“œ ํ”„๋กœ์‹œ์ €๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ฐ•์˜ ๋ฐ ํ† ํ”ฝ ์•„์ง ๋ชป ๋๋‚ธ ๊ฑฐ ์ •๋ฆฌ

โœ”๏ธ ์Šคํ”„๋ง DB 2ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ™œ์šฉ ๊ธฐ์ˆ  ์„น์…˜ 0~2 ์ •๋ฆฌ ์™„๋ฃŒ
โœ”๏ธ HTTP vs HTTPS ์ •๋ฆฌ ์™„๋ฃŒ (๋“œ๋””์–ด...)


ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ

profile
๊น€๋‰ด๋น„

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN