์ „์ฒด ๊ธ€

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ String sql = "update item set item_name=?, price=?, quantity=? where id=?"; template.update(sql, itemName, price, quantity, itemId); JdbcTemplate์€ ๊ธฐ๋ณธ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉ ํ•œ๋‹ค. ์ˆœ์„œ๋งŒ ์ž˜ ์ง€ํ‚ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์€ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ๋ณ€๊ฒฝ์‹œ์ ์— ๋ฐœ์ƒํ•œ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์•„์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฆ„ ์ง€์ • ๋ฐ”์ธ๋”ฉ(NamedParameterJdbcTemplate) private final NamedParameterJdbcTemplate template; JdbcTemplate์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด NamedParameterJd..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ

๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ ๋™์  ์ฟผ๋ฆฌ๋ž€, ์‹คํ–‰ ์‹œ์ ์— ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋‚˜, ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ JOIN์ด ์ถ”๊ฐ€๋˜๋Š” ์ฟผ๋ฆฌ ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. // ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ์—†์Œ select id, item_name, price, quantity from item //์ƒํ’ˆ๋ช…( itemName )์œผ๋กœ ๊ฒ€์ƒ‰ select id, item_name, price, quantity from item where item_name like concat('%',?,'%') //์ตœ๋Œ€ ๊ฐ€๊ฒฉ( maxPrice )์œผ๋กœ ๊ฒ€์ƒ‰ select id, item_name, price, quantity from item where price

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 1. JdbcTemplate

