์ฒ์ ์คํ๋ง๋ถํธ๋ฅผ ์ธ ๋ Controller? Service? Repository? Dto?? Dao?? ๋ค ๋ญ์๋ฆฐ๊ฐ ํ๋๋ฐ ์ด ๊ทธ๋ฆผ์ผ๋ก ์กฐ๊ธ์ด๋๋ง ์ ๋ฆฌ๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ๋ฐ์ ๋ํด ์ ๋ง ๋ฌด์งํ๊ธฐ ๋๋ฌธ์ " ์๋ ๊ทธ๋ฅ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๋ฉด๋ ๊ฑธ ์ ? ์ด๋ ๊ฒ??? " ๋ผ๋ ์๊ฐ๋ ํ์๋ค ใ ใ ใ
๊ทธ๊ฒ์ "๋ ์ด์ด๋ ์ํคํ ์ฒ"๊ฐ ๋ท๋ฐ์นจํด์ค ์ ์์ด๋ณด์ธ๋ค.
|
๊ทธ๋ผ ์ด ๋ ์ด์ด๋ ์ํคํ ์ณ๊ฐ ๋ญ๋,
์ฝ๋๋ฅผ ๋ ผ๋ฆฌ์ ์ธ ๋ถ๋ถ์ด๋ ์ญํ ์ ๋ฐ๋ผ ๋ ๋ฆฝ๋ ๋ชจ๋๋ก ๋๋์ด ๊ตฌ์ฑํ ํจํด์ด๋ค. ๊ทธ ๋ชจ๋์ด ์๋ก์ ์์กด๋์ ๋ฐ๋ผ ์ธต์ธตํ ์ฐ๊ฒฐ๋์ด ํ๋์ ์์คํ ์ ๊ตฌํํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ฉด ํ์ฅ์ด ์ฝ๊ณ , ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๊ณ , ์ ์ง๋ณด์์ ์ฉ์ดํ๋ฉฐ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ ๋ฑ์ ์ฅ์ ์ ๊ฐ์ง๋ค. ๊ทธ๊ฒ์ด ๋ฐ๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์งํฅ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๋๋ฆฌ ์ฐ์ด๋ ํจํด์ด์ง ์๋ ํ๋ ๋์ ์์ ์๊ฐ..!
๊ทธ๋ฌ๋๊น ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด?
Controller ๊ฐ ๋ฐ์ดํฐ์ ์ /์ถ๊ตฌ
Service ์ฝ๋๊ฐ ์ค์ ์ ์ธ ์ผ์ ํ๋(?) ๊ณณ
Repository ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐํ๋ ๊ณณ ์ ๋๋ก ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๊ณ์ธต๊ฐ ์ด๋์ ํ ๋ ๋ฐ์ดํฐ๋ DTO์ ๋ด์์ ์ ์กํ๋๋ฐ ๋ด๊ฐ ํ์ํ ๊ฒ๋ง ๋ด์์ ๋ณด๋ด๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ง ๋ด์์ ์ฌ ์ ์๋ ๋ฐ๊ตฌ๋๊ฐ ์๋๊น ์ถ๋ค.
์ด๋ ๊ฒ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ค๋ฉด ~ ์ด์ ์คํ๋ง ๋ถํธ์ ๋์ ์๋ฆฌ๋ฅผ ์์๋ณด์
์๋ธ๋ฆฟ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ด๋ค. ์ด ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ ๊ด๋ฆฌ๋๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฑ๊ธํค ํจํด์ผ๋ก ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ฉํฐ ์ค๋ ๋ฉ์ ์ง์ํ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
** ์คํ๋ง์์๋ Dispatcher Servlet์ด ์๋ธ๋ฆฟ์ ์ญํ ์ ์ํํ๋ค.
๊ทธ๋ผ ์ด์ ํน์ง์ ์์๋ณผ๊น?
์คํ๋ง ๋ถํธ ํ๋ฉด ๋ฌด์กฐ๊ฑด ๋์ค๋ ์ด์ผ๊ธฐ ์ธ ๊ฐ์ง
IoC / DI / AOP
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค์ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ์คํ๋ง์ด ๊ด๋ฆฌํด์ฃผ๋๋ฐ ์ด๊ฑธ ์ ์ด๊ฐ ์ญ์ ๋์๋ค๊ณ ํด์ ์ ์ด์ญ์ (IoC: Inversion of Control) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ฐ์ฒด์ ์ ์ด๊ถ์ ์ปจํ ์ด๋๋ก ๋๊ฒจ์ ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌ์ํ๋๋ฐ๋ง ์ง์คํ ์ ์์ผ๋ ์ผ์ ํจ์จ์ด ์ฌ๋ผ๊ฐ์ง! ๊ทธ๋ผ ์ด ์ ์ด์ญ์ ์ ์ด๋ป๊ฒ ํ๋๋? ์์กด์ฑ(Dependency)์ ์ฃผ์ (Injection)ํด์ ์ฌ์ฉํ๋ค. ์ธ๋ถ ์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๊ณ ๊ทธ๊ฑธ ์์ฑ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ฑฐ๋, ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ฑฐ๋, setter ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฃผ์ ํ๋ค. ๊ทธ๋ผ ์ด์ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP: Aspect-Oriented Programming)์ ํ ์ ์๊ฒ ๋๋๊ฑฐ์ง.
๊ทธ๋ผ ์ด ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ญ์ง ์์๋ณด์
AOP๋ ๋ถ๋ช OOP์๋ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. AOP๋ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด์ ๊ฐ๋ฐํ๋ ๋ฐฉ์ ์ด๋ผ๊ณ ํ๋๋ฐ, ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌ๋ถํด ๊ฐ๊ฐ์ ํ๋์ '๊ด์ (Aspect)'์ผ๋ก ๋ณด๊ณ ๋๋๋ค. ์ฌ๊ธฐ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ฒ๋ฆฌํ๋ ค๋ ๋ชฉ์ ๊ธฐ๋ฅ์ ๋ปํ๊ณ ๊ทธ ์ธ์ ๊ฒ๋ค์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋๋ก ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ด๋ ๊ฒ ๊ด์ ๋ณ๋ก ๊ธฐ๋ฅ์ ๋ฌถ์ด๋ณด๋ฉด ์ฌ๋ฌ ๋น์ฆ๋์ค๋ก์ง์์ ๋ฐ๋ณต๋๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ณด์ผ ๊ฒ์ด๊ณ ๊ทธ๊ฑธ ๊ณตํต ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์ฝ๋๋ ๋ ๊น๋ํด์ง ๊ฒ์ด๋ค.
์.. ๋๋ต์ ์ธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ ๊ฒ ๊ฐ๋ค๐ซ
++ ๊ทธ๋์ ์คํ๋ง / ์คํ๋ง๋ถํธ๋ฅผ ์ ์ฐ๋๊ฑด๋ฐ?
: ์์ ์ ๋ถํธํ๋ ๊ฒ์ ํ๊ธฐ์ ์ผ๋ก ํธํ๊ฒ ํด์คฌ๊ธฐ ๋๋ฌธ์ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค. ๋จ์ ๋ฐ๋ณต์์ ๋ถ๋ถ์ด ๋ง์๋ Controller ์ Repository ์ชฝ์ ๊ฐ๋ฐ ๊ด์ ์์ ์ฝ๊ณ ํธํ๊ฒ ์ฒ๋ฆฌํด์คฌ๋ค๊ณ ํ๋ค. ๊ทธ๋ก์ธํด ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋์๋ค๋ ์ด์ผ๊ธฐ ~
++ ์๋ ๊ทธ๋ผ ์คํ๋ง์ด๋ ์คํ๋ง ๋ถํธ๋ ๋ญ๊ฐ ๋ฌ๋ผ? ํ๋ ์ ์ด ์์ด ์ถ๊ฐํด๋ณด๋ ๋จ๋ฝ..
์คํ๋ง์ ๋ง๊ทธ๋๋ก ํ๋ ์ ์ํฌ์ธ๋ฐ ์ด๊ฑธ ์ง์ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ ๋ถ๋ถ์ด ๋๋ฌด ๋ณต์กํ๋ค๊ณ ํ๋ค. ๊ทธ๋์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ์คํ๋ง ๋ถํธ ..!!!
์ฌ์ง์ด๋ ์์กด์ฑ ์ฃผ์ ์ด ์ฅ์ ์ค ํ๋๋ผ๊ณ ํ๋๋ฐ ์คํ๋ง์์๋ ๊ฐ ๋ชจ๋์ ์์กด์ฑ์ ์ง์ ์ค์ ํ์ด์ผํ๋ค๊ณ ..
์คํ๋ง ๋ถํธ๋ฅผ ์ด์ฉํ๋ฉด ๋จ๋ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ์์ฉ ์์ค์ ์คํ๋ง ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
reference
์คํ๋ง๋ถํธํต์ฌ๊ฐ์ด๋
'Backend Study > ๐ธSpring๐ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
RefreshToken๋ ์ ์ฉํด๋ณด์ธ์ ~ ๐ซก (0) | 2023.04.28 |
---|---|
๋ฐฑ์๋์ ์๋ช , Database ๊ทธ๋ฆฌ๊ณ Sql (0) | 2023.04.20 |
API? RESTful API? (0) | 2023.04.20 |
web์ด ๋ญ์ผ? web server๊ฐ ๋ญ์ผ? ์์ฃผ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณผ๊ป (0) | 2023.04.14 |