[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๋ผ๊ณ ์ด์ผ๊ธฐ ํฉ๋๋ค.
์ ์ฌ์ง์ 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์ ๋ํด ๋ค์ ํฌ์คํธ์์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring boot] DAO์ DTO (6) | 2020.05.27 |
---|---|
[Spring Data] Hibernate, JPA ๊ทธ๋ฆฌ๊ณ Spring Data JPA (0) | 2020.05.23 |
[Spring boot] Spring Data Rest๋ฅผ ์ด์ฉํ REST API ๊ฐ๋ฐ 2 (1) | 2020.05.20 |
[Spring boot] Spring Data Rest๋ฅผ ์ด์ฉํ REST API ๊ฐ๋ฐ 1 (0) | 2020.05.20 |
[Spring boot] MVC ํจํด์ ์ด์ฉํ REST API ๊ฐ๋ฐ (3) | 2020.05.19 |