ํ๋ฉด์ ๋์ฐ๊ธฐ ์ํด์๋ ์ปจํธ๋กค๋ฌ์ ๋ทฐ ํฌํ๋ฆฟ์ด ํ์
-> ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ ์์ฑ
๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ํตํด์ ํ์๊ฐ์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ด์ผ ํจ ( ์์กด๊ด๊ณ )
( ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ์์กดํ๊ณ ์๋ค)
์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ
์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
ํ์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์์๋น์ค์ ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์์กด๊ด๊ณ๋ฅผ ์ค๋นํ์.
์ ํํ๋์ด ์๋ ํจํด
์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ ์ธ๋ถ ์์ฒญ์ ๋ฐ๊ณ
์๋น์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ค๊ณ
๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ
๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ ์์ฑ
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
}
@Controller ์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด
MemberController ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ
์คํ๋ง ์ปจํ ์ด๋์ ๋ฃ์ด๋์ด ์คํ๋ง์ด ๊ด๋ฆฌ
์ด๋ ธํ ์ด์ (Annotation)
์๋ฐ ์ด๋ ธํ ์ด์ (Annotation)์๋ฐ์ ์ด๋ ธํ ์ด์ ์ ์์ค์ฝ๋์ ์ถ๊ฐํด์ ์ฌ์ฉํ ์ ์๋ ๋ฉํ ๋ฐ์ดํฐ์ ์ผ์ข ์ด๋ค.
๋ฉํ ๋ฐ์ดํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ์ปดํ์ผ ๊ณผ์ ๊ณผ ์คํ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋์ง๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํ ์ถ๊ฐ ์ ๋ณด๋ค
'๊ณจ๋ฑ ์ด(@)' ๊ธฐํธ๋ฅผ ์์ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค

Spring Bean
์คํ๋ง ๋น์ ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด(POJO)๋ฅผ ์๋ฏธํ๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ ๊ธฐ์กด์ Java Programming์์๋ Class๋ฅผ ์์ฑํ๊ณ new๋ฅผ ์ ๋ ฅํ์ฌ ์ํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ ํ์ ์ฌ์ฉํ์์ต๋๋ค. ํ์ง๋ง Spring์์๋ ์ง์ new๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ๊ฐ์ฒด๊ฐ ์๋๋ผ, Spring์ ์ํ์ฌ ๊ด๋ฆฌ๋นํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ Spring์ ์ํ์ฌ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ ํฉ๋๋ค.
Spring Framework ์์๋ Spring Bean์ ์ป๊ธฐ ์ํ์ฌ ApplicationContext.getBean()์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Spring์์ ์ง์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ป์ด์ ์ฌ์ฉํฉ๋๋ค.
Bean์ ๋ฑ๋กํ๊ธฐ ์ํด์๋ @Component Annotation์ ์ฌ์ฉํฉ๋๋ค.
@Component Annotation์ด ๋ฑ๋ก๋์ด ์๋ ๊ฒฝ์ฐ์๋ Spring์ด Annotation์ ํ์ธํ๊ณ ์์ฒด์ ์ผ๋ก Bean์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
์ค์ ๋ก ์ฌ์ฉ๋๋ ์์๋ฅผ ๋ณผ๊น์? ์ค์ Spring ํ๋ก์ ํธ์์ Controller๋ฅผ ๋ฑ๋กํ ๋์๋ ์๋์ ๊ฐ์ Annotation์ ์ฌ์ฉํฉ๋๋ค. ์๋์ ์์์์ Controller ์์ Spring ์๊ฒ ์๋ ค์ฃผ๊ธฐ ์ํ์ฌ @Controller Annotation์ ์ฌ์ฉํ์ต๋๋ค.


@Controller
public class MemberController {
private final MemberService memberService = new MemberService();
}
Spring ์ด ๊ด๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ฉด ๋ค ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก์ ํ๊ณ ์คํ๋ง ์ปจํ ์ด๋์ผ๋ก๋ถํฐ ๋ฐ์์ ์ฐ๋๋ก ๋ฐ๊พธ์ด์ผ ํ๋ค
new๋ก ๊ฐ์ฒด ์์ฑ ์ MemberController ๋ง๊ณ ๋ค๋ฅธ ์ฌ๋ฌ ์ปจํธ๋กค๋ฌ๋ค์ด MemberService๋ฅผ ๊ฐ์ ธ๋ค ์ธ ๋
(ex. ์ฃผ๋ฌธ์ปจํธ๋กค๋ฌ, ํ์์ ์ฌ๋ฌ ๊ตฐ๋ฐ์์ ์ฐ์ )
๊ฐ์ฒด ์ฌ๋ฌ ๊ฐ ๋ง๋ค ์ด์ ์์ , ํ๋๋ง ๋ง๋ค๊ณ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํด๋ ๋จ
์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ๊ธฐ ( ํ๋๋ง ๋ฑ๋กํจ )
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@Controller ์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด MemberController ๊ฐ์ฒด๋ฅผ ์์ฑ
์ด๋ ์์ฑ์๋ ํธ์ถ
์์ฑ์์ @Autowired ๊ฐ ์์ผ๋ฉด ์คํ๋ง์ด ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค.
์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ DI (Dependency Injection), ์์กด์ฑ ์ฃผ์ ์ด๋ผ ํ๋ค.
์ด์ ํ ์คํธ์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฃผ์ ํ๊ณ , ์ฌ๊ธฐ์๋ @Autowired์ ์ํด ์คํ๋ง์ด ์ฃผ์ ํด ์ค๋ค..
memberService๋ ์์ํ ์๋ฐ์ class์ด๋ค.
์คํ๋ง์ด ์ ๋ฐฉ๋ฒ์ด ์๋ค
memberService๊ฐ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์์ง ์๋ค.

์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
1) ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
2) ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
1) ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์
Component Scan
์ปดํฌ๋ํธ ์ค์บ์ @Component๋ฅผ ๋ช ์ํ์ฌ ๋น์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํด๋์ค ์์ @Component๋ฅผ ๋ถ์ด๋ฉด ์คํ๋ง์ด ์์์ ์คํ๋ง ์ปจํ ์ด๋์ ๋น์ ๋ฑ๋กํ๋ค.
@Controller, @Service, @Repository, @Configuration๋ @Component์ ์์์ ๋ฐ๊ณ ์์ผ๋ฏ๋ก ๋ชจ๋ ์ปดํฌ๋ํธ ์ค์บ์ ๋์์ด๋ค.

@Service
public class MemberService {
@Service ์ด๋ ธํ ์ด์ ์ถ๊ฐ : ์คํ๋ง์ด ์ปจํ ์ด๋์ MemberService๋ฅผ ๋ฑ๋ก ( ํ์ ์๋น์ค ์คํ๋ง ๋น ๋ฑ๋ก )
@Repository
public class MemoryMemberRepository implements MemberRepository{
@ Repository : ์คํ๋ง์ด ์คํ๋ง ์ปจํ ์ด๋์ MemoryMemberRepository ๋ฑ๋ก ( ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์คํ๋ง ๋น ๋ฑ๋ก )
์์กด์ฑ ์ฃผ์ ๊ณผ ๋น ๋ฑ๋ก์ ๋ค๋ฅธ ๊ฒ์ธ๋ฐ ์ผ๋จ IoC ์ปจํ ์ด๋์ ๋น์ผ๋ก ๋ฑ๋ก์ด ๋์ด์ผ ์์กด์ฑ ์ฃผ์ ์ ํ ์ ์๋ค.
์์ฑ์์ @Autowired๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์์ฑ ์์ ์ ์คํ๋ง ์ปจํ ์ด๋์์ ํด๋น ์คํ๋ง ๋น์ ์ฐพ์์ ์ฃผ์ ํ๋ค.
์์ฑ์๊ฐ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired๋ ์๋ตํ ์ ์๋ค.
2) ์๋ฐ ์ฝ๋๋ก ์ง์ ์คํ๋ง ๋น ๋ฑ๋กํ๊ธฐ
ํ์ ์๋น์ค์ ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ @Service, @Repository, @Autowired ์ ๋ ธํ ์ด์ ์ ์ ๊ฑฐํ๊ณ ์งํํ๋ค.
hello.hellospring.service.MemberService' that could not be found.
์ด๋ ธํ ์ด์ ์ ์ ๊ฑฐ ( ์ปดํฌ๋ํธ ์ค์บ์ด ์๋จ ) -> ์คํ๋ง ๋น ๋ฑ๋ก์ด ์๋์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ๋ฐ์
์ง์ ๋น ๋ฑ๋กํ๊ธฐ
SpringConfig class ์์ฑ
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration // ์คํ๋ง์ด ๋ฐ ๋ configuration ์ ์ฝ๊ณ
public class SpringConfig {
@Bean // ์คํ๋ง ๋น์ ๋ฑ๋กํ ๊ฑฐ์ผ ๋ผ๋ ์๋ฏธ
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
- ์ค๋ฌด์์๋ ์ฃผ๋ก ์ ํํ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ ์ฝ๋๋ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ํํ ๋์ง ์๊ฑฐ๋, ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ฉด ์ค์ ์ ํตํด ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
- @Autowired ๋ฅผ ํตํ DI๋ helloController , memberService ๋ฑ๊ณผ ๊ฐ์ด ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์์๋ง ๋์ํ๋ค. ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ์ง ์๊ณ ๋ด๊ฐ ์ง์ ์์ฑํ ๊ฐ์ฒด์์๋ ๋์ํ์ง ์๋๋ค.
'Spring > Spring ์ ๋ฌธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์ ๋ฌธ - (14) ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ / ์์ Jdbc (0) | 2023.01.26 |
---|---|
์คํ๋ง ์ ๋ฌธ - (13) ํ์ ์น ๊ธฐ๋ฅ (0) | 2023.01.22 |
์คํ๋ง ์ ๋ฌธ - (11) ํ์ ์๋น์ค ํ ์คํธ (0) | 2023.01.20 |
์คํ๋ง ์ ๋ฌธ - (10) ํ์ ์๋น์ค ๊ฐ๋ฐ (0) | 2023.01.20 |
์คํ๋ง ์ ๋ฌธ - (9) ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํ ์คํธ ์ผ์ด์ค ์์ฑ (1) | 2023.01.20 |