[Spring boot] JDBC์™€ Spring JDBC ๊ทธ๋ฆฌ๊ณ  MyBatis

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ MVC ํŒจํ„ด๊ณผ Spring Data Rest๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•œ REST API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์—ˆ๋Š”๋ฐ์š”. ๊ทธ๋Ÿฐ๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ DB์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋˜ ๋””ํŽœ๋˜์‹œ๊ฐ€ ์žˆ์—ˆ์ฃ . ๋ฐ”๋กœ Spring Data JPA์˜€์Šต๋‹ˆ๋‹ค.

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

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring Application์ด ์–ด๋–ป๊ฒŒ DB์™€ ์—ฐ๊ฒฐํ•˜์—ฌ Spring Data JPA๊นŒ์ง€ ์˜ค๊ฒŒ ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋‘ ํฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

 

JDBC

Java ๊ณ„์—ด์—์„œ DB์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜์ž๋ฉด, ์ด ๋…€์„์„ ๋นผ๋†“์„ ์ˆ˜ ์—†์ฃ . ๊ธฐ๋ณธ์ ์œผ๋กœ Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์—, ์ผ๋ฐ˜ Java ์–ธ์–ด์—์„œ DB ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ JDBC์ž…๋‹ˆ๋‹ค. JDBC๋ž€, Java DataBase Connectivity์˜ ์•ฝ์ž๋กœ ์ž๋ฐ”์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Java ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. MySQL, PostgreSQL, SQL Server ๋“ฑ ๋‹ค์–‘ํ•œ DB ๋ฏธ๋“ค์›จ์–ด์˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๊ณ , Java ํ‘œ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์— JVM ์œ„์—์„œ ์šด์˜๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–ด๋””์—์„œ๋“ ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ฃ .

๊ฐ„๋‹จํ•˜๊ฒŒ JDBC๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์„ค๋ช…๋“œ๋ฆฌ์ž๋ฉด, ๋จผ์ € ์‚ฌ์šฉํ•  Database Driver๋ฅผ ์„ ํƒํ•ด์ฃผ๊ณ , ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์งˆ์˜๋ฅผ executeSQL์— ๋„ฃ์–ด์ค€ ํ›„, ResultSet์œผ๋กœ ๋ฐ›๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ณดํ†ต์˜ JDBC๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•  ๋•Œ, close ํ•จ์ˆ˜๋ฅผ Statement, Connection, ResultSet์— ๋ชจ๋‘ ํ•˜์—ฌ์•ผ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ณ , ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด๋‚˜ ๋ถˆํŽธํ•จ์ด ์กด์žฌํ•˜๋Š” ๋ฉด์ด ์žˆ์ฃ . ๋งค๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ณผ ์…‹์„ ํด๋ž˜์Šค๋กœ ๋ฌถ์–ด์„œ ๋ฆฌํŒฉํ† ๋ง ํ•œ๋‹ค๋ฉด, ๊ทธ๋ฅผ ๋งค๋ฒˆ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊น๋‹ˆ๋‹ค.

 

Spring JDBC

์Šคํ”„๋ง JDBC์•ผ ๋ง๋กœ, ์Šคํ”„๋ง์—์„œ DB๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์˜ค๋ฆฌ์ง€๋‚  ๋””ํŽœ๋˜์‹œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MyBatis์ฒ˜๋Ÿผ XML์„ ์ด์šฉํ•ด ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ•œ ํ›„, ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ์Œฉ JDBC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, PrepareStatement, CreateStatement, ResultSet ๋“ฑ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์™€ ์ฝ”๋“œ๋“ค์„ ํด๋ž˜์Šคํ™” ํ•˜์—ฌ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด๋‹ค ๋” ํŽธํ•˜๊ฒŒ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์ด ์žˆ์ฃ . ๊ตฌ์ฒด์ ์œผ๋กœ Spring JDBC๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ์—ญํ• ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Connection์„ ์—ด๊ณ  ๋‹ซ๊ธฐ
  • Statement๋ฅผ ์ค€๋น„ํ•˜๊ณ  ๋‹ซ๊ธฐ
  • Statement์˜ ์‹คํ–‰
  • ResultSet ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ˜ํ™˜
  • Transaction ์ฒ˜๋ฆฌ

