๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์ปดํฌ๋„ŒํŠธ ์Šค์บ” - ์ค‘๋ณต ๋“ฑ๋ก๊ณผ ์ถฉ๋Œ)

by YeonBu 2023. 11. 27.
728x90

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์„ฑ์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์„ธ์š”! ๐Ÿ“ข

 

 

 

 

 

์ค‘๋ณต ๋“ฑ๋ก๊ณผ ์ถฉ๋Œ

 

 

1. ์ค‘๋ณต ๋“ฑ๋ก ์ƒํ™ฉ

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์—์„œ ๊ฐ™์€ ๋นˆ ์ด๋ฆ„์„ ๋“ฑ๋กํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

โœ” ์ž๋™ ๋นˆ ๋“ฑ๋ก vs ์ž๋™ ๋นˆ ๋“ฑ๋ก

โœ” ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก vs ์ž๋™ ๋นˆ ๋“ฑ๋ก

 

 

 

 

2. ์ž๋™ ๋นˆ ๋“ฑ๋ก vs ์ž๋™ ๋นˆ ๋“ฑ๋ก

 

โœ” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์ด ๋“ฑ๋ก๋˜๋Š”๋ฐ, ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์Šคํ”„๋ง์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

(` ConflictingBeanDefinitionException` ์˜ˆ์™ธ ๋ฐœ์ƒ)

 

 

 

 

3. ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก vs ์ž๋™ ๋นˆ ๋“ฑ๋ก

 

AutoAppConfig

public class AutoAppConfig {

    @Bean(name = "memoryMemberRepository")
    MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }


}

 

 

MemoryMemberRepository

@Component
public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long, Member> store = new HashMap<>();

    @Override
    public void save(Member member) {
        store.put(member.getId(), member);
    }

    @Override
    public Member findById(Long memberId) {

        return store.get(memberId);

    }
}

 

โœ” AutoAppConfig์— `memoryMemberRepository`๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ์„ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ

โœ” MemoryMemberRepository์—์„œ๋Š” `memoryMemberRepository`๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

 

โœ” ์ด ๋•Œ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋ฉด ์–ด๋–ค๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ๊นŒ?

 โž” ์ด ๊ฒฝ์šฐ ์ˆ˜๋™ ๋นˆ์ด ๋“ฑ๋ก ์šฐ์„ ๊ถŒ์„ ๊ฐ€์ง€๋ฉฐ, ์ž๋™๋นˆ์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•œ๋‹ค.

 

๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค

 

 

 

โœ” ์ž๋™๋ณด๋‹ค๋Š” ์ˆ˜๋™์ด ์šฐ์„ ๊ถŒ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ, ํ˜„์‹ค์ ์œผ๋กœ ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ์ •๋ง ์žก๊ธฐ ์–ด๋ ค์šด! ์• ๋งคํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋งŒ๋“ค์–ด ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 โž” ๊ทธ๋ž˜์„œ ์ตœ๊ทผ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก๊ณผ ์ž๋™ ๋นˆ ๋“ฑ๋ก์ด ์ถฉ๋Œ๋‚˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ”๊พธ์—ˆ๋‹ค.

 

Description:

The bean 'memoryMemberRepository', defined in class path resource [hello/core/AutoAppConfig.class], could not be registered. A bean with that name has already been defined in file [hello\core\member\MemoryMemberRepository.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

 

โœ” ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ์‹คํ–‰ ์‹œ ๋‚˜์˜ค๋Š” ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€. ์นœ์ ˆํ•˜๊ฒŒ ๋ฐ‘์— ์ถฉ๋Œ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ ํ˜€ ์žˆ๋‹ค.

 

 

์ถฉ๋Œ ํ—ˆ์šฉ ๋ฐฉ๋ฒ•(๊ถŒ์žฅํ•˜์ง€ X)

 

 

 

 

๋ฐ˜์‘ํ˜•

'IT > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… - ์˜ต์…˜์ฒ˜๋ฆฌ)  (0) 2023.12.21
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž… - ๋‹ค์–‘ํ•œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•)  (1) 2023.12.12
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์ปดํฌ๋„ŒํŠธ ์Šค์บ” - ํ•„ํ„ฐ)  (0) 2023.11.17
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์ปดํฌ๋„ŒํŠธ ์Šค์บ” - ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์˜์กด๊ด€๊ณ„ ์ž๋™ ์ฃผ์ž…)  (0) 2023.11.02
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ - @Configration๊ณผ ์‹ฑ๊ธ€ํ†ค)  (0) 2023.10.30