์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
SpringData ๊ตฌ์กฐ
์คํ๋ง ๋ฐ์ดํฐ : ์คํ๋ง์ ์ํ ๋ค์ํ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฐ๋ ๋ฐ ์ต์ ํ ํจํค์ง
Spring Data Common & JPA
- Repository : ํน๋ณํ ๊ธฐ๋ฅ์ ์๋ ๋ง์ปค ์ด๋ ธํ ์ด์
- CrudRepository : CRUD ๊ธฐ๋ฅ ์ ๊ณต
- PagingAndSortingRepository : ํ์ด์ง, ์ ๋ ฌ ๋ถ๋ฌธ์ ๋ํด ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค
- Repository > CrudRepository > PagingAndSortingRepository > JPARepository๊น์ง @NoRepositoryBean
: ์ค๊ฐ ๋จ๊ณ์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์ค์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์๋์ ์๋ ค ์ค์ Bean์ ๋ง๋ค์ง ์๋๋ก ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ
์ฌ์ฉ์ ์ง์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ JPARepository<Entity, Id>๋ฅผ ์์ํ๋ฉด ์๋ง๊ฒ ํ๋ก๊ทธ๋๋ฐ ๋ SimpleJPARepository ๊ตฌํ์ฒด Bean์ด ๋๊ณ , ์คํ๋ง ๊ตฌ๋์ ๋น์ผ๋ก ๋ฑ๋กํ๋ค
+ @EnableJPARepositories(์คํ๋ง ๋ถํธ ์ฌ์ฉ์ ์๋ ์์ฑ๋๋ค)์
JPARepositoriesRegistrar -> RepositoryBeanDefinitionRegistrarSupport : ImportBeanDefinitionRegistrar์ ์์
@Repository vs @JPARepository
- Repository
- **@Repository** ์ ํด๋์ค์ ๋ถ์ธ๋ค.
- ์์๋ฐฐ์ด RawJPA์ Repository ๊ธฐ๋ฅ๋ง ๊ฐ์ง ๊ตฌํ์ฒด๊ฐ ์์ฑ๋๋ค. (DB๋ณ ์์ธ์ฒ๋ฆฌ ๋ฑ)
- JpaRepository
- JpaRepository<Entity,ID> ์ธํฐํ์ด์ค๋ฅผ ์ธํฐํ์ด์ค์ extends ๋ถ์ธ๋ค.
- @NotRepositoryBean ๋ ****์์ ์ธํฐํ์ด์ค๋ค์ ๊ธฐ๋ฅ์ ํฌํจํ ๊ตฌํ์ฒด๊ฐ ํ๋ก๊ทธ๋๋ฐ๋๋ค. (@NotRepositoryBean = ๋น์์ฑ ๋ง์)
- SpringDataJpa ์ ์ํด ์ํฐํฐ์ CRUD, ํ์ด์ง, ์ ๋ ฌ ๊ธฐ๋ฅ ๋ฉ์๋๋ค์ ๊ฐ์ง ๋น์ด ๋ฑ๋ก๋๋ค. (์์ ์ธํฐํ์ด์ค๋ค์ ๊ธฐ๋ฅ)
- JpaRepository<Entity,ID> ์ธํฐํ์ด์ค๋ฅผ ์ธํฐํ์ด์ค์ extends ๋ถ์ธ๋ค.
Repository ๊ธฐ๋ฅ ์ ํํ๊ธฐ
1. @RepositoryDefinition
@RepositoryDefinition(domainClass = Thread.class, idClass = Long.class)
public interface ThreadRepository {
Optional<Thread> findByThreadMessage(String message);
// ๋ค๋ฅธ ํ๋๊ฐ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ ๋ง๋๋ค : ์ค๋ก์ง ๋ฉ์ธ์ง ๊ฒ์๋ง ๊ฐ๋ฅ
}
2. @NoRepositoryBean ์ธํฐํ์ด์ค๋ก ํ๋ฒ ๋ ๊ฐ์ธ๋ ๋ฒ
@NoRepositoryBean
public interface UserRepository<User, ID extends Serializable> extends Repository<User, ID> {
Optional<User> findByUsername(String username);
// ์ดํ ๋ชฉํํ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์ด ์ธํฐํ์ด์ค๋ฅผ ์์ํ๊ฒ ํ๋ค ~ ์ฌ๊ธฐ์ ์์ฑํ ๋ฉ์๋๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค
}
Repository ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ
delete() ๋ฉ์๋
์์์ฑ ์ํ์ฌ์ผ cascade, orphanremoval์ ์ํด ์์ ์ํฐํฐ๋ ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ์์์ฑ ์ํ์ธ์ง ํ์ธํ๋ ๊ฒ์ด๋ค
-> ์ฐ๊ด๊ด๊ณ ์๊ณ ์ฑ๋ฅ ๊ฐ์ ์ ํ๊ณ ์ถ๋ค : delete() ๋ฉ์๋ ์ฌ์ ์ํ๊ธฐ
1. ๊ธฐ๋ฅ ์ถ๊ฐํ ๋น ์ธํฐํ์ด์ค ์์ฑ
2. ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๊ณ , delete ์ฟผ๋ฆฌ๋ฅผ ๋ฐ๋ก ๋ ๋ฆฌ๋ ๋ฉ์๋ ์ฌ์ ์
JPA ํ๋ก์ธ์ค
์์ฒญ
----- ์ดํ๋ฆฌ์ผ์ด์ -----
-> ์ฐ๋ ๋
new ์ฐ์ฐ์๋ฅผ ํตํ ์๋ก์ด ์ํฐํฐ ์์ฑ ~ ๋น์์์ฑ ์ํ์ธ ๊ฐ์ฒด, em.persist()๋ก ์์์ฑ ๋ถ์ฌ
-> 1์ฐจ์บ์(์์์ฑ ์ปจํ ์คํธ)
์์์ฑ์ด ๋ถ์ฌ๋ ์ํฐํฐ๊ฐ 1์ฐจ ์บ์์ ๋ฑ๋ก๋๋ค, flush()๋ก DB transaction์ ์ฟผ๋ฆฌ๋ก ๋ฑ๋ก๋๊ฒ ํ๋ค ~ ์์ฑ insert ์ฟผ๋ฆฌ
----- ๋ฐ์ดํฐ๋ฒ ์ด์ค -----
-> DB Transaction
Commit()์ด ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณธ์ Record๋ก ์ ์ฅ์ด ๋๋ค
-> DB ์๋ณธ
Detached, Remove๋ก ์ํ ๋ณํ ๋ฑ์ 1์ฐจ ์บ์, 1์ฐจ ์บ์์์ ์ผ์ด๋ ์ผ์ ์ฐ๊ธฐ ์ง์ฐ ์ ์ฅ์์์ ์ฟผ๋ฆฌ๋ก ๋ณํ, DB transaction์ผ๋ก ์ ์ก ~ Transaction ๊ตฌ๊ฐ 1์ฐจ ์บ์์ DB transaction
+ 1์ฐจ์บ์ : App๋จ ์ต์ ํ ~ ์ฐ๊ธฐ ์ง์ฐ ์ ์ฅ์์ ์ฟผ๋ฆฌ๋ฅผ ๊ณ์ ์ต์ ํ, ์ฟผ๋ฆฌ๋ ์ด๋ฏธ DB transaction์ ์ ์ฅ๋์ด ์๋ค
+ 1์ฐจ์บ์์์ ํ๋ ๋กค๋ฐฑ๊ณผ DB transaction์์ ํ๋ ๋กค๋ฐฑ์ด ์๋ค (๋์ ๋ค๋ฅด๋ค)
'Spring๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SpringData ์ฟผ๋ฆฌ์ QueryDSL (0) | 2023.02.08 |
---|---|
SpringData JPA ํ์ด์ง๊ณผ ์ ๋ ฌ (0) | 2023.02.03 |
Raw JPA (0) | 2023.02.02 |
ORM์ ํ์ ๋ฐฐ๊ฒฝ(JDBC, Querry Mapper) + ์ฑ์ฅ ๊ณผ์ (0) | 2023.02.01 |
JPA ์ฐ๊ด๊ด๊ณ ๋งคํ ์๋ฌ ์ก๊ธฐ(1) (0) | 2023.01.30 |