Spring ์ ๋ฌธ / 4. ์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ
by rlaehddnd04221. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
ํ์(๋๋ฉ์ธ) ์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์๋น์ค์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์์กด๊ด๊ณ๋ฅผ ์ค๋นํ์.
package kdo6301.spring0.controller;
import kdo6301.spring0.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
โ๏ธ์์ฑ์์ @Autowired ์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด ์คํ๋ง์ด ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค.
์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ง์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ Dependency Injection ( DI ) , ์์กด์ฑ ์ฃผ์ ์ด๋ผ ํ๋ค.
Expected : memberController -> memberService
-> Result : memberController - X -> memberService
์๋ฌ๋ฉ์ธ์ง
'kdo6301.spring0.service.MemberService' that could not be found.
-> memberService๊ฐ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์์ง ์๋ค.
-> ๋ฐ๋ผ์ memberService๋ฅผ ์คํ๋ง ๋น์ ๋ฑ๋กํด์ฃผ์ด์ผ ํจ.
( MemberService์ ๊ฐ๋ณด๋ฉด ์์ํ ์๋ฐ์ฝ๋๋ก ์์ฑ๋์ด ์๋ค )
์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
1. ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
- @Component ์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
- @Controller ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋ ์ด์ ๋ ์ปดํฌ๋ํธ ์ค์บ ๋๋ฌธ์
- @Component๋ฅผ ํฌํจํ๋ @Controller, @Service, @Repository๋ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
ํ์ ์๋น์ค ์คํ๋ง ๋น ๋ฑ๋ก
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
...
โ๏ธ ์์ฑ์์ @Autowired๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์์ฑ ์์ ์ ์คํ๋ง ์ปจํ ์ด๋์์ ํด๋น ์คํ๋ง ๋น์ ์ฐพ์์ ์ฃผ์ ํ๋ค.
ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์คํ๋ง ๋น ๋ฑ๋ก
@Repository
public class MemoryMemberRepository implements MemberRepository{
์ด๋ ๊ฒ ์ค์ ํด์ฃผ๋ฉด
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์์ปจํธ๋กค๋ฌ์์ ํ์์๋น์ค์ ํ์๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ๊ทผํ ์ ์๋ค.
์ฐธ๊ณ : ์คํ๋ง์ ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น์ ๋ฑ๋กํ ๋, ๊ธฐ๋ณธ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๋ฑ๋กํ๋ค(์ ์ผํ๊ฒ ํ๋๋ง ๋ฑ๋กํด์ ๊ณต์ ํ๋ค) ๋ฐ๋ผ์ ๊ฐ์ ์คํ๋ง ๋น์ด๋ฉด ๋ชจ๋ ๊ฐ์ ์ธ์คํด์ค๋ค. ์ค์ ์ผ๋ก ์ฑ๊ธํค์ด ์๋๊ฒ ์ค์ ํ ์ ์์ง๋ง, ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๋ฉด ๋๋ถ๋ถ ์ฑ๊ธํค์ ์ฌ์ฉํ๋ค.
- DI์๋ ํ๋์ฃผ์ , setter ์ฃผ์ , ์์ฑ์ ์ฃผ์ ์ด๋ ๊ฒ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ์์์๋ ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ , ์์กด๊ด๊ณ๊ฐ ์คํ์ค์ ๋ณํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ผ๋ฏ๋ก ์์ฑ์ ์ฃผ์ ์ ๊ถ์ฅํ๋ ํธ์ด๋ค
- ์ค๋ฌด์์๋ ์ฃผ๋ก ์ ํํ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ ์ฝ๋๋ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ค.
- @Autowired ๋ฅผ ํตํ DI๋ helloController , memberService ๋ฑ๊ณผ ๊ฐ์ด ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์์๋ง ๋์ํ๋ค. ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ์ง ์๊ณ ๋ด๊ฐ ์ง์ ์์ฑํ ๊ฐ์ฒด์์๋ ๋์ํ์ง ์๋๋ค.
2. ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
package kdo6301.spring0;
import kdo6301.spring0.repository.MemberRepository;
import kdo6301.spring0.repository.MemoryMemberRepository;
import kdo6301.spring0.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService()
{
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository()
{
return new MemoryMemberRepository();
}
}
๋ค์ ์ฝ๋์ ๊ฐ์ด @Bean ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ์ฌ ํ๋ฒ์ ์คํ๋ง ๋น์ ๋ฑ๋กํ ์ ์๋ค.
์ฅ์ : ์ด ํ์ผ๋ง ์์ ํ๋ฉด ์คํ๋ง๋น์ ๊ด๋ฆฌํ ์ ์๋ค.
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring ์ ๋ฌธ / 6. DB ์ ๊ทผ ๊ธฐ์ (0) | 2023.01.19 |
---|---|
Spring ์ ๋ฌธ / 5. ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ (1) | 2023.01.17 |
Spring ์ ๋ฌธ / 3. ํ์ ๊ด๋ฆฌ ์์ - ๋ฐฑ์๋ ๊ฐ๋ฐ (0) | 2023.01.16 |
Spring ์ ๋ฌธ / 2. Spring Web ๊ฐ๋ฐ ๊ธฐ์ด (0) | 2023.01.12 |
Spring ์ ๋ฌธ / 1. ํ๋ก์ ํธ ํ๊ฒฝ์ค์ (0) | 2023.01.12 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422