@NoRepositoryBean

1 ๋ถ„ ์†Œ์š”

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 ํšŒ๊ณ ๋ก ๋

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