[Spring] intro
Categories: Spring
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
Spring Framework
Framework์ด๋?
- Frame์ ์ด๋ค ๋์์ ํฐ ํ์ด๋ ์ธํ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์๋ฏธ
- ํ๋ก๊ทธ๋๋ฐ ์์์์ Framework๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํ ์ด๋ ํ ํ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณต
- JAVA์์ ์ปฌ๋ ์
ํ๋ ์์ํฌ
- Map์ด๋ Set, List ๋ฑ์ Collection
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋๋ฆฌ ์๋ ค์ ธ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฐํ์ผ๋ก ๋น์ทํ ์ ํ์ ๋ฐ์ดํฐ๋ค์ ๊ฐ๊ณต ๋ฐ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๋๋ก ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํด๋์ค์ ์งํฉ
- Collection์ ๋ฐ๋ก Map, Set, List ๊ฐ์ ์ธํฐํ์ด์ค์ ๊ทธ ์ธํฐํ์ด์ค๋ค์ ๊ตฌํํ ๊ตฌํ์ฒด๋ค์ ์งํฉ
Framework์ ์ฅ๋จ์
- ์ฅ์
- ํจ์จ์ ์ฝ๋์์ฑ ๊ฐ๋ฅ
- ๊ฐ๋ฐํ๊ณ ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์ผ์ผ์ด ์ ๋ถ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ํต์ ์ด๋, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ ์ฅํ๋ ๋ฑ์ ๋ค์ํ ๊ธฐ๋ฅ๋ค ์ญ์ Framework์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ์ ๊ณตํจ์ผ๋ก์จ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋ก์ง์ ๊ฐ๋ฐํ๋ ๊ฒ์ ์ง์คํ ์ ์๋๋ก ํด์ค
- ์ ํด์ง ๊ท์ฝ์ด ์์
- framework์ ๊ท์ฝ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, ์ ์ง๋ณด์๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ฌธ์ ์ ์ ํ์ ํด ์์ ๊ฐ๋ฅ
- ์ ์ง๋ณด์ ์ด์ธ์๋ ๋น์ทํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ๊ณ ๊ธฐ๋ฅ์ ํ์ฅ ๋ํ ์ฝ๊ฒ ํ์ฅ์ด ๊ฐ๋ฅ
- ํจ์จ์ ์ฝ๋์์ฑ ๊ฐ๋ฅ
- ๋จ์
- Framework์ ๋ํ ํ์ต์ด ํ์ - ์ด๋ ค์
- ์์ ๋กญ๊ณ ์ ์ฐํ ๊ฐ๋ฐ์ ์ด๋ ค์
- ์ด๋ฏธ ๋ง๋ค์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์์ Framework๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋, ์ ์ฐํ ๊ฐ๋ฐ์ ์ํด Framework๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์ ๋ง ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์
Framework๊ณผ Library์ ์ฐจ์ด
- Library
- Library๋ ์๋์ฐจ์์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ถํ
- ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ํ์ํ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ๊ตฌํํด ๋์ ์งํฉ์ฒด
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ผ๋ จ์ ๋ฐ์ดํฐ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋
- ๊ฐ๋ฐ์๊ฐ ์ง ๋์ ์ฝ๋ ๋ด์์ ํ์ํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก Library
- Framework (Library๋ฅผ ํฌํจ)
- Framework๋ ์๋์ฐจ์ ๋ผ๋, ์ฆ Frame
- JAVA์ Math ํจ์(max, random ๋ฑ)์ ๋ชจ์ ๋์ ๊ฒ์ด ํ๋ ์์ํฌ
- Framework์์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฆ์ ๋ง๋ค์ด ์ค
Framework๊ณผ Library์ ์ฐจ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ์ด๊ถ์ ์ฐจ์ด๊ฐ ์๋ค๊ณ ํํ
์ฆ, Library๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๊ฐ๋ฐ์์๊ฒ ์๋ ๋ฐ๋ฉด, Framework์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๊ฐ๋ฐ์๊ฐ ์๋ Framework์ ์๋ค.
Spring Framework๋?
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ Framework๋ค ์ค์ ํ๋
- ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ Framework์๋ Spring๋ฟ๋ง ์๋๋ผ, Django, Express, Flask, Lalavel ๋ฑ ๋ค์ํ Framework๋ฅผ ํตํด ๊ฐ๋ฐ์ด ๊ฐ๋ฅ
- Spring Framework๋ง์ ์ฅ์
- POJO(Plan Old Java Object) ๊ธฐ๋ฐ์ ๊ตฌ์ฑ
- DI(Dependency Injection) ์ง์
- AOP(Aspect Oriented Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ์ง์
- Java ์ธ์ด๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ์ฅ์
- ์ ์ ํ์ ์ธ์ด๋ก์ ๋ณ์์ ํ์ , ๋ฉ์๋์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ด๋ค ํ์ ์ ๊ฐ์ ธ์ผ ํ๋์ง๋ฅผย ๊ฐ์ ํจ โ ์น ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์์ด์ ๋ฐํ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์ง
- Spring Framework์ ํ์ต์ผ๋ก ์ธํ ์ฅ์
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ ๋ง๋ ์ฌ์ฌ์ฉ๊ณผ ํ์ฅ์ด ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์คํฌ์ ํฅ์๊ฐ๋ฅ
- ๋ณด๋ค ๋์ ์ฑ๋ฅ๊ณผ ์๋น์ค์ ์์ ์ฑ์ด ํ์ํ ๋ณต์กํ ๊ธฐ์ ์ฉ ์ํฐํ๋ผ์ด์ฆ ์์คํ ์ ์ ๋๋ก ๊ตฌ์ถํ๊ธฐ ์ํ ๋ฅ๋ ฅ์ ๊ธฐ๋ฅผ ์ ์์
- ๋ฐฐ์์ผ ํ๋ ์ด์
- Spring Framework์ด ๋์
๋๊ธฐ ์ ์๋ JSP๋ Servlet ๊ธฐ์ ์ ์ฌ์ฉํ Model1, Model2 ์ํคํ
์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Java ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ํจ
- jsp
- html/Javascript ์ฝ๋์ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋ฒ ์ธก Java ์ฝ๋๊ฐ ๋ค์์ฌ ์๋ ๋ฐฉ์
- ์ฝ๋๋ ๊ธธ๊ณ ์ฌ๋ฌ ์ธ์ด ์์ฌ ์์ด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ฉฐ ์ ์ง ๋ณด์ ์ธก๋ฉด์์ ์ต์ ์ ๋ฐฉ์
- Servlet
- ๊ฐ๋จํ ๋ก์ง์ธ๋ฐ ์ฝ๋ ์์ฒด๊ฐ ๊ธธ๋ค.
- jsp
- Spring MVC ๋ฐฉ์์ด ๋์ ๋จ์ผ๋ก์จ Java ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ๋ฐฉ์์ด ํ๊ธฐ์ ์ผ๋ก ๋ณํ๊ฒ ๋์๋ค.
- Spring MVC ์ค์ ์ ๋ณต์กํจ๊ณผ ์ด๋ ค์์ ๊ทน๋ณตํ๊ธฐ ์ํด Spring Boot์ด ํ์
- Spring Framework์ด ๋์
๋๊ธฐ ์ ์๋ JSP๋ Servlet ๊ธฐ์ ์ ์ฌ์ฉํ Model1, Model2 ์ํคํ
์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Java ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ํจ
Spring Framework์ ํน์ง
POJO(Plain Old Java Object)
POJO๋ ์์ํ JAVA ๊ฐ์ฒด๋ฅผ ์๋ฏธ
POJO ํ๋ก๊ทธ๋๋ฐ์ด๋?
- POJO๋ฅผ ์ด์ฉํด์ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ฏธ
- ํฌ๊ฒ ๋ ๊ฐ์ง ์ ๋์ ๊ธฐ๋ณธ์ ์ธ ๊ท์น
-
Java๋ Java์ ์คํ(์ฌ์)์ ์ ์๋ ๊ฒ ์ด์ธ์๋ ๋ค๋ฅธ ๊ธฐ์ ์ด๋ ๊ท์ฝ์ ์ฝ๋งค์ด์ง ์์์ผ ํ๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
public class User { private String userName; private String id; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
- ์๋ฐ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ์ฌ getter, setter๋ง ๊ฐ์ง๊ณ ์๋ ์ฝ๋ - ์บก์ํ ํ ๋ ์ฌ์ฉ
- Java ์ธ์ด ์ด์ธ์ ํน์ ํ ๊ธฐ์ ์ ์ข ์๋์ด ์์ง ์์ ์์ํ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ POJO์ ํด๋น
- POJO์๊ณผ ๋์์ JAVA BEAN
-
ํน์ ํ๊ฒฝ์ ์ข ์์ ์ด์ง ์์์ผ ํ๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
public class MessageForm extends ActionForm{ // (1) String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } public class MessageAction extends Action{ // (2) public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MessageForm messageForm = (MessageForm) form; messageForm .setMessage("Hello World"); return mapping.findForward("success"); } }
- ActionForm ํด๋์ค๋ ๊ณผ๊ฑฐ์ Struts๋ผ๋ ์น ํ๋ ์์ํฌ์์ ์ง์ํ๋ ํด๋์ค
- (1)์์๋ Struts๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ActionForm์ ์์
- (2)์์๋ ์ญ์ Struts ๊ธฐ์ ์ Action ํด๋์ค๋ฅผ ์์๋ฐ๊ณ ์์
- ์์๋ฐ๋ ์๊ฐ Struts์ ์ข ์ ๋จ,
- ์๋ฐ๋ ๋จ์ผ ์์ ๋ฐ์ ์๋จ โ ์ด๋ฏธ ์์์ ๋ฐ์์ ๋ค๋ฅธ ์ด๋ค๊ฒ์ ์์๋ฐ์ง ๋ชปํ๊ธฐ๋๋ฌธ์ ์คํ๋ง์ผ๋ก ์ด๋์ ๋ฒ๊ฒจ๋ด์ผํจ,
- ์คํ๋ง์์ ์ฐ๋ ๊ฐ์ฒด๊ฐ ํฌ์กฐ์ฌ์ผ ํ ํ์๋ ์์ง๋ง ํฌ์กฐ๋ฅผ ์งํฅํจ.
-
- POJO ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํ ์ด์
- ํน์ ํ๊ฒฝ์ด๋ ๊ธฐ์ ์ ์ข ์์ ์ด์ง ์์ผ๋ฉด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑ๊ฐ๋ฅ
- ์ ์์ค ๋ ๋ฒจ์ ๊ธฐ์ ๊ณผ ํ๊ฒฝ์ ์ข ์์ ์ธ ์ฝ๋๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ์ ๊ฑฐํจ์ผ๋ก์จ ์ฝ๋๊ฐ ๊น๋ํด์ง โ ๋๋ฒ๊น ํ๊ธฐ๋ ์๋์ ์ผ๋ก ์ฝ๋ค.
- ํน์ ๊ธฐ์ ์ด๋ ํ๊ฒฝ์ ์ข ์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ์ญ์ ๋จ์ํด์ง.
- ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ์ ํ ์์ด ์ ์ฉํ ์ ์๋ค.(๊ฐ์ฅ ์ค์ํ ์ด์ )
- POJO์ Spring์ ๊ด๊ณ
- Spring์ POJO ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํ๋ Framework
- Spring Framework์ POJO ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํ๊ธฐ ์ํด IoC/DI, AOP, PSA๋ผ๋ ๊ธฐ์ ์ ์ ๊ณต
- POJO ํ๋ก๊ทธ๋๋ฐ์ ํจ๊ณผ์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํด์๋ ํน์ ๊ธฐ์ ์ ๋ํ ์ง์๋ณด๋ค๋ JDK์ API์ ๋ํ ์ง์๊ณผ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฌ๊ณ ๋ฐฉ์๊ณผ ์ค๊ณ๋ฅผ ์ํ ํ๋ จ์ด ์ฐ์ ์ ๋์ด์ผ ํจ.
IoC/DI
์์ฝ
IoC /DI ๋ผ๋ ๋จ์ด๋ IoC๋ฅผ ์งํฅํ๊ธฐ์ํด DI๋ฅผ ํตํด ๊ตฌํ. (๋ชฉ์ /์๋จ)
- IoC
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ์ฌ์ฉ์์๊ฒ ์์ง ์๊ณ , Framework์ด๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๋ฑ ์ธ๋ถ์ ์๋ ๊ฒ ์ฆ, ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๋ค๋ฐ๋ ๊ฒ
- DI(Dependency Injection)
- IoC ๊ฐ๋ ์ ์กฐ๊ธ ๊ตฌ์ฒดํ์ํจ ๊ฒ์ผ๋ก ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋์จํ๊ฒ ํด ์ค๋ค.
- ํด๋์ค ๋ด๋ถ์์ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ๋ ํด๋์ค ๊ฐ์ ์์กด ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋จ
- ํด๋์ค ๋ด๋ถ์์
new
๋ฅผ ์ฌ์ฉํด ์ฐธ์กฐํ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , ์์ฑ์ ๋ฑ์ ํตํด ์ธ๋ถ์์ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๊ณ ์๋ค๋ฉด ์์กด์ฑ ์ฃผ์ ์ด ์ด๋ฃจ์ด์ง๊ฒ new
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋, ํด๋์ค ๊ฐ์ ๊ฐํ๊ฒ ๊ฒฐํฉ(Tight Coupling)๋์ด ์๋ค๊ณ ํ๋ค.- ๋์จํ๊ฒ ๊ฒฐํฉ(Loose Coupling) : ์ด๋ค ํด๋์ค๊ฐ ์ธํฐํ์ด์ค ๊ฐ์ด ์ผ๋ฐํ๋ ๊ตฌ์ฑ ์์์ ์์กดํ๊ณ ์์ ๋ โ ๊ฐ์ฒด๋ค ๊ฐ์ ๋์จํ ๊ฒฐํฉ์ ์๊ตฌ ์ฌํญ์ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒ ๊ฐ๋ฅ.
- ํด๋์ค ๋ด๋ถ์์
- ์์กด์ฑ ์ฃผ์ (DI)์ ํด๋์ค๋ค ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ ๋์จํ ๊ฒฐํฉ์ผ๋ก ๋ง๋ค์ด ์ค.
- Spring์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ์ด๋ฃจ์ด์ง๋ ์์กด์ฑ ์ฃผ์ (DI)์ Spring์์ ๋์ ํด ์ค
IoC(Inversion of Control)๋?
- Library๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๊ฐ๋ฐ์์๊ฒ ์๊ณ , Framework์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด Framework์ ์๋ค
- IoC๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ฃผ๋๊ถ์ด ๋ค๋ฐ๋ ๊ฒ์ ์๋ฏธ
์๋ธ๋ฆฟ๊ณผ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ IoC(์ ์ด์ ์ญ์ )
JAVA ์ฝ์์ ์ฃผ๋๊ถ โ main() : ๋ฉ์ธ๋ฉ์๋
1
2
3
4
5
public class Example2_10 {
public static void main(String[] args) {
System.out.println("Hello IoC!");
}
}
- main() ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ๋ ๋ค์์
System
ํด๋์ค๋ฅผ ํตํด์static
๋ฉค๋ฒ ๋ณ์์ธout
์println()
์ ํธ์ถ - ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ธ ์ ์ด ํ๋ฆ
-
main()
๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ด ์ข ๋ฃ - ์๋ธ๋ฆฟ ํด๋์ค๋ ์กด์ฌํ์ง๋ง main() ๋ฉ์ธ ๋ฉ์๋(=Entry point) ์กด์ฌ ํ์ง ์์
- ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์๋ธ๋ฆฟ ์ปจํ
์ด๋ ๋ด์ ์ปจํ
์ด๋ ๋ก์ง(
service()
๋ฉ์๋)์ด ์๋ธ๋ฆฟ์ ์ง์ ์คํ์์ผ ์ฃผ๊ธฐ ๋๋ฌธ์main()
๋ฉ์๋๊ฐ ํ์ ์์ - ์ฆ, ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์๋ธ๋ฆฟ์ ์ ์ดํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ๋๊ถ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์์
DI(Dependency Injection)๋?
- IoC ๊ฐ๋ ์ ์กฐ๊ธ ๊ตฌ์ฒดํ ์ํจ ๊ฒ
์๋ฅผ ๋ค์ด,
A ํด๋์ค๊ฐ B ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด B๋ฅผ ํธ์ถํ๋ ์ํฉ์
โAํด๋์ค๋ Bํด๋์ค์ ์์กดํ๋ค๋ผ๊ณ ํจ.
MenuControllerํด๋์ค
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ ์๋ํฌ์ธํธ(Endpoint) ์ญํ ์ ํจ
- ๋ฉ๋ดํ์ ํ์๋๋ ๋ฉ๋ด ๋ชฉ๋ก์ ์กฐํํ๊ธฐ ์ํด์
MenuService
์ ๊ธฐ๋ฅ์ ์ฌ์ฉ- newํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ ํ ๋ฉ์๋ ํธ์ถ ํจ
- ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ฐธ์กฐํ๊ฒ ๋๋ฉด ์์กด ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ
MenuServiceํด๋์ค
- MenuControllerํด๋์ค๊ฐ ์ ๋ฌ๋ฐ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ
but, ์์กด๊ด๊ณ๋ ์ฑ๋ฆฝ๋์์ง๋ง ์์กด์ฑ ์ฃผ์ ์ X
์์กด์ฑ ์ฃผ์ ์์ ์ฝ๋
- MenuController ์์ฑ์๋ก MenuService์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๊ณ ์์
- ์์ฑ์๋ฅผ ํตํด์ ์ด๋ค ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๋ ๊ฒ์ โ์์กด์ฑ ์ฃผ์
โ
- ์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๋ค๋ผ๊ณ ํํ
CafeClient
ํด๋์ค๊ฐMenuController
์ ์์ฑ์ ํ๋ผ๋ฏธํฐ๋กmenuService
๋ฅผ ์ ๋ฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํด ์ฃผ๋ ์ธ๋ถ๊ฐ ๋จ.
์์กด์ฑ ์ฃผ์ ์ ํ์ ์ด์
- ๊ฐ๋ฐ ๋จ๊ณ์์ ๊ธํ๊ฒ ๋ฉ๋ด๊ฐ ํ์ํ ๋ ๋ฐฑ์๋์์ ํ๋ก ํธ์๊ฒ stub(๊ฐ์ง๋ฐ์ดํฐ) ์ ์ ๊ณตํ ์ ์์
- stub์ ๊ณต์ ์ํด ๋นจ๊ฐ ๋ฐ์ค ๋ถ๋ถ์ด ์์ ๋์ด์ผ ํจ.
- but, ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋จ์ผ๋ก ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ณ์ง ์์
- ๋๋ฏธ๋ฐ์ดํฐ๊ฐ 200๊ฐ 300๊ฐ ๋ผ๋ฉด?? โ ์ ์ผ๋ฌธ์ ๋ ํด๋จผ์๋ฌ
- ๊ฒฐ๊ตญ new๋ฅผ ํตํด ์์กด ๊ฐ์ฒด ์์ฑ์ ํผํ๋ ๊ฒ์ด ์ข์ - ํด๋จผ์๋ฌ ๋ฐ์ (๊ฐํ ๊ฒฐํฉ) โ ๋์จํ ๊ฒฐํฉ
- ๋์จํ ๊ฒฐํฉ = ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋ค์ด์๋ ์์ ์์ด ์ฌ์ฉ๊ฐ๋ฅ.
๋์จํ ๊ด๊ณ๋ฅผ ๋ง๋๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ = ์ธํฐํ์ด์ค ์ฌ์ฉ
- MenuController๊ฐ ์์ฑ์๋ก MenuServiceStub์ ๋ฐ์๋ ์ฃผ์ ๋ฐ์ ๋์์ MenuService ์ธํฐํ์ด์ค๋ผ์ ์ด๋ค ํด๋์ค๋ ์ฃผ์ ๋ฐ์ ์ ์์.
- (1)์์ new๋ก
MenuServiceStub
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์MenuService
์ธํฐํ์ด์ค์ ํ ๋น- ์ธํฐํ์ด์ค ํ์ ์ ๋ณ์์ ๊ทธ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ์ ์๋๋ฐ ์ด๋ฅผ ์ ์บ์คํ (Upcasting)
- ์ ์บ์คํ ์ ํตํ ์์กด์ฑ ์ฃผ์ ์ผ๋ก ์ธํด MenuController์ MenuService๋ ๋์จํ ๊ฒฐํฉ ๊ด๊ณ๋ฅผ ์ ์ง
Spring์์์ ์์กด์ฑ
- (1)์ ํด๋นํ๋ ์ฝ๋๋ ๋ชจ๋ Spring์์ ์ง์ํ๋ API ์ฝ๋
- ApplicationContext(์คํ๋ง ์ปจํ ์ด๋)
- @Bean ์ด๋
ธํ
์ด์
: ๋ฉ์๋๋ก๋ถํฐ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก
- ๋น์ ์ธ์คํด์คํ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ฉฐ, ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ๋น์ด๋ผ ํจ
- Config ํด๋์ค๊ฐ new ํค์๋๋ฅผ ์์ ๋ ๋ฐ ์ฑ๊ณต
- Config ํด๋์ค์์ (3)๊ณผ ๊ฐ์ด
MenuController
๊ฐ์ฒด ์์ฑ์ ์ ์ํด ๋๋ฉด (1)์ ์ด์ฉํด์ ์ด ๊ฐ์ฒด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ์ฌ์ฉ
- Config ํด๋์ค์์ (3)๊ณผ ๊ฐ์ด
ํ๋ง๋๋ก Config
ํด๋์ค์ ์ ์ํด ๋ MenuController
๊ฐ์ฒด๋ฅผ Spring์ ๋์์ ๋ฐ์์ CafeClient
ํด๋์ค์๊ฒ ์ ๊ณต์ ํ๊ณ ์๋ ๊ฒ
AOP
- AOP๋ฅผ ํ๊ธ๋ก ๋ฒ์ญํ๋ฉด ๊ด์ฌ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ ๋๋ก ํด์
- AOP๋ผ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ์ ๋ฌด ๋ก์ง์์ ๋ก๊น ์ด๋ ๋ณด์, ํธ๋์ญ์ ๊ฐ์ ๊ณตํต ๊ธฐ๋ฅ ๋ก์ง๋ค์ ๋ถ๋ฆฌํ๋ ๊ฒ
- ๊ณตํต ๊ด์ฌ ์ฌํญ(Cross-cutting concern)๊ณผ ํต์ฌ ๊ด์ฌ ์ฌํญ(Core concern)์ผ๋ก ๋๋จ
- ๊ณตํต ๊ธฐ๋ฅ๋ค์ ๋ํ ๊ด์ฌ์ฌ๋ฅผ ๋ฐ๋ก ๊ณตํต ๊ด์ฌ ์ฌํญ(Cross-cutting concern)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํ ํต์ฌ ๋ก์ง์ ๋ํ ๊ด์ฌ์ฌ๋ฅผ ํต์ฌ ๊ด์ฌ ์ฌํญ(Core concern)
-
๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ : ์์ด๋ ์คํ์ด ๋๋์ง ์๋๋์ง๋ฅผ ํ์ ํ๋ฉด ๋จ
- ์์ผ๋ฉด ์๋๋ ๊ฒ์ ํต์ฌ ๊ด์ฌ ์ฌํญ
- ํ๋๋ก ๊ตญํํ์ง ์๊ณ ๋ชจ๋์๊ฒ ๊ณตํต๋์ด์ผ ํ๋ ๊ฒ : ๊ณตํต๊ด์ฌ์ฌํญ
- ์๋ฅผ๋ค์ด ์ปคํผ์ฃผ๋ฌธ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ ํ ๊ฒฝ์ฐ ์ปคํผ์ฃผ๋ฌธ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋ณด์ง ์๊ณ ํฌ๊ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ
- ๋ณด์. ๋ก๊น . ํธ๋์ญ์ (ํ๋ก์ ์ฌ์ฉํ ์ค ์์์ผ ํจ, ์คํ๋ง์ ์ ๋ํ ์ด์ ๋ง ์์ฑํ๋ฉด ๋จ. @transactional)
- ์๋ฅผ๋ค์ด ์ปคํผ์ฃผ๋ฌธ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ ํ ๊ฒฝ์ฐ ์ปคํผ์ฃผ๋ฌธ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋ณด์ง ์๊ณ ํฌ๊ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ
- AOP๊ฐ ํ์ํ ์ด์
- ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ ์ ์ง
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ๋ง๋ ์ฝ๋ ๊ตฌํ
- ์ฝ๋์ ์ฌ์ฌ์ฉ
PSA
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ์์ ์ด๋ค ํด๋์ค์ ๋ณธ์ง์ ์ธ ํน์ฑ๋ง์ ์ถ์ถํด์ ์ผ๋ฐํํ๋ ๊ฒ์ ์ถ์ํ(Abstraction)
-
ํด๋ผ์ด์ธํธ๊ฐ ์ถ์ํ๋ ์์ ํด๋์ค๋ฅผ ์ผ๊ด๋๊ฒ ๋ฐ๋ผ๋ณด๋ฉฐ ํ์ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก ์ผ๊ด๋ ์๋น์ค ์ถ์ํ(PSA)์ ๊ธฐ๋ณธ ๊ฐ๋
์ผ๋ฐ์ ์ผ๋ก ์๋ฒ / ํด๋ผ์ด์ธํธ ์ธก๋ฉด์์๋ ์๋ฒ ์ธก ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ์ชฝ์ ํด๋ผ์ด์ธํธ๋ผ๊ณ ํจ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ํ์ ์ธ ํด๋ผ์ด์ธํธ๋ ๋ฐ๋ก ์น ๋ธ๋ผ์ฐ์ .
๊ทธ๋ฐ๋ฐ ์ฝ๋ ๋ ๋ฒจ์์ ์ด๋ค ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ธก ์ญ์ ํด๋ผ์ด์ธํธ๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ๊ธฐ
- PSA๊ฐ ํ์ํ ์ฃผ๋ ์ด์ ๋ ์ด๋ค ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ์ ๊ทผ ๋ฐฉ์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ ์งํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ๊ธฐ์ ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ์ต์ํ์ ๋ณ๊ฒฝ๋ง์ผ๋ก ๋ณ๊ฒฝ๋ ์๊ตฌ ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํจ์ ๋๋ค.
- ์ฆ, PSA๋ฅผ ํตํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์์
์์
Java ์ฝ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด Jdbc Connector๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์๋น์ค ์ถ์ํ์ ์
โ
- JdbcConnector๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด์ฉํ๋ ํ๋์ ์๋น์ค๊ฐ ๋๋ ๊ฒ
Client
๋OracleJdbcConnector
,MariaDBJdbcConnector
,SQLiteJdbcConnector
๊ฐ์ JdbcConnector ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐํด์ Connection์ ์ป๋ ๊ฒ์ด ์๋๋ผ JdbcConnector ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด(๋์จํ ๊ฒฐํฉ) Connection ๊ฐ์ฒด๋ฅผ ์ป๋ ๊ฒ์ ๋ณผ ์ ์์- DbClient์์ ์ด๋ค JdbcConnector ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ผ๋ Connection์ ์ป๋ ๋ฐฉ์์ getConnection() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ผํจ = ์ฆ, ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ํด๋น ์๋น์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ
- ์ด์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํน์ ์๋น์ค๋ฅผ ์ด์ฉํ ๋, ์๋น์ค์ ๊ธฐ๋ฅ์ ์ ๊ทผํ๋ ๋ฐฉ์ ์์ฒด๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ๋ฉด์ ๊ธฐ์ ์์ฒด๋ฅผ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ PSA(์ผ๊ด๋ ์๋น์ค ์ถ์ํ)
comment
๋๋์ด ์คํ๋ง์ s๋ฅผ ์ด์ง ๋ง๋ณด๊ฒ ๋์๋๋ฐ
ํ๋์ ๊ฐ์ฒด์งํฅ๊ฐ์ ๊ฐ๋
์ ๋ค์ ๋ฐฐ์ฐ๋ ๋๋์ด๋ค.
๋ญ๊ฐ ์๊ฒ ๋๋ฐ ๋ชจ๋ฅด๊ฒ ๋โฆ?!
๊ทธ๋๋ new๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐํ ๊ฒฐํฉ์ด๊ณ
์ธํฐํ์ด์ค๋ ์์ฑ์์ ๋งค๊ฐ์ธ์์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ๋์จํ ๊ฒฐํฉ์ด๋ผ๋ ๊ฑด ํ์คํ ์๊ฒ ๊ฐ๋ค.,!
์์ง DI๋ ๋ค์ด๊ฐ ๊ฒ๋ ์๋๋ผ๋๋ฐ,,
๋ฌดํผ ํต์ฌ๊ฐ๋
์ด๋ผ๊ณ ํ๋ ์์
๋์น์ง ์๊ณ
์ง์คํด์ผ์ง!
Leave a comment