์ž˜ ๋ณด๋ฉด, ์œ„์—์„œ ์‚ฌ์šฉํ•œ JDBC์˜ ์ฝ”๋“œ๋“ค์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ , ๊ฐœ๋ฐœ์ž๋Š” DataSource๋งŒ ์ œ๊ณตํ•ด์ฃผ๋ฉด, ์œ„์˜ ์ž‘์—…์„ ๋ชจ๋‘ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์•„์ฃผ ์ข‹์€ ๋…€์„์ด๋ผ๋Š” ๊ฑฐ์ฃ .

๊ทธ๋Ÿฐ๋ฐ, ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด, ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ๋””์ž์ธ์œผ๋กœ ์„ค๊ณ„๋ฅผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ํšŒ์› ์ •๋ณด์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ Member ๋„๋ฉ”์ธ์„ ์„ค๊ณ„ํ•˜์—ฌ, ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” Repository๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Service์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์€ Controller์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” MVC ํŒจํ„ด๊นŒ์ง€ ๊ฒธํ•˜๊ณ  ์žˆ์ฃ . ์ด๋ ‡๊ฒŒ ๋””์ž์ธ ํ•˜๋‹ค๋ณด๋‹ˆ, Service์™€ DB๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ผ์ธ์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ, ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ DAO๋ผ๊ณ  ์ด์•ผ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.

Data Access Layer

์œ„ ์‚ฌ์ง„์€ Spring JDBC์˜ Data Access Layer๋ฅผ ๊ทธ๋ฆฐ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. JDBC Template์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•œ DataSource๊ฐ€ ๋‹ด๊ฒจ์ ธ ์žˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด JDBC ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜์—ฌ DB์™€ ์—ฐ๊ฒฐํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

JDBC์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜ํ™”๋œ ์—ฐ๊ฒฐ ํŒฉํ† ๋ฆฌ์ธ DataSource๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณต๋˜๋Š”๋ฐ, ์ด ํŒฉํ† ๋ฆฌ๋Š” DB์™€ ๊ด€๊ณ„๋œ Connection์„ ๋‹ด๊ณ  ์žˆ์–ด, ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— Database Access๊ฐ€ ์–ธ์ œ๋“  ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

DataSource ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • BasicDataSource
  • PoolingDataSource
  • SingleConnectionDataSource
  • DriverManagerDataSource

๋”ฐ๋ผ์„œ Spring JDBC๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด DB Connection์„ ๊ฐ€์ ธ์˜ค๋Š” DataSource๋ฅผ ์œ„์˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ๊ฐ™์ด Spring IoC ์ปจํ…Œ์ด๋„ˆ์— ๊ณต์œ  ๊ฐ€๋Šฅํ•œ Bean์œผ๋กœ ๋“ฑ๋กํ•œ ํ›„, Spring JDBC์— ์ฃผ์ž…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋’ค์— DAO ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ, ์‚ฌ์šฉํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ JDBCTemplate์— ๋„ฃ์–ด์ฃผ๋ฉด, ์œ„์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ JDBC์˜ Statement, Connection ์ฝ”๋“œ๋ฅผ ์จ์ฃผ์ง€ ์•Š๊ณ ๋„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

MyBatis / iBatis

MyBatis๋Š” Spring JDBC์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์„ XML๋กœ ์ง„ํ–‰ํ•˜๊ณ , JDBC์— ์‚ฌ์šฉํ•˜๋Š” ์ˆœ์ˆ˜ ์ฝ”๋“œ๋“ค ์—ญ์‹œ ๋ชจ๋‘ ์ž๋™์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์ฃ .

๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด, MyBatis๋Š” SqlSession์„ ์—ด๊ณ  SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. SQL ์ฟผ๋ฆฌ๋ฅผ ๋™์ž‘ํ•˜๊ธฐ ์ „์—, ์„ธ์…˜์„ ๋ฏธ๋ฆฌ ์—ด๊ณ , ์‹คํ–‰ํ•  ๋•Œ ๋™์ž‘์‹œํ‚จ ๋‹ค์Œ, ์ข…๋ฃŒ๊ฐ€ ๋˜๋ฉด ์ด๋ฅผ Release ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹์ธ ๊ฒƒ์ด์ฃ . ๋˜ ํ•œ๊ฐ€์ง€๋Š” Spring JDBC๋Š” Java ์ฝ”๋“œ์— ์ง์ ‘ SQL ์ฟผ๋ฆฌ๋ฅผ ์งˆ์˜ํ•˜๊ณ , ์ด๋ฅผ ํ•จ์ˆ˜ํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ MyBatis๋Š” XML์— SQL ์ฟผ๋ฆฌ๋ฅผ ์งˆ์˜ํ•˜๊ณ , Java ์ฝ”๋“œ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด, Mapping ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฝ”๋”ฉ์„ ์ง„ํ–‰ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์šฐ๋ฆฌ๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ผ๊ณ  ์ด์•ผ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— DB ์ฒ˜๋ฆฌ ๋กœ์ง์€ DB์— ๊ฑธ๋งž๊ฒŒ ๋„ฃ๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด์ฃ . 

Spring JDBC์ฒ˜๋Ÿผ DataSource๋ฅผ ์„ค์ •ํ•˜์ง€๋งŒ DataSource ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋ฅผ ์“ฐ์ง€ ์•Š๊ณ , ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” Environment๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Spring JDBC์ฒ˜๋Ÿผ ํ’€๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ฐ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด์„œ DB ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL ์ฝ”๋“œ์™€ ๋งคํ•‘๋˜๋Š” Mapper๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ด๋ฅผ properties์— ๋„ฃ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

XML์—์„œ SQL ์ฝ”๋“œ๋ฅผ ์งˆ์˜ํ•  ๋•Œ ์ด์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๊ณ , ์ด๋ฅผ Java์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ•œ ๋ฒˆ ๋” ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด, Java ์ฝ”๋“œ์—์„œ ์ด๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

XML์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ์ง์ ‘ SQL ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒŒ ๋์ด ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Spring JDBC์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ ์ปค๋„ฅ์…˜์„ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, MyBatis์—์„œ๋Š” SqlSession ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ์„ธ์…˜์„ ์˜คํ”ˆํ•˜๊ณ , ์ด ์ž‘์—…์ด ๋๋‚˜๋ฉด ์„ธ์…˜์„ ๋‹ซ์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํ•œ ๊ฑด, SQL ์ฝ”๋“œ์™€ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผœ์คŒ์œผ๋กœ์จ ์ฝ”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด, ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธํ•ด์ง์„ ์•Œ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์„ธ์…˜์„ ์˜คํ”ˆํ•˜๊ณ , ๋‹ซ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ๋” ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

 

๋งˆ์น˜๋ฉฐ...

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” JDBC ~ MyBatis๊นŒ์ง€๋ฅผ ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃฌ Spring Data JPA๋Š” Session์ด๋‚˜ Connection ๋“ฑ์€ ์ „ํ˜€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜์˜€๋Š”๋ฐ, ์‹ค์ œ๋กœ Java์—์„œ DB์™€ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์€ ๊ฝค ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ด์—ˆ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ๊ด€์‹ฌ์  ๋ถ„๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณ ๋ฏผ์„ ํ†ตํ•ด ๊ฒฐ๊ตญ batis ๊ตฌ๊ฐ„๊นŒ์ง€ ์˜ค๊ฒŒ๋˜์—ˆ์ง€๋งŒ, ์•„์ง๊นŒ์ง€ ์•„์‰ฌ์šด ์ ์ด ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ๊ด€๊ณ„ํ˜•์„ ์ •์˜ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์˜€์„ ๋•Œ, ๊ฒŒ์‹œ๊ธ€๊ณผ ๋Œ“๊ธ€์€ 1:N ๊ด€๊ณ„๋กœ ์กด์žฌํ•˜๋Š” ๋…€์„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋ฅผ 1:N ๊ด€๊ณ„๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์˜ค์ง SQL ์ฟผ๋ฆฌ๋กœ ์งˆ์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ, ์ด ๋ฐฉ๋ฒ•์€ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋†’๊ณ , ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์ฃ .

์ด๋Ÿฌํ•œ ์ ์„ ๊ฐœ์„ ํ•œ Hibernate, JPA, Spring Data JPA์— ๋Œ€ํ•ด ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments