2021. 8. 12. 08:00ใBack-End ์์ ์ค/Spring Framework
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ฃผ๋ํ๋์ Spring Boot์ ๋ํด์ ๊ณต๋ถํ๊ณ ์๋ ๊ฒ์ด์์.
์ค๋์ Spring Bean๊ณผ ์์กด๊ด๊ณ์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์.
๋ฐ๋ก ์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
์ฝ๋์ ๊ด๋ จํ ๋ด์ฉ์ ์ฃผ๋ํ๋์ Github์์ ํ์ธ ํ์ค ์ ์์ต๋๋ค!
๐ ๋ชฉ์ฐจ
01.[Spring Boot] thymeleaf์ Spring Boot
02.[Spring Boot] Spring Web ๊ฐ๋ฐ ๊ธฐ์ด
03.[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend
04.[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ
05.[Spring Boot] Spring Bean๊ณผ ์์กด๊ด๊ณ
06.[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก
07.[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ
08.[Spring Boot] ๊ธฐ์กด ์ฝ๋ ์ ์๋๊ณ , ์ค์ ์ผ๋ก ๊ตฌํ Class ๋ณ๊ฒฝ
09.[Spring Boot] ํตํฉ Test
10.[Spring Boot] JPA
11.[Spring Boot] Spring Data JPA
12.[Spring Boot] AOP
๐ Spring Bean๊ณผ ์์กด๊ด๊ณ
Spring Bean์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ!
- Component Scan / ์๋ ์์กด๊ด๊ณ ์ค์
- Java code๋ก ์ง์ Spring Bean ๋ฑ๋ก
๋จผ์ Component Scan๊ณผ ์๋ ์์กด๊ด๊ณ์ ๋ํด์ ์์๋ณผ ๊ฒ์ด์์.
ํ์ Controller๊ฐ ํ์ Service์ ํ์ Repository๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์์กด ๊ด๊ณ๋ฅผ ์ค๋นํด๋ด์!
ํ์ Controller์ ์์กด ๊ด๊ณ ์ถ๊ฐ
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
// ์ปดํฌ๋ํธ ์ค์บ ๋ฐฉ์์ Controller
// ์ด ์ด๋
ธํ
์ด์
์ ์คํ๋ง์ด ๋ณด๊ณ , ํด๋น Controller Class๋ฅผ ๊ฐ์ฒด๋ก ๋ง๋ ๋ค ์คํ๋ง์ด ๊ฐ์ง๊ณ ์๋๋ค.
@Controller
// ๊ทธ๊ฒ์ ์คํ๋ง ์ปจํ
์ด๋์์ ๋น์ผ๋ก ๊ด๋ฆฌ ๋๋ค๊ณ ํํํ๋ค.
public class MemberController {
// ์๋์ ๊ฐ์ด MemberService๋ฅผ new๋ฅผ ํตํด ์์ฑํ๊ฒ ๋๋ฉด ๋ค๋ฅธ Controller์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋ฌธ์
// private final MemberService memberService = new MemberService();
private final MemberService memberService;
// Dependency Injection (DI)
// @controller๊ฐ ์๋ Controller ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋, @Autowired๊ฐ ๋ถ์ ์์ฑ์๋ ์คํ๋ง์ด ์ปจํ
์ด๋์์ ๋น์ผ๋ก ๊ด๋ฆฌํ ๋, ์์ฑ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด ๋ MemberService๋ฅผ ๋ฃ์ด์ค๋ค.
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
} // ์์ฑ์ () ๋
} // Class () ๋
๋จผ์ 13๋ฒ Line์ ์ฃผ์์ ์ณ๋จ๋๋ฐ, ์ด๊ฒ์ฒ๋ผ new๋ฅผ ํตํด Service๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด Member์ ๊ด๊ณ ์๋ ์ฌ๋ฌ Controller๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด์์.
๊ทธ๋์ ๋จผ์ ํ๋ ๋ณ์๋ก MemberService๋ฅผ ์ ์ธํ ๋ค์ '@Autowired'๋ฅผ ํตํด์ ์์ฑ์๋ฅผ ์ฃผ์
ํด ์ฃผ๋ ๋ฐฉ์์ผ๋ก DI๋ฅผ ํ ์ ์๋ ๊ฒ์ด์์.
์ด๋ ๊ฒ ๋๋ฉด @Controller๊ฐ ์๋ Controller ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋, @Autowired๊ฐ ๋ถ์ ์์ฑ์๋ Spring์ด Container์์ Bean์ผ๋ก ๊ด๋ฆฌํ ๋, ์์ฑ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด ๋ ํ๋ ๋ณ์๋ฅผ ๋ฃ์ด ์ฃผ๋๋ก ํด ์ฃผ๋ ์น๊ตฌ์์!
์ข ๋ ์ ๋ฆฌ๋ฅผ ํ์๋ฉด ์์ฑ์์ @Autowired๊ฐ ์์ผ๋ฉด Spring์ด ์ฐ๊ด ๋ ๊ฐ์ฒด๋ฅผ Spring Container์์ ์ฐพ์์ ๋ฃ์ด์ค๋ค๋ก ์ ๋ฆฌํ ์ ์๊ฒ ๋ค์!
์ด๋ ๊ฒ ๊ฐ์ฒด ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ Dependency Injection (DI)๋ผ๊ณ ํ๊ณ , ์ฐ๋ฆฌ๋๋ผ ๋ง๋ก ํ๋ฉด ์์กด์ฑ ์ฃผ์
์ด ๋๋ ๊ฒ์ด๋๋๋ค!
๐ก์ฐธ๊ณ :
helloController๋ Spring์ด ์ ๊ณตํ๋ Controller์ฌ์ Spring Bean์ผ๋ก ์๋ ๋ฑ๋ก.
@Controller๊ฐ ์์ผ๋ฉด ์๋ ๋ฑ๋ก.
๐ Component Scan ์๋ฆฌ
@Component : Spring Bean์ผ๋ก ์๋ ๋ฑ๋ก
@Controller : Cotroller๊ฐ Spring Bean์ผ๋ก ์๋ ๋ฑ๋ก๋ ์ด์ ๋ Component Scan ๋๋ฌธ
@Component๋ฅผ ํฌํจํ๋ ๋ค์ Annotation๋ Spring Bean์ผ๋ก ์๋ ๋ฑ๋ก
- @Contrller
- @Service
- @Repository
ํ์ Service Spring Bean ๋ฑ๋ก
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService ( MemberRepository memberRepository ) {
this.memberRepository = memberRepository;
} // ์์ฑ์ ๋
} // Class ๋
๐ก์ฐธ๊ณ :
์์ฑ์์ '@Autowired' ์์ฑ ์ ๊ฐ์ฒด ์์ฑ ์์ ์ Spring Container์์ ํด๋น Spring Bean์ ์ฐพ์ ์ฃผ์
์์ฑ์๊ฐ 1๊ฐ๋ง ์๋ค๋ฉด 'Autowired' ์๋ต ๊ฐ๋ฅ
ํ์ Repository Spring Bean ๋ฑ๋ก
@Repository
public class MemoryMemberRepository implements MemberRepository {
} // MemoryMemberRepository() ๋
์์ ๊ฐ์ด ๊ธฐ์กด์ ๋ง๋ค์๋ MemoryMemberRepository์ '@Repository'๋ฅผ ์ถ๊ฐํด์ค์ผ๋ก์จ,
Spring Bean์ ๋ฑ๋กํ์ฌ ์ค ๊ฒ์ด์์!
memberService์ memberRepository๊ฐ Spring Container์ Spring Bean์ผ๋ก ๋ฑ๋ก ๋์ด ์๋ ๊ฒ์ด์์.
๐ก์ฐธ๊ณ :
Spring์ Spring Container์ Spring Bean์ ๋ฑ๋ก ์ ๊ธฐ๋ณธ์ผ๋ก Sigle Tone์ผ๋ก ๋ฑ๋ก (์ ์ผํ๊ฒ ํ๋๋ง ๋ฑ๋กํด์ ๊ณต์ )
๋ฐ๋ผ ๊ฐ์ Spring Bean์ด๋ฉด ๋ชจ๋ ๊ฐ์ ์ธ์คํด์ค์ธ ์ ์ด๋ค.
์ค์ ์ผ๋ก Single Tone์ด ์๋๊ฒ ์ค์ ํ ์ ์์ผ๋, ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๊ณ ์๋ ๋๋ถ๋ถ Single Tone ์ฌ์ฉ
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] ๋ฑ๋ก, ๋ชฉ๋ก ๋ณด๊ธฐ ๊ตฌํํ๊ธฐ (0) | 2021.08.14 |
---|---|
[Spring Boot] Java Code๋ก ์ง์ Spring Bean ๋ฑ๋ก (0) | 2021.08.13 |
[Spring Boot] Service ๊ฐ๋ฐ ๋ฐ Test Case ์์ฑ (0) | 2021.08.11 |
[Spring Boot] ํ์ ๊ด๋ฆฌ ์์ - Backend (0) | 2021.08.06 |
[Spring Boot] Spring Web ๊ฐ๋ฐ ๊ธฐ์ด (0) | 2021.08.05 |