@NoRepositoryBean
Bean & Injection
@NoRepositoryBean
Spring Data JPA
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JpaRepository
์ธํฐํ์ด์ค์ CrudRepository
์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, ํ์๋ ๊ฐ๋ฐ ํ ๋, ์์ฃผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ค.
@Repository
public interface UserRepository extends JpaRepository<User, String> {
Optional<User> findByUserId(String userId);
void deleteUserByUserId(String userId);
}
์์ ๊ฐ์ด JpaRepository
๋ฅผ ์์ฃผ ์ฌ์ฉํ๋๋ฐ, Spring Boot
๊ฐ๋ฐ ๊ฒฝํ์ด ์๋ ๋ถํํ
์ JpaRepository
์ @Repository
์ด๋
ธํ
์ด์
์๋ถ์ธ๋ค๋ ๋ง์ ๋ค์๋ค. Context
๋ฑ๋ก์ ํ์ง๋ ์๊ณ ์ด๋ค๊ณ ? ์๋๋ฉด @Repository
๋ง๊ณ ๋ค๋ฅธ ์ด๋
ธํ
์ด์
์ ๋ช
์ํ๋? ๋ณ์ ๋ณ ์๊ฐ์ด ๋ค์ด์ @Repository
์ด๋
ธํ
์ด์
์ ์ ๊ฑฐํ๊ณ , ํ
์คํธ์ฝ๋๋ฅผ ๋๋ ค๋ณด๋๊น ์ ๋์๊ฐ๋๋ผ
์ ๊ทธ๋ฐ๊ฐ ์ถ์ด์, JpaRepository
๊ตฌํ๋ถ ์ฝ๋๋ฅผ ๊น๋ดค๋๋ ์๋๋ ๋ค๋ฅผ๊น
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
...
}
@NoRepositoryBean
์ด๋ฐ ์ด๋
ธํ
์ด์
์ด ์๊ธธ๋, ๋ญํ๋ ๋
์์ธ์ง ์กฐ์ฌ๋ฅผ ์ข ํด๋ดค๋ค.
๊ตฌํ ์ฝ๋์ ์ฃผ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ํ์์๋ค.
์ ์ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์ ํํ ์ ์๋๋ก ํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ์ธํ๋ ์ด๋ ธํ ์ด์
์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํด ์ฌ์ฉ์ ์ง์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ธฐ๋ณธ ํด๋์ค์ ํจ๊ป ํ์ฅ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ํด๋น ์ค๊ฐ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ค๊ฐ ์ ์ฅ์ ์ธํฐํ์ด์ค์์ ๊ตฌ์ฒด์ ์ธ ์ ์ฅ์ ์ธํฐํ์ด์ค๋ฅผ ์ถ์ถํ์ง๋ง ์ค๊ฐ ์ธํฐํ์ด์ค์ ๋ํ ์คํ๋ง ๋น(Spring bean)์ ์์ฑํ๋ ค๊ณ ํ์ง ์์ต๋๋ค.
๋ฒ์ญ๊ธฐ์ ๋ฌธ์ ์ธ์ง, ์ฝ๋ ์ฌ๋์ ๋ฌธ์ ์ธ์ง ๋ํต ์ดํด๊ฐ ๋์ง ์์, ๊ตฌ๊ธ๋ง ํด ๋ณด์๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ์ค๋ช ์ ๋ณผ ์ ์์๋ค.
@NoRepositoryBean
์ด๋
ธํ
์ด์
์ ์ด ์ธํฐํ์ด์ค๊ฐ Repository ์ฉ๋๋ก์ ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋ ๋จ์ง Repository์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ธํฐํ์ด์ค๋ผ๋ ์ ๋ณด๋ฅผ ๋ถ์ฌํ๋ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
๋น์ฅ ์ดํด๊ฐ ์ด๋ ต๊ณ , ์ค๋ช
์ ์ฝ์ด๋ ์ดํด๊ฐ ๋์ง ์์, JpaRepository
๋ ์ด๋
ธํ
์ด์
์ด ๋ฑ๋ก์ด ์ด๋ฏธ ๋ผ ์์ผ๋ฏ๋ก(@Retention(RetentionPolicy.RUNTIME)
), @Repository
์ด๋
ธํ
์ด์
์ ๋ถ์ด์ง ์์๋ ๋๋ค ๋ผ๊ณ ์ดํดํ๊ณ , ๊ด๋ จ๋ ์์ ์ด๋ ๊ฐ์๋ฅผ ์ฐพ์๋ด์ผ ๋ ํ์์ฑ์ ๋๊ผ๋ค.
2021-04-24 ํ๊ณ ๋ก ๋
๋๊ธ๋จ๊ธฐ๊ธฐ