Jdbc ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ์  JDBC ๋ฐ˜๋ณต ๋ฌธ์ œ ์ปค๋„ฅ์…˜ ์กฐํšŒ, ์ปค๋„ฅ์…˜ ๋™๊ธฐํ™” PreparedStatement ์ƒ์„ฑ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ”์ธ๋”ฉ ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ์Šคํ”„๋ง ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ์‹คํ–‰ ๋ฆฌ์†Œ์Šค ์ข…๋ฃŒ try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); return member; } catch (SQLException e) { throw exTranslator.translate("save", sql, e); } finally { close(con, pstmt..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 0. DTO / DAO

DTO(data transfer object) ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด(๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ฐ์ฒด) DTO๋Š” ๊ธฐ๋Šฅ์€ ์—†๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋งŒ ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ณ„์ธต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด DTO๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ DTO์— ๋‹ด์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์—์„œ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ DTO์— ๋‹ด์•„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ DTO๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ธต ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๊ฐ„์†Œํ™”๋˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DAO(data Access object) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ data์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ง์ ‘์ ์ธ..

์ž๊ฒฉ์ฆ/์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ

[์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ ์‹ค๊ธฐ] 2020๋…„ 2ํšŒ ๊ธฐ์ถœ๋ฌธ์ œ

1. ์ •๋ณด์‹œ์Šคํ…œ ์šด์˜ ์ค‘ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๊ฑฐ๋‚˜ ์ž์—ฐ์žฌํ•ด๋‚˜ ์‹œ์Šคํ…œ ์žฅ์•  ๋“ฑ์˜ ์ด์œ ๋กœ ๊ณ ๊ฐ์—๊ฒŒ ์„œ๋น„์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ๋ฐœ์ƒํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋น„์ƒ์‚ฌํƒœ ๋˜๋Š” ์—…๋ฌด์ค‘๋‹จ ์‹œ์ •๋ถ€ํ„ฐ ์—…๋ฌด๊ฐ€ ๋ณต๊ตฌ๋˜์–ด ๋‹ค์‹œ ์ •์ƒ ๊ฐ€๋™๋ ๋•Œ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์˜๋ฏธํ•˜๋Š” ์šฉ์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์“ฐ์‹œ์˜ค. ๋”๋ณด๊ธฐ ํ•ด๋‹น ์šฉ์–ด๋Š” "์žฅ์•  ๋Œ€์‘ ์‹œ๊ฐ„ (Recovery Time Objective, RTO)" ์ž…๋‹ˆ๋‹ค. RTO๋Š” ์žฅ์•  ๋ฐœ์ƒ ํ›„ ์‹œ์Šคํ…œ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Š” ๊ธฐ์—…์ด๋‚˜ ์กฐ์ง์ด ์ •ํ•œ ๋ชฉํ‘œ ์‹œ๊ฐ„ ๋‚ด์— ์žฅ์•  ๋Œ€์‘ ๋ฐ ๋ณต๊ตฌ๋ฅผ ์™„๋ฃŒํ•ด์•ผ ํ•˜๋Š” ์ค‘์š”ํ•œ ์ง€ํ‘œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. RTO๋Š” ๊ธฐ์—…์ด๋‚˜ ์กฐ์ง์˜ ์—…๋ฌด์™€ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ๋น ๋ฅธ ๋ณต๊ตฌ ์‹œ๊ฐ„์„ ์œ„ํ•ด ์ฒ ์ €ํ•œ ๋Œ€๋น„ ๋ฐ ๊ณ„ํš์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 2. ๋‹ค์Œ์€ ํŒŒ์ด์ฌ ์ฝ”๋“œ์ด๋‹ค. ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ..

Develop/Git

Intellij ์—์„œ ๊นƒํ—ˆ๋ธŒ ๊ด€๋ฆฌํ•˜๊ธฐ

Intellij ์—์„œ ๊นƒํ—ˆ๋ธŒ Repository ์ƒ์„ฑํ•˜๊ธฐ Share Project on Github : Git Repository ์—ฐ๊ฒฐ ์ƒˆ๋กœ ์ƒ์„ฑํ•  Repository์˜ ์ด๋ฆ„๊ณผ Private ์—ฌ๋ถ€, Description ๋“ฑ์„ ์ ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ดˆ ์ปค๋ฐ‹์„ ํ•˜๋„๋ก ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค. Commit ๊นƒํ—ˆ๋ธŒ Repository ์— ์—ฐ๋™ํ•˜๊ธฐ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ HTTPS ์ฃผ์†Œ๋Š” IntelliJ ์—ฐ๋™์‹œ ํ•„์š”ํ•œ ์ฃผ์†Œ์ด๋ฏ€๋กœ ๋ณต์‚ฌ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฒƒ์€ Git์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒŒ์ผ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. GitHub์˜ Repository ์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ Git -> Manage Remotes ํด๋ฆญ ๋ณต์‚ฌํ•ด๋‘” Repository ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

Spring/Spring DB

[์Šคํ”„๋ง DB 1ํŽธ] - 15. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์ดํ•ด

์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์— ๋Œ€ํ•œ ์ˆ˜์‹ญ ๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ผ๊ด€๋œ ์˜ˆ์™ธ ๊ณ„์ธต์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์˜ˆ์™ธ๋Š” ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ๋„ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ JDBC ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋“ , JPA ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋“  ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. JDBC๋‚˜ JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ๋„ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•œ๋‹ค. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์˜ˆ์™ธ ๊ณ„์ธต DataAccessException ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ NonTransient ์˜ˆ์™ธ์™€ Transient ์˜ˆ์™ธ์ด๋‹ค. Transient Transient ๋Š” ์ผ์‹œ์ ์ด๋ผ๋Š” ๋œป์ด๋‹ค. Transient ํ•˜์œ„ ์˜ˆ์™ธ๋Š” ๋™์ผํ•œ SQL์„ ๋‹ค..

Spring/Spring DB

[์Šคํ”„๋ง DB 1ํŽธ] - 14. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์ฒดํฌ ์˜ˆ์™ธ์™€ ์ธํ„ฐํŽ˜์ด์Šค ์„œ๋น„์Šค ๊ณ„์ธต์€ ๊ฐ€๊ธ‰์  ํŠน์ • ๊ตฌํ˜„ ๊ธฐ์ˆ ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์˜์กด๋„ ํ•จ๊ป˜ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์„œ๋น„์Šค๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” SQLException ์— ๋Œ€ํ•œ ์˜์กด์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์„œ๋น„์Šค๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋˜์ง€๋Š” SQLException ์ฒดํฌ ์˜ˆ์™ธ๋ฅผ ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋กœ ์ „ํ™˜ํ•ด์„œ ์„œ๋น„์Šค ๊ณ„์ธต์— ๋˜์ง€์ž. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„œ๋น„์Šค ๊ณ„์ธต์ด ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ๊ตฌํ˜„ ๊ธฐ์ˆ ์— ์˜์กดํ•˜๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๊ณ  ์„œ๋น„์Šค ๊ณ„์ธต์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒดํฌ ์˜ˆ์™ธ ์ฝ”๋“œ์— ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž… public class MemberRepositoryV3 implements MemberRepositoryEx { public Me..

hello_u
๐Ÿ˜œ