์คํ๋ง์ ํ๋ ์์ํฌ์ด๋ค
ํ๋ ์์ํฌ:ํ ์์์ ๋์. ํ์ ๋ง์ถฐ์คํ ๋ ํ์ ๋ง์ถฐ์ ๊ฐ๋ฐํด๋ผ
์คํ๋ง์ ์คํ์์ค์ด๋ค
๋ด๋ถ๋ฅผ ๋ฏ์ด๊ณ ์น ์ ์๋ค. + ๋ฌด๋ฃ
์คํ๋ง์ IoC(Inversion of Controller = ์ ์ด์ ์ญ์ ) ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง๋ค.
๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ์คํ๋ง์ ์์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฃผ๋๊ถ์ด ์คํ๋ง์ ์๋ค.
ํด๋์ค: ์ค๊ณ๋
์ค๋ธ์ ํธ: ์ค์ฒดํ๊ฐ ๊ฐ๋ฅํ ๊ฒ
์ธ์คํด์ค: ์ค์ฒดํ ๋ ๊ฒ
๊ฐ๊ตฌ(ํด๋์ค-์ถ์์ ) - ์์,์นจ๋(์ค๋ธ์ ํธ) - ์ธ์คํด์ค
์ค๋ธ์ ํธ๋ฅผ new๋ก ํด์ heap ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค.
์์ s = new ์์();
s๋ ๋ ํผ๋ฐ์ค ๋ณ์๊ฐ ๋๊ณ , s๋ ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์๋ง ์ฌ์ฉ๋จ. ๋ค๋ฅธ ๋ฉ์๋์์ ์ด ์์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด,
์์ s = new ์์(); ์ด๊ฑฐ๋ฅผ ๋ ์น๋ฉด ์๋ก์ด ์์๊ฐ ์๊ธฐ๋ ๊ฒ. ๊ฐ์ ์์๋ก ์ฌ์ฉ์ด ์๋จ.
์คํ๋ง์ ์ฝ์ด์์ ์๊ธฐ๊ฐ ์ด ๊ฐ์ฒด๋ค์ ์์์ ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋์ด๋ค.
์ด๊ฑธ IoC
์คํ๋ง์ DI(Dependency Injection - ์์กด์ฑ ์ฃผ์ )๋ฅผ ์ง์ํ๋ค.
์๋๋ ๋ด๊ฐ newํด์ ๊ทธ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ด๊ฐ ๊ด๋ฆฌํ์ง๋ง, ์ด์ ๋ ์คํ๋ง์ด ์ค์บํด์ ์ค๋ธ์ ํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋์.(=Ioc, ์ ์ด์ ์ญ์ )
์คํ๋ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ํ์ํ ์์กด์ฑ์ ์ฃผ์ ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ์ง ์๊ณ ๋ ๊ฐ์ฒด๋ค์ ์กฐ๋ฆฝํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
๋ด๊ฐ ์ํ๋ ๋ชจ๋ ํด๋์ค์ ๋ฉ์๋์์ ์ด ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๊ฒ ๋ค ๊ฐ์๊ฒ: ์ฑ๊ธํค= ์คํ๋ง ์ปจํ ์ด๋๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋จ ํ๋๋ง ์์ฑํ๊ณ , ํ์ํ ๊ณณ์์ ์ด ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋ ํจํด
์ค์บํ๋ฉด ์ด ์์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ฑ ํ๋ฒ ๋จ๊ณ , ์ด ์์๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ํ ๊ณณ์์ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋ ๊ฒ์ DI๋ผ๊ณ ํ๋ค.
์คํ๋ง์ ์์ฒญ๋๊ฒ ๋ง์ ํํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
ํํฐ= ๋ฌธ์ง๊ธฐ!! ๊ถํ ์์ผ๋ฉด ๋ค์ด์ค๊ณ , ์๋๋ฉด ๋ชป๋ค์ด์จ๋ค.
ํฐ์ผ์ ๋๋ผ! ์์ ์ง์ ์คํ๋ง ์ปจํ ์ด๋
A๋๋ผ๋ก ๋ค์ด์ค๋ ๋ฌธ:ํฐ์ผ filter (web.xml)
์์ ์ง์ผ๋ก ๋ค์ด์ค๋ ๋ฌธ: ์ธํฐ์ ํฐ(AOP)
์คํ๋ง์ ์์ฒญ๋๊ฒ ๋ง์ ์ด๋ ธํ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค.(๋ฆฌํ๋ ์ , ์ปดํ์ผ์ฒดํน)
์ด๋ ธํ ์ด์ (์ฃผ์+ํํธ) - ์ปดํ์ผ๋ฌ๊ฐ ๋ฌด์ํ์ง ์๋๋ค.
// (์ฃผ์) - ์ปดํ์ผ๋ฌ๊ฐ ๋ฌด์
Animal(){
run()
}
Dog extends Animal{
@override
run();
fly(); //์ปดํ์ผ์ฒดํน ์ ์๋ฌ
}
์คํ๋ง ->์ด๋ ธํ ์ด์ ๊ฐ์ฒด ์์ฑ
@component(ํด๋์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ), @Autowired(์์กด์ฑ์ฃผ์ ,๋ก๋ฉ๋ ๊ฐ์ฒด๋ฅผ ํด๋น ๋ณ์์ ์ง์ด ๋ฃ์ด)
์ด๋ฌํ ์ด๋ ธํ ์ด์ ์ ๋ง๋ค๊ณ , ์ญํ ์ ๋ฏธ๋ฆฌ ์ฝ์
@Component
class A{
}
์คํ๋ง์์๋ IoC๋ฅผ ์ฌ์ฉํด์ ํด๋น ํด๋์ค๋ฅผ ์ฝ์ด์, ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ A๋ผ๋ ํด๋์ค๋ฅผ ๋ก๋ํ๋ค.
Bํด๋์ค์์ A๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด
class B{
@Autowired
A a
}
๋ผ๊ณ ๋งํ๋ฉด๋จ.
์คํ๋ง์ด Bํด๋์ค๋ฅผ ์ฝ์๋, Bํด๋์ค ๋ด๋ถ์ ์ด๋ค ์ ๊ฐ ์๋์ง ๋ถ์ํ๋ ๊ธฐ๋ฒ์ ๋ฆฌํ๋ ์ ์ด๋ผ๊ณ ํ๊ณ ,
์ด๋ฅผ ํตํด์ ์ด๋ค ๋ฉ์๋,ํ๋,์ด๋ ธํ ์ด์ ์ด ์๋์ง ์ฒดํฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ ์๋ค๋ฉด ๋ฌด์์ธ๊ฐ๋ฅผ ํด๋ผ๊ณ ์ค์ ํ ์ ์๋ค.
- ๋ฆฌํ๋ ์ ์ ๋ฐํ์ ์์ ์์ ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ถ์ํ๊ณ ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋งํฉ๋๋ค.
- ์คํ๋ง์ ๋ฆฌํ๋ ์ ์ ํ์ฉํ์ฌ ์ด๋ ธํ ์ด์ ์ ์ค์บํ๊ณ ๋น์ ์๋์ผ๋ก ๋ฑ๋กํ๋ฉฐ, ์์กด์ฑ ์ฃผ์ ์ ์ํํฉ๋๋ค.
@Autowired(๋ก๋ฉ๋ ๊ฐ์ฒด๋ฅผ ํด๋น ๋ณ์์ ์ง์ด ๋ฃ์ด) ์ด๋ฏ๋ก ์คํ๋ง์ด ์ง์ ์ง์ด ๋ฃ์ ๊ฐ์ฒด ์ค ํด๋น ํ์ ์ ๊ฐ์ฒด๊ฐ ํ์ ์๋์ง ํ์ธํด์
์์ผ๋ฉด a๋ null์ด ๋๊ณ , ์์ผ๋ฉด a์ ๋ฉ๋ชจ๋ฆฌ์ Aํ์ ์ด ๋ค์ด๊ฐ๋๋ฐ ์ด๋ฅผ DI๋ผ๊ณ ํ๋ค.
์ด๋ ธํ ์ด์ =์ฃผ์+ํํธ
๋ฆฌํ๋ ์ =๋ถ์ํ๋ ๊ธฐ๋ฒ->๋ฐํ์์ ๋ถ์
์คํ๋ง์ MessageConverter๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ ํ์ฌ Json์ด๋ค.
์๊ตญ์ธ๊ณผ ํ๊ตญ์ธ์ด ๋ํ๋ฅผ ํ๋๋ฐ, ์๋ก ์ธ์ด๊ฐ ๋ค๋ฅด๋ค. ๋ฒ์ญ์ด ํ์ํ๋ค.
ํ๊ตญ์ด๋ก ํ๋ฉด ์๊ตญ์ธ์ด ํ๋ค๊ณ , ์์ด๋ก ํ๋ฉด ํ๊ตญ์ธ์ด ํ๋ค๋ค.
์ด๋, ์ค๊ฐ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๋ค. ์ฆ, ํ๊ตญ์ธ๋ ์ดํดํ ์ ์๊ณ , ์๊ตญ์ธ๋ ์ดํดํ ์ ์๋ ์ธ์ด๋ฅผ ๋ง๋๋ ๊ฒ
์ค๊ฐ์ธ์ด:JSON
์๋ฐ Object์ ํ์ด์ฌ Object๋ ์๊ธด๊ฒ ๋ค๋ฅด๋ค.
์๋ฐ Object -> JSON -> ํ์ด์ฌ Object๋ก ๋ฐ๋๋ค.
์๋ฅผ๋ค์ด
Class Animal{
int num = 10;
String name = "์ฌ์";
}
Json์
{"num":10,"name":"์ฌ์"}
์ค๊ฐ๋ฐ์ดํฐ์ธ JSON์ผ๋ก ์๋์ผ๋ก ์ปจ๋ฒํ ํด์ฃผ๋๊ฒ MessageConverter์ด๋ค.
์์ฒญ ํ ๋, ์๋ต ๋ฐ์ ๋ ๋ชจ๋ ํด์ค๋ค.
์๋ฐ Object๋ฅผ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ request(์์ฒญ)ํ ๋, ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ฐ๊พธ๋๋ฐ, ์ด ์ญํ ์ MessageConverter๊ฐ ํด์ฃผ๊ณ , ์ด๋ Jackson์ผ๋ก ์ค์ ๋์ด์๋ค.
์คํ๋ง์ BufferedReader์ BufferedWriter๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ์ดํฐ ํต์ ์์๋ ๋ฐ์ดํธ(byte) ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. ๋ฐ์ดํธ๋ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ฌธ
์๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ฐ์ดํธ๋ก ํํ๋ฉ๋๋ค. ์ด ๋, 8๋นํธ(1๋ฐ์ดํธ)๋ ํ๋์ ๋ฌธ์๋ฅผ ํํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ InputStream์ผ๋ก ์ฝ๋๋ฐ, ์ด ๋ฐ์ดํธ๋ฅผ ๋ฌธ์๋ก ์บ์คํ ํด์ผํ๋๋ฐ,
์ด ํด๋์ค๋ฅผ InputStreamReader๋ผ๋ ํด๋์ค๋ก ๋ฐ์ดํธ๋ฅผ ๋ฌธ์๋ก ๋ฐ๊ฟ์ ๋ฌธ์๋ก ์ค๋ค.
๋ฐฐ์ด์ ์ฌ๋ฌ๊ฐ์ ๋ฌธ์๋ฅผ ๋ฐ๋๋ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ์ผ ํ๋ค. ํฌ๊ฒ ์ ํด๋ ๋ฌธ์ , ์ ๊ฒ ์ ํด๋ ๋ฌธ์ ์ด๋ค.
๊ทธ๋์ ์๋ก์ด ๋ฐฉ๋ฒ์ด BufferedReader๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ฐ ์ด๋ ๊ฐ๋ณ๊ธธ์ด์ ๋ฌธ์๋ฅผ ๋ฐ์ ์ ์๋ค.
ํต์ ์ Byte Stream์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋๋ฐ, ์ ์ก๋จ์๊ฐ ๋ฌธ์์ด๋ก ๊ฐ๋ณ ๊ธธ์ด ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒ ํด์ฃผ๋ ํด๋์ค
์ด๋ฅผ ๊ตฌํํ ํ์ ์์ด
๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋๋ @ResponseBody๋ฅผ ํ๋ฉด Buffered writer๊ฐ ๋์ํ๊ณ ,
๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋๋ @RequestBody๋ฅผ ํ๋ฉด BufferedReader๊ฐ ๋์ํ๋ค.
์คํ๋ง์ ๊ณ์ ๋ฐ์ ์ค์ด๋ค.
'๐ผ๋ฐฑ์ค๋ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
@ControllerAdvicem, @RestControllerAdvice (0) | 2023.12.20 |
---|---|
์์กด๊ด๊ณ ์๋ ์ฃผ์ (0) | 2023.12.19 |
์๋ธ๋ฆฟ๊ณผ ๋ฉํฐ ์ฐ๋ ๋ (0) | 2023.12.19 |
SpringBoot ๋์ ์๋ฆฌ (0) | 2023.09.02 |
JPA ๊ฐ๋ ์ก๊ธฐ (0) | 2023.09.02 |