์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
๋ณด๋ค ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ ๊ฒ : https://cdaosldk.tistory.com/69
1. DB ํ์ ํ JAVA ์ฑ๊ณผ ์ฐ๋์ ์ํด JDBC ์ถ์
JDBC Driver Manager๋ ์ฌ๋ฌ ํ์ ์ DB์ ์ฐ๊ฒฐํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต
JDBC Driver Manager๋ ๋ฐํ์ ํ ๋
-Connection์ ์์ฑํด ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ ์ ์๋ ์ํ๋ฅผ ๋ง๋ค๊ณ
-Statement๋ฅผ ์์ฑํด ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ๊ฒ ํด์ฃผ๊ณ
-ResultSet์ ์์ฑํด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ํ๋ค
์ฌ์ฉ ํ ๊ฐ๊ฐ Close()๋ฅผ ํตํด ์์์ ํด์ ํด์ผ ํ๋ค
JDBC ๋ฐฉ์์ผ๋ก ์ค์ตํด๋ณด๊ธฐ
- ์ฐ๊ฒฐ์ ๋ณด ํ๋ผ๋ฏธํฐ ์ ์
- Connection ์์ฑ
- ์คํํ SQL ๋ฌธ ์ง์
- ํ๋ผ๋ฏธํฐ ์ ์ธ๊ณผ ํ๋ผ๋ฏธํฐ ๊ฐ ์ ๊ณต
- Statement ์ค๋น์ ์คํ
- ๊ฒฐ๊ณผ ๋ด๊ธฐ
- Connection, Statement, ResultSet ๋ซ๊ธฐ
- Connection, Statement, ResultSet ์์ธ ์ฒ๋ฆฌ
-> ์ค๋ณต์ฝ๋ ๋ฐ์, ์์ธ์ฒ๋ฆฌ๋ฅผ DB๋ณ๋ก ํ ์ ์์, ์์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๋ก ํด์ค์ผํ๋ค
2. Querry Mapper : Persistence Framework
SQL Mapper : JDBC Templeate, MyBatis cf) MyBatis : ๊ณผ๊ฑฐ ์ ์์ ๋ถ ํ์ค
ORM : JPA, Hibernate
JDBC Templeate
- ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ์ ๊ฐ์ฒด ํ๋ ๋งคํ
- RowMapper๋ก ์๋ต ํ๋ ๋งคํ์ฝ๋ ์ฌ์ฌ์ฉ
- Connection, Statement, ResultSet ๋ฐ๋ณต์ ์ฒ๋ฆฌ๋ฅผ ๋์ ํด์ค๋ค
MyBatis
-๋ฐ๋ณต์ ์ธ JDBC ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํ
- SQL ์ฟผ๋ฆฌ๋ค์ XML ํ์ผ์ ์์ฑํ์ฌ ์ฝ๋์ SQL์ ๋ถ๋ฆฌ
- ๋จ์ : DB ๊ธฐ๋ฅ์ ์ข ์์ , ํ ์ด๋ธ๋ง๋ค CRUD ๋ฐ๋ณต, DB ํ์ ๋ฐ ํ ์ด๋ธ์ ์ข ์์
๊ตฌํ ๋ฐฉ๋ฒ
1. xml
2. ์ด๋ ธํ ์ด์ ํ์ฉ : ์ฟผ๋ฆฌ๋ฅผ ์ด๋ ธํ ์ด์ ์ value๊ฐ์ผ๋ก ๋ฃ๋
MyBatis ์คํ ๊ณผ์ :
์ฐธ๊ณ : https://lotuus.tistory.com/75
1. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ SqlSessionFactoryBuilder๊ฐ ์ค์ ํ์ผ์ ์ฐธ๊ณ ํ์ฌ SqlSessionFactory ์์ฑ
2. ์ ํ๋ฆฌ์ผ์ด์ ์์ DB์์ ์ SqlSessionFactory๊ฐ SqlSession๊ฐ์ฒด ์์ฑ
3. ์์ฑ๋ SqlSession์ ์ฐธ๊ณ ํด์ mapper์ธํฐํ์ด์ค ํธ์ถ (SqlSession์ mapper์ ๋ณด๊ฐ ๋ด์ฅ๋์ด์๋ค)
5. mapper๊ฐ SqlSession์ ํธ์ถํ์ฌ SQL์คํ
3. QuerryMapper์ DB ์์กด์ฑ ๋ฐ ์ค๋ณต ์ฟผ๋ฆฌ ๋ฌธ์ ๋ก ORM ํ์
-> ORM์ DAO ๋๋ Mapper๋ฅผ ํตํด ์กฐ์ํ๋ ๊ฒ์ด ์๋๋ผ ํ ์ด๋ธ์ ์์ ํ๋์ ๊ฐ์ฒด์ ๋์ ์ํจ๋ค
4. ORM์ ์ฑ์ฅ ๊ณผ์
ORM์ด ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์
1) ์์
๊ฐ์ฒด : ๊ฐ์ฒด ๊ฐ ๋ฉค๋ฒ๋ณ์๋ ์์๊ด๊ณ๋ฅผ ๋งบ์ ์ ์๋ค
RDB : ํ ์ด๋ธ๋ค์ ์์๊ด๊ณ๊ฐ ์๊ณ ๋ชจ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌ
ํด๊ฒฐ๋ฐฉ๋ฒ : ๋งคํ์ ๋ณด์ ์์์ ๋ณด๋ฅผ ๋ฃ์ด์ค๋ค(@OneToMany, @ManyToOne)
2) ๊ด๊ณ
๊ฐ์ฒด : ์ฐธ์กฐ๋ฅผ ํตํด ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ๋ฐฉํฅ์ ๊ฐ์ง๋ค(๋ค๋๋ค ๊ฐ๋ฅ)
RDB : ์ธ๋ ํค(FK)๋ฅผ ์ค์ ํด Join์ผ๋ก ์กฐํ์์๋ง ์ฐธ์กฐ ๊ฐ๋ฅ(๋ค๋๋ค ๊ด๊ณ ์ ๋งคํ ํ ์ด๋ธ ํ์)
ํด๊ฒฐ๋ฐฉ๋ฒ : ๋งคํ์ ๋ณด์ ๋ฐฉํฅ์ ๋ณด๋ฅผ ๋ฃ์ด์ค๋ค(@JoinColumn, @MappedBy)
3) ํ์
๊ฐ์ฒด : ์ฐธ์กฐ๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์์ฐจ ํ์์ด ๊ฐ๋ฅํ๋ฉฐ ์ฝ๋ ์ ๋ ์ํ
RDB : ํ์ ์ ์ฐธ์กฐํ๋ ๋งํผ ์ถ๊ฐ ์ฟผ๋ฆฌ๋, join์ด ๋ฐ์ํ์ฌ ๋นํจ์จ์
ํด๊ฒฐ๋ฐฉ๋ฒ : ๋งคํ/์กฐํ ์ ๋ณด๋ก ์ฐธ์กฐํ์ ์์ ์ ๊ด๋ฆฌํ๋ค(@FetchType, fetchJoin())
4) ๋ฐ๋
๊ฐ์ฒด : ๋ฉค๋ฒ ๊ฐ์ฒด ํฌ๊ธฐ๊ฐ ๋งค์ฐ ํด ์ ์๋ค
RDB : ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ๋ง ์กด์ฌ
ํด๊ฒฐ๋ฐฉ๋ฒ : ํฌ๊ธฐ๊ฐ ํฐ ๋ฉค๋ฒ ๊ฐ์ฒด๋ ํ ์ด๋ธ์ ๋ถ๋ฆฌํ์ฌ ์์์ผ๋ก ์ฒ๋ฆฌํ๋ค(@embedded)
5) ์๋ณ์ฑ
๊ฐ์ฒด : ๊ฐ์ฒด์ hashCode ๋๋ ์ ์ํ equals() ๋ฉ์๋๋ฅผ ํตํด ์๋ณ
RDB : PK๋ก๋ง ์๋ณ
ํด๊ฒฐ๋ฐฉ๋ฒ : PK๋ฅผ ๊ฐ์ฒด id๋ก ์ค์ ํ๊ณ EntityManager๋ ํด๋น ๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์๋ณํ์ฌ ๊ด๋ฆฌํ๋ค(@Id, @GenerateValue)
1์ฐจ, 2์ฐจ ์บ์
1์ฐจ ์บ์
์์์ฑ ์ปจํ ์คํธ ๋ด๋ถ์ ์ํฐํฐ๋ฅผ ๋ณด๊ดํ๋ ์ ์ฅ์
์ผ๋ฐ์ ์ผ๋ก ํธ๋์ ์ ์์๊ณผ ์ข ๋ฃ ๊ฐ 1์ฐจ ์บ์๊ฐ ์ ํจ
1์ฐจ ์บ์๋ ํ ํธ๋์ ์ ๋์ ๊ณ์ ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ค๋ค
2์ฐจ ์บ์
์ ํ๋ฆฌ์ผ์ด์ ๋ฒ์ ์บ์, ๊ณต์ ์บ์, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ ๋๊น์ง ์บ์ ์ ์ง
์๋ณธ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๋ณต์ฌ๋ณธ์ ๋๊ฒจ์ค๋ค ~ ์ฌ๋ฌ ํธ๋์ ์ ์์ ๋์ผํ ์๋ณธ ๊ฐ์ฒด๋ฅผ ์์ ํ์ง ์๋๋ก ํ๊ธฐ ์ํด
์ ์ฉ๋ฐฉ๋ฒ
1. Entity์ @Cacheable ์ ์ฉ ํ ์ค์ ์ถ๊ฐ
2. sharedCache.made ์ค์
์์์ฑ ์ปจํ ์คํธ(1์ฐจ ์บ์)๋ฅผ ํ์ฉํ ์ฐ๊ธฐ ์ง์ฐ
+ https://cdaosldk.tistory.com/163
์์์ฑ : ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด๋ ์ฌ๋ผ์ง์ง ์๋ ๋ฐ์ดํฐ์ ํน์ฑ
~ ํ์ผ์ด๋ DB์ ์ ์ฅํ๋ฉฐ ๊ทธ ๋ฐ์ดํฐ์ ๋ถ์ฌ๋๋ค
์ฐ๊ธฐ์ง์ฐ ๋ฐ์์์
- flush() ๋์์ด ๋ฐ์ํ๊ธฐ ์ ๊น์ง ์ต์ ํ
- flush() ๋์์ผ๋ก ์ ์ก๋ ์ฟผ๋ฆฌ๋ ๋์ด์ ์ฟผ๋ฆฌ ์ต์ ํ๋ ๋์ง ์๊ณ , ์ดํ commit()์ผ๋ก ๋ฐ์๋ง ๊ฐ๋ฅ
์ฐ๊ธฐ์ง์ฐ ํจ๊ณผ ~ ํธ๋์ ์ ๋น ์ต์ ํ๋ฅผ ํตํด ์ต์ ์ฟผ๋ฆฌ๋ง ๋ ๋ผ๊ฐ๊ฒ ๋๋ค
- ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ชจ์ ํ ๋ฒ์ ์ฟผ๋ฆฌ ์ ์ก
- ์์์ฑ ์ํ์ ๊ฐ์ฒด๊ฐ ์์ฑ ๋ฐ ์์ ์ด ์ฌ๋ฌ ๋ฒ ์ผ์ด๋๋๋ผ๋ ํด๋น ํธ๋์ ์ ์ข ๋ฃ ์ ์ฟผ๋ฆฌ๋ 1๋ฒ๋ง ์ ์ก
- ์์์ฑ ์ํ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๋ค ์ญ์ ๋์๋ค๋ฉด ์ค์ DB์๋ ์๋ฌด ๋์์ด ์ ์ก๋์ง ์์ ์ ์๋ค
+ ํค ์์ฑ์ ๋ต์ด .IDENTITY์ธ ๊ฒฝ์ฐ ์์ฑ ์ฟผ๋ฆฌ๋ ์ฐ๊ธฐ์ง์ฐ์ด ์๋ค : ๋จ์ผ ์ฟผ๋ฆฌ๋ก ์ํํ์ฌ ์ธ๋ถ ํธ๋์ ์ ์ ์ํ
์ค๋ณต ํค ์์ฑ์ ๋ฐฉ์งํ์ฌ ๋จ์ผ ํค ๋ณด์ฅ
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SpringData ๊ตฌ์กฐ ๋ฐ JpaRepository ์๋ฆฌ (0) | 2023.02.03 |
---|---|
Raw JPA (0) | 2023.02.02 |
JPA ์ฐ๊ด๊ด๊ณ ๋งคํ ์๋ฌ ์ก๊ธฐ(1) (0) | 2023.01.30 |
ํ ์คํธ ์ฝ๋(2) (0) | 2023.01.26 |
๊ฒ์ํ์ ๋๊ธ์ ํฌํจํ๊ณ ์๋ ๊ฒ์๋ฌผ์ ๋๊ธ ์ญ์ ์์ด ๊ฒ์๋ฌผ๋ง ์ญ์ ํ๋ ๊ฒฝ์ฐ, ์์ธ Referential integrity constraint violation : 1) JPA (0) | 2023.01.02 |