https://school.programmers.co.kr/learn/courses/30/lessons/1835 ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์
๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์
๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ๋ฌธ์ ๋ฌธ์ ์ค๋ช
๊ฐ์์ ๋ง์ ์นด์นด์คํ๋ ์ฆ๋ ๋จ์ฒด๋ก ์ํ์ ๋ ๋ฌ๋ค. ์ฆ๊ฑฐ์ด ์๊ฐ์ ๋ณด๋ด๊ณ ๋ง์ง๋ง์ ๋จ์ฒด์ฌ์ง์ ์ฐ๊ธฐ ์ํด ์นด๋ฉ๋ผ ์์ ์ผ๋ ฌ๋ก ๋๋ํ ์ฐ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์๊ฐ ์ํ๋ ๋ฐฐ์น๊ฐ ๋ชจ๋ ๋ฌ๋ผ ์ด๋ค ์์๋ก ์ค์ง ์ ํ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ค. ๋ค์ค๋ ํ๋ก๋์ ๋๋ํ ์๊ธฐ๋ฅผ ์ํ๊ณ , ํ๋ธ๊ฐ ๋ฟ์ ๋ถ์ ๋ง์ ์ ์ด ์๋ ๋ผ์ด์ธ์ ํ๋ธ์๊ฒ์ ์ ์ด๋ ์ธ ์นธ ์ด์ ๋จ์ด์ ธ์ ์๊ธฐ๋ฅผ ์ํ๋ค. ์ฌ์ง์ ์ฐ๊ณ ๋์ ๋์์ค..
์ ์ฒด ๊ธ
REST API ๋์ค์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ธํฐํ์ด์ค ์ด ์ธํฐํ์ด์ค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ๊ทผํ๊ณ ์์์ ์กฐ์ํ ์ ์์ REST ๋ ? "Representational State Transfer"์ ์ฝ์๋ก, ์๋ ์์ด๋ ์น(WWW)๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ
์ํคํ
์ฒ์ ํ ํ์ ์ฃผ๊ณ ๋ฐ๋ ์์(Resource)์ ์ด๋ฆ์ ๊ท์ ํ๊ณ URI์ ๋ช
์ํด HTTP ๋ฉ์๋ (GET, POST, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธ REST API ๋ ? API : Application Programming Interface, ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธ - API๋ฅผ ํตํด ์๋ฒ ๋๋ ํ๋ก๊ทธ๋จ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ ์ ์์ - โ
์ฆ, REST API๋..
์๋ฒ ๊ฐ ํต์ ์ด๋ค ํฌํธ ์ฌ์ดํธ๋ฅผ ํ๋์ ์๋น์ค ๋จ์๋ก ๊ฐ๋ฐํ๋ค๊ณ ๊ฐ์ . ์ฆ, ๋ธ๋ก๊ทธ, ์นดํ, ๋ฉ์ผ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ํตํฉ ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ค๋ฉด ์๋ฒ๋ฅผ ์
๋ฐ์ดํธํ๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ง๋ณด์ํ ๋๋ง๋ค '์ฌ์ดํธ ์์
์ค์
๋๋ค.' ํป๋ง์ ๊ฑธ๊ณ ์์
ํด์ผํจ ๊ทธ๋งํผ ๊ฐ๋ฐ์ ๋ณด์์ ์ธ ์
์ฅ์ ์ทจํ ์ ๋ฐ์ ์๊ณ , ์๋น์ค ์์ฒด์ ๊ท๋ชจ๋ ์ปค์ง๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ๊ตฌ๋ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ๊ธธ์ด์ง → ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ(MSA; Microservice Architecture) → ์๋น์ค ๊ท๋ชจ๋ฅผ ์๊ฒ ๋๋์ด ๊ตฌ์ฑํ ์ํคํ
์ณ ์์ ์๋ก ๋ ํฌํธ ์ฌ์ดํธ์ ์ ์ฉํ๋ค๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
ํ๋์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋ฃ์ด ๊ฐ๋ฐํ์ง ์๊ณ ๋ธ๋ก๊ทธ ํ๋ก์ ํธ, ์นดํ ํ๋ก์ ํธ, ๋ฉ์ผ ํ๋ก์ ํธ ..
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP; Aspect-Oriented Programming) ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ์๋ฏธ โผ๏ธ ์ฌ๊ธฐ์ ๊ด์ (aspect)์ด๋ ?? → ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๊ทธ ๊ธฐ๋ฅ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌ๋ถํด ๊ฐ๊ฐ์ ํ๋์ ๊ด์ ์ผ๋ก ๋ณด๋ ๊ฒ์ ์๋ฏธ ํต์ฌ ๊ธฐ๋ฅ : ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ๊ณผ์ ์์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ฒ๋ฆฌํ๋ ค๋ ๋ชฉ์ ๊ธฐ๋ฅ์ ๋งํจ ์) ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ํ ์ ๋ณด ๋ฑ๋ก ์์ฒญ์ ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , ๊ทธ ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ค๋ฉด โถ ์ํ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , โท ์ ์ฅ๋ ์ํ ์ ๋ณด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฝ๋๊ฐ ํต์ฌ ๊ธฐ๋ฅ ๋ถ๊ฐ ๊ธฐ๋ฅ : ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋๋ ํต์ฌ ๊ธฐ๋ฅ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ํฉ์ด ์๊น. ํต์ฌ ๊ธฐ๋ฅ์ธ ๋น์ฆ๋์ค ..
์์กด์ฑ ์ฃผ์
(DI; Dependency Injection) ์ ์ด์ ์ญ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ ์ปจํ
์ด๋๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์๋ฏธ ์คํ๋ง์์ ์์กด์ฑ์ ์ฃผ์
๋ฐ๋ ๋ฐฉ๋ฒ ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
ํ๋ ๊ฐ์ฒด ์ ์ธ์ ํตํ ์์กด์ฑ ์ฃผ์
setter ๋ฉ์๋๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
์คํ๋ง์์๋ @Autowired๋ผ๋ ์ด๋
ธํ
์ด์
์ ํตํด ์์กด์ฑ์ ์ฃผ์
ํ ์ ์์ 1. ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
@RestController public class DIController{ MyService myService; @Autowired public DIController(MyService myService){ this.myService = myService; } @GetMappi..
์ ์ด์ ์ญ์ IoC ( Inversion of Control ) ์ผ๋ฐ์ ์ธ ์๋ฐ ๊ฐ๋ฐ์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ์ฝ๋ ์ฌ์ฉ @RestController public class NoDIController{ private MyService service = new MyServiceImpl(); @GetMapping("/no-di/hello") public String getHello(){ return service.getHello(); } }์ฆ, ์ฌ์ฉํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ํด๋น ๊ฐ์ฒด์ ์์กด์ฑ์ ์์ฑํ ํ ๊ฐ์ฒด์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ ์ผ๋ จ์ ์์
์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํ๋ ๊ตฌ์กฐ ํ์ง๋ง, ์ ์ด์ ์ญ์ (IoC)์ ํน์ง์ผ๋ก ํ๋ ์คํ๋ง์ ๊ธฐ์กด ์๋ฐ ๊ฐ๋ฐ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋์ Io..
๊ฐ์ฒด ์งํฅ ํน์ง ์ถ์ํ ์บก์ํ ์์ ๋คํ์ฑ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ช
๋ น์ด ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๋
๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์
ํ๊ณ ์ ํ๋ ๊ฒ. ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ (ํ๋ ฅ) ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋จ. ์ ์ฐํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ด ? ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด ํค๋ณด๋, ๋ง์ฐ์ค ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ์ปดํจํฐ ๋ถํ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ ๋คํ์ฑ ๋คํ์ฑ์ ์ค์ธ๊ณ ๋น์ ์ค์ธ๊ณ์ ๊ฐ์ฒด ์งํฅ์ 1:1๋ก ๋งค์นญ X ๊ทธ๋๋ ์ค์ธ๊ณ์ ๋น์ ๋ก ์ดํดํ๊ธฐ์๋ ์ข์ ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ์ธ์์ ๊ตฌ๋ถ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ..
์คํ๋ง ํ๋ ์์ํฌ ํต์ฌ ๊ธฐ์ : ์คํ๋ง DI ์ปจํ
์ด๋, AOP, ์ด๋ฒคํธ, ๊ธฐํ ์น ๊ธฐ์ : ์คํ๋ง MVC, ์คํ๋ง WebFlux ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ : ํธ๋์ญ์
, JDBC, ORM ์ง์, XML ์ง์ ๊ธฐ์ ํตํฉ : ์บ์, ์ด๋ฉ์ผ, ์๊ฒฉ์ ๊ทผ, ์ค์ผ์ค๋ง ํ
์คํธ : ์คํ๋ง ๊ธฐ๋ฐ ํ
์คํธ ์ง์ ์ธ์ด : ์ฝํธ๋ฆฐ, ๊ทธ๋ฃจ๋น ์ต๊ทผ์๋ ์คํ๋ง ๋ถํธ๋ฅผ ํตํด์ ์คํ๋ง ํ๋ ์์ํฌ์ ๊ธฐ์ ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ์คํ๋ง ๋ถํธ ์คํ๋ง์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์, ์ต๊ทผ์๋ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ ๋จ๋
์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ์์ฑ Tomcat ๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ด์ฅํด์ ๋ณ๋์ ์น ์๋ฒ๋ฅผ ์ค์นํ์ง ์์๋ ๋จ ์์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํ starter ์ข
์์ฑ ์ ๊ณต ์คํ๋ง๊ณผ 3rd parth(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ๊ตฌ์ฑ ๋ฉํธ๋ฆญ, ์..