์ด์ฉ๋ค๋ณด๋ Spring ๊ฐ๋ฐ๋ ํ๊ฒ ๋ ๋
์คํ๋ ค ์ข์ (?)
Notion์ ์ ๋ฆฌํด๋๋๊ฑฐ๋ฅผ ๊ฐ์ ธ์๋๋ ํ์์ด ๋ง์ด ๊นจ์ง๋ด
์ฐธ๊ณ ๋ก Spring Framework์ ์คํ๋ง์ ๊ฐ๋ฐ์๊ฐ ํธํ๊ฒ ์ ์ฉํ๊ฒ ๊ฐ๋ฐํ๊ธธ ๋ฐ๋ผ๋ฉฐ
๋ด๋ ์ด ์ค๊ธธ ๋ฐ๋๋ค๋ ๋ป์ด๋ผ๊ณ ํ๋ค ใ
Spring Framework
์ ์
์๋ฐ ๊ธฐ๋ฐ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ
ํน์ง
- ๊ฐ์ฒด ์งํฅ ๊ฐ๋ฐ
- Application ๊ฐ๋ฐ์ ์ฉ์ดํ๋๋ก (๋น ๋ฅด๊ณ ํจ์จ์ ) ๊ธฐ๋ณธ ํ๊ณผ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ, API ๋ฑ์ ์ ๊ณตํจ
- ๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณต
๐คฎ ๋ผ์ด๋ธ๋ฌ๋ฆฌ vs ํ๋ ์์ํฌ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๊ฐ๋ฐ์๊ฐ ํ์ํ ๊ธฐ๋ฅ์ด ์์ ๋ ์ง์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ๊ตฌํํด๋ ๊ฒ.
- String์ java.lang.String์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๊ธฐ๋ฅ
- ํ๋ ์์ํฌ: ์ ํด์ง ํ๋ฆ์ ๋ง๊ฒ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ๊ตฌํ๋์ด ์๋ ๊ฒ.
- ์คํ๋ง ํ๋ ์์ํฌ์์๋ MVC๋ผ๋ ๊ตฌ์กฐ์์ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐํจ
๐ช MVC ํจํด
- Model, View, Controller
- ์ด๋ป๊ฒ ๊ธฐ๋ฅ์ ์ ๋๋ ์ ์ฌ์ฉ์๊ฐ ์ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์์๊น?
- ๋์์ธ ํจํด ์ค ํ๋๋ก ๊ฐ๋ฐํ๋ ๊ท์ฝ์ ์ ํด์ ์ฝ๊ฒ ์ธ ์ ์๋ ํํ๋ก ๋ง๋ ๊ฒ.
- ์๋ฅ ํ๋ก ๋ง๋ค ๋) ์๋ก์ด ์์ด๋์ด → ๋ณด์ → ์ ์ง ... ๊ฐ์ ๊ท์ฝ
- ์ฌ์ฉ์๊ฐ Controller๋ฅผ ์กฐ์ → Controller๋ Model์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด → View์์ ์ด๊ฑธ ์ฌ์ฉ์์๊ฒ ํํํด์ ์ ๋ฌํด์ค
Spring 3๊ฐ์ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
1. Spring Container
(๋๋ Application Context๋ผ๊ณ ๋ถ๋ฆผ)
- ์คํ๋ง์ ๋ฐํ์ ์์ง์ ์ ๊ณตํจ
- ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ App์ ๊ตฌ์ฑํ๋ Object๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํจ → ์ด Object๊ฐ Bean(๋น)์
- ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํด์ฃผ๋ Object
- ์์กด์ฑ ๊ฐ๋ ๊ฐ์ฒด์ DI(์์กด์ฑ ์ฃผ์ , Dependency Injection)๋ฅผ ํตํด Object๊ฐ ๊ฒฐํฉ๋๋ก ๋ฎ์ถฐ์ค
๐ก ๐คข Bean : Spring์์ Applicatiopn์ ๊ตฌ์ฑํ๋ Object
2. ๊ณตํต ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
- ์คํ๋ง์ Bean์ด ์์ฑ๋๊ณ ๋์ํ๋ ํ์ ์ ๊ณตํด์ฃผ๊ณ , ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋์ง์ ๋ํ ๊ธฐ์ค๋ ์ ๊ณตํจ → ์ด๋ฅผ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ผ๊ณ ํจ
- ์คํ๋ง์ ํฌ๊ฒ 3๊ฐ์ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ง์ํจ (๊ถ์ฅ)
1) IoC / DI ๐
์ค๋ธ์ ํธ์ ์๋ช ์ฃผ๊ธฐ์ ์์กด ๊ด๊ณ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ.
- ์ ์ฐํจ
- ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
- ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น
- ๋์์ธ ํจํด์ ํต์ฌ ์๋ฆฌ๋ฅผ ๋ด๊ณ ์์
- ์ฃผ๋ก ํ๊ฒฝ์ค์ ์ ๋ด๋นํ๋ XML ํ์ผ์ ์ํด ์ค์ ๋๊ณ ์ํ๋จ
IoC (Inversion of Control)
- ๋ง ๋ป๋๋ก ์ ์ด์ ์ญ์
- ์ฌ์ฉ์๊ฐ Object๋ฅผ ์์ฑํ์ง ์๊ณ ์คํ๋ง์ด ์งํ ํด์ค → ๊ฒฝ๋ ์ปจํ ์ด๋
- Service, DAO ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ์์ฑ (new)๋ฅผ ํ์ง ์์
- @Autowired๋ฅผ ํตํด ๋ฐ์ ์ฌ์ฉํจ
public class order {
private customer customer;
public order() {
this.customer = new customer();
}
}
// Spring ํ๋ก์ ํธ
public class order {
@Autowired
private customer customer;
}
- ์คํ๋ง ์ปจํ
์ด๋ (IoC Container)๋ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ Object๋ฅผ Bean์ผ๋ก ๊ด๋ฆฌํ๊ณ ์์
- @Autowired๋ฅผ ํตํด Object๋ฅผ ์ฃผ์ ํด์ค
- ๊ธฐ์กด Java ์์๋ new๋ก ์์ฑํด์ ํ๋ผ๋ฏธํฐ๋ก ๋ค๋ฅธ object๋ก ๋ณด๋ด๊ฑฐ๋ ์๋ฉธํจ → new & delete ๋ฑ ์ฌ์ฉ์๊ฐ ์ ์ด๋ฅผ ์ง์ ์งํํจ
๐ก Spring์์๋ ์ ์ด๋ฅผ ์ฌ์ฉ์๊ฐ ์๋๋ผ, Spring Framework๊ฐ ์งํ ํด์ค๋ค
๐ท Spring Bean vs JAVA Bean
- Spring Bean
- Spring Container๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
- ๊ฐ๋ฐ์๊ฐ ์๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์ฑํด ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ํด์ค.
- ํ์ํ ๊ณณ์ ์์กด์ฑ์ ์ฃผ์ ํด์ฃผ๋ ๊ฐ์ฒด๋ค์ ์๋ฏธ
- JAVA Bean
- ๋ฐ์ดํฐ ์ ๋ฌ์ ์ํด ์ฌ์ฉ๋๋ ์๋ฐ ๊ฐ์ฒด
- ์คํ๋ง์ DTO(VO)์ ์ ์ฌํ ๊ฐ๋
- private ๋ณ์์ Getter/Setter๋ง์ ๊ฐ์ง๊ณ ์๊ณ ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ ๊ฐ์ฒด
DI (Dependency Ingection)
- ๋ง ๊ทธ๋๋ก ์์กด์ฑ ์ฃผ์
- ์คํ๋ง์์ IoC ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๋ฐฉ์
- IoC๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์ ์คํ๋ง ์ฐจ๋ณ์ ์ด ๋ถ์กฑํด์ ๋ง๋ค์ด์ง ๊ฐ๋ .
๐ฌ DI ์ฌ์ฉํ๋ ์ด์
- ๊ฐ์ฒด๊ฐ์ ์์กด์ฑ์ ์ค์ด๊ธฐ ์ํจ
- ๋ฐ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ ↑, ์์ ์ฉ์ด
// ๊ธฐ์กด ์๋ฐ ํ๋ก์ ํธ
class concept_api implements Post(){}
class concept_Spring implements Post(){}
class Blog_log() {
private Post post; // ๋ธ๋ก๊ทธ ๊ธ ํด๋์ค
public Blog_log() {
this.post = new concept_api();
this.post = new concept_Spring();
}
}
๊ธฐ์กด ํ๋ก์ ํธ๋ CRUD ํจ์๊ฐ ํ์ํจ;;;
private Post post;
public Blog_log(Post post) {
this.post = new Post();
}
์์กด์ฑ์ ์ฃผ์
ํด DI๋ฅผ ์ฌ์ฉํ๋ฉด Blog_log ํ๋์ ํด๋์ค๋ก ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
2) PSA
Portable Service Abstraction, ํฌํฐ๋ธ ์๋น์ค ์ถ์ํ
- ํน์ ํ๊ฒฝ์ด๋ ์๋ฒ, ๊ธฐ์ ์ ์ข ์๋์ง ์์ → ์ ์ฐํ๊ฒ App ๊ฐ๋ฐ ๊ฐ๋ฅ
- ์คํ๋ง์ ์ถ์ํ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ /ํ๊ฒฝ์ ์ข
์๋์ง ์๋๋ก ํด์ค
- MyBatis, JPA ๋ฑ ์ธ๋ถ ๊ธฐ์ ์ ๋ํ ์๋ฌ๋ ์ถ์ํํด์ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํด์ค
- ์ถ์ํ๋ฅผ ์ํด Proxy ํจํด๊ณผ ๊ฐ์ ๋์์ธ ํจํด์ด ์์ฃผ ์ฌ์ฉ๋๋ค๊ณ ํจ
3) AOP
Aspect Oriented Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (OOP ๋ณด๋ค ์ข ๋ ๋ฐ์ ๋ ๊ฐ๋ )
- App์ ๊ณตํต์ ์ผ๋ก ๋ํ๋๋ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋
์ง์ ์ผ๋ก ๋ชจ๋ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
- ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๋ฑ
- ์คํ๋ง์ AOP๋ฅผ ์ง์ํด์ ์ํฐํ๋ผ์ด์ฆ ์๋น์ค๋ฅผ ์ ์ฉํ๊ณ ๋ ์ฑ ์์ ๋ถ๋ฆฌํ์ฌ ๊นฐ๋ํ๊ฒ ํจ. ๊ฐ์ฒด์งํฅ ์ค๋ฝ๊ฒ ๊ฐ๋ฐํ๋๋ก ํด์ค.
- ์คํ๋ง์ @Transactional ์ด๋ผ๋ ์ ์ธ์ ํธ๋์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ AOP๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค
๐ข Enterprise Service (์ํฐํ๋ผ์ด์ฆ ์๋น์ค)
- ์ธ๋ถ ๋ฐ์ดํฐ ์กฐํ ๋ฐ ์ธ๋ถ ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ํ์ดํ๋ผ์ธ.
- Sync/Async ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์.
- Web ์๋น์ค, HTTP ๊ฐ์ ๋ค์ค ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์์
4) POJO (Plain Old Java Object)
์๋ฐ๊ฐ ๋๋ฌด ๋ฌด๊ฑฐ์์, ์คํ๋ง์์ ์๋ฐ ๊ฐ๋ ๋ง ๊ธฐ๋ณธ์ ์ธ๊ฑฐ๋ง ๊ฐ์ ธ์์ ํ์! ํ๊ฑฐ
3. API
- Application Programming Interface, ์์ฉ ํ๋ก๊ทธ๋จ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค
- ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์๊ฒ ๋ง๋ ์ธํฐํ์ด์ค
- ์คํ๋ง์ ์ํฐํ๋ผ์ด์ฆ ์ฑ์ ๊ฐ๋ฐํ ๋, ๋ค์ํ ์์ญ์์ ๋ฐ๋ก ํ์ฉํ ์ ์๋ API๋ฅผ ์ ๊ณตํจ
- ๐ Layerd Architecture(๊ณ์ธตํ ์ํคํ
์ณ)์์ ํ์ํ ์ฃผ์ ๊ธฐ์ ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํจ
- function, class, ์คํ ์์ค ๊ธฐ์ ๋ฑ๋ฑ ์ง์ํด์ค
- ex) ํด๋ผ์ด์ธํธ์ Get request๋ฅผ ์ฒ๋ฆฌํ๋ @GetMapping ๊ฐ์ API๋ฅผ ์ ๊ณตํจ
- ์ง๋์ผ~ ๊ฐ์๊ฑธ ๋ง๋ค๊ณ ์ถ๋ค!?๋ฉด TTS ๊ฐ์ UI๋ ๊ตฌ๊ธ์ด๋ ๋ค์ด๋ฒ๊บผ API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ ์ ์๋ค
Spring MVC ๊ตฌ์กฐ
์คํ๋ง ํ๋ ์์ํฌ๋ MVC ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง
๐ก View - Controller - Service - Serviceimpl - DAO - DAOimpl - DTO
1) View
- ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ํ๋ฉด
- ์คํ๋ง์ JSP๋ฅผ ํตํด ํ๋ฉด์ ๊ตฌ์ฑํจ
- Controller๋ฅผ ํตํด Backend ์๋ฒ์ ์ฐ๊ฒฐํจ
2) Controlloer
- View์ Service ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํด์ค.
- ํด๋ผ์ด์ธํธ์์ ์ ๋ ฅํ URL์ ๋ง๊ฒ View๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ๋ฐ์ดํฐ๋ฅผ Service๋ก ์ ๋ฌํด์ค
@RequestMapping(value = "/")
public String home()
{
service.method();
return "index";
} // localhost:port/๋ก ์ ์ํ ํด๋ผ์ด์ธํธ์๊ฒ index.jsp๋ฅผ ๋ฐํํ๋ค.
3) Service
- ์ค์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ญํ . ๋ชจ๋ ๊ธฐ๋ฅ์ Service์์ ๋ง๋ค์ด์ง.
- Controller๋ฅผ ํตํด View์ ์ฐ๊ฒฐ๋๊ณ , DAO๋ฅผ ํตํด DB์ ์ฐ๊ฒฐ๋จ
4) DAO
- Data Access Object
- ํ๋ก์ ํธ์ DB๋ฅผ ์ฐ๊ฒฐํด์ค
- Mapper์ SQL์ ๋ช ์ํ๊ณ Mapper์ ํจ๊ป DB ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์
- JDBC, iBATIS(MyBatis), ํ์ด๋ฒ๋ค์ดํธ ๋ฑ ์ง์ ๊ธฐ๋ฅ ์ ๊ณต. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ ์ฝ๊ฒ ๊ฐ๋ฅ
๐ฌ Service์ Serviceimpl ์ DAO์ DAOimpl
- interface๋ฅผ ๊ตฌํํ ๊ตฌ์กฐ
5) DTO
- Data Transfer Object, VO(Value Object)๋ผ๊ณ ๋ ๋ถ๋ฆผ
- MVC ๊ตฌ์กฐ ์ฌ์ด์ฌ์ด์์ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ์ค๋ธ์ ํธ.
- getter/setter ํจ์๊ฐ ์ด์ ํด๋น๋จ
- ์ฃผ๋ก DB ํ ์ด๋ธ๊ณผ ๋งค์นญ๋จ
public class temp {
private String id;
private String pwd;
public String getId() {return id;}
public void setId(int id) {this.id = id;}
public String getPwd() {return pwd;}
public void setPwd(String pwd) {this.pwd = pwd;}
}
Layerd Architecture
(๊ณ์ธตํ ์ํคํ
์ฒ)
Domain Model์์ ์ฌ์ฉํ๋ ๋จ์ด? โ
- ๊ฐ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๋ถ๋ฆฌ๋ ๊ฐ ๊ธฐ๋ฅ(์์)๋ ์์ง๋๊ฐ ๋์์ง๊ณ , ๊ธฐ๋ฅ๋ณ ๊ฒฐํฉ๋๋ ๋ฎ์์ง
- ์๋ก ๋ค๋ฅธ ๋ชจ๋์ ๋ถ๋ฆฌํด์ ๋ค๋ฅธ ๋ชจ๋์ ์ํฅ์ด ์๊ฐ๋๋ก ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ์คํ๋ง์ 3๊ฐ์ง๋ก ๋๋์ด ์ฒ๋ฆฌํจ
- ๊ฐ ๊ณ์ธต์ ์์ ์ ๊ณ์ธต๋ง ์ ์ฒ๋ฆฌํ๋๋ก ์ถฉ์ค, ์ฑ
์์ ์ง
- presentation ๊ณ์ธต์ ์ข ์๋ ๊ฐ์ฒด๋ฅผ Service ๊ณ์ธต์ผ๋ก ์ ๋ฌํ๋ ๋ฑ์ ์ค์๊ฐ ๋ง์
- ๊ฒฐํฉ๋ ๋๊ฒ ํ์ง๋ง ๊ฒ. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ.
1) Presentation Layer
- ์น ๊ธฐ๋ฐ์ผ๋ก HTTP Request, Response ์ฒ๋ฆฌํ๋ ๊ณ์ธต
- ์ด๋ ํ ์์ฒญ๊ณผ ์๋ต ์ํ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋์ง์ ๋ํ ์ฑ ์.
- ์์ฑํ Class๋ฅผ Presentaion ๊ณ์ธต์ผ๋ก ๋ช ์ํ๊ธฐ ์ํด์๋ @Controller ๋๋ @RestController ๋ก Annotation์ ์ฌ์ฉํด์ค์ผํจ
- ์คํ๋ง์ HTTP ๋ฉ์์ง๋ฅผ ์์ ํ๊ธฐ ์ํด Restful API์ ๋ง๋ Mapping Annotation์ ์ ๊ณตํจ
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping ๋ฑ๋ฑ๋ฑ
2) Business(Service) Layer
๋น์ฆ๋์ค ์๋น์ค ๋ก์ง์ ๋ด๊ณ ์๋ ๊ณ์ธต
- ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๋ ๊ณ์ธต → ์ผ๋ฐ์ ์ผ๋ก ์๋น์ค์ ํต์ฌ ๋ก์ง๋ค์ด ์ฃผ๋ก ๋ด๊ฒจ ์์
- ์๋น์ค ๊ณ์ธต ๋ช ์ํ ๋๋ @Service ์ด๋ ธํ ์ด์ ์ฌ์ฉํด์ผ ํจ
- ํธ๋์ญ์ ์ ๋ํ ๊ด๋ฆฌ๋ ์๋น์ค ๊ณ์ธต์์ ์ฒ๋ฆฌํ๋๊ฒ ์ผ๋ฐ์ ์ธ ํจํด
3) Data Access Layer
DB์ ์ฐ๋๋์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ณ์ธต
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ๊ธฐ ์ํด DB์ ์ ๊ทผํ๋ ๊ณ์ธต
- @Repository ์ด๋ ธํ ์ด์ ์ฌ์ฉํจ
- ์คํ๋ง์ @Repository ๊ฐ ๋ถ์ ์ด๋ ธํ ์ด์ ์ Bean์ผ๋ก ๋ฑ๋กํด์ค.
- ์๋ฌ ์ถ์ํ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ ์ ๊ณตํด์ค
์ฐธ๊ณ ๋งํฌ
https://mangkyu.tistory.com/156
https://velog.io/@duckchanahn/Spring-%EC%9D%B4%EB%A1%A0%EC%A0%95%EB%A6%AC
'๐ Java&Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Cron Expression (0) | 2023.01.25 |
---|---|
StringUtils (0) | 2023.01.18 |
Looking For Annotation~ (0) | 2023.01.16 |
Intellij) Junit Test Code ์์ฑ ์ "Execution failed for task" ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2023.01.09 |
Web Server vs WAS (0) | 2022.04.25 |