๐[Spring] ๊ณ์ธตํ ์ํคํ ์ฒ(Layered Architecture), 3๊ณ์ธต ์ํคํ ์ฒ(Three-Tier Architecture)
- Controller๋ฅผ ํตํด ์ธ๋ถ์ ์์ฒญ์ ๋ฐ๊ณ , Service์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ฉฐ, Repository์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ํจํด์ โ๊ณ์ธตํ ์ํคํ ์ฒ(Layered Architecture)โ ๋๋ โ3๊ณ์ธต ์ํคํ ์ฒ(Three-Tier Architecture)โ ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
1๏ธโฃ ๊ณ์ธตํ ์ํคํ ์ฒ(Layered Architecture)
- ์ด ์ํคํ ์ฒ ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๋๋์ด ๊ฐ ๊ณ์ธต์ด ํน์ ํ ์ญํ ์ ๋ด๋นํ๋๋ก ๊ตฌ์กฐ์ํฉ๋๋ค.
- ์ด ๋ฐฉ์์ ์ํํธ์จ์ด์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ฉฐ, ํ ์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋๋ค.
- ์คํ๋ง ํ๋ ์์ํฌ์์ ์ด ํจํด์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ๊ฐ ๊ณ์ธต๋ณ ์ญํ .
-
1. Presentation Layer(ํ๋ ์ ํ
์ด์
๊ณ์ธต) - Controller
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ํธ์์ฉํ๋ ๊ณ์ธต์ ๋๋ค.
- ์ธ๋ถ์ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ , ์๋ต์ ๋ฐํํฉ๋๋ค.
- ์คํ๋ง์์๋ ์ฃผ๋ก
@Controller
๋๋@RestController
๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ณ์ธต์ ๊ตฌํํฉ๋๋ค.
-
2. Business Logic Layer(๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต) - Service
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ณ์ธต์ ๋๋ค.
- ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ, ๊ณ์ฐ, ๊ฒ์ฆ ๋ฑ ํต์ฌ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด ๊ตฌํ๋ฉ๋๋ค.
- ์คํ๋ง์์๋ ์ฃผ๋ก
@Service
์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ด ๊ณ์ธต์ ๊ตฌํํฉ๋๋ค.
-
3. Data Access Layer(๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต) - Repository
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ถ ๋ฐ์ดํฐ ์์ค์ ์ํธ์์ฉํ๋ ๊ณ์ธต์ ๋๋ค.
- ๋ฐ์ดํฐ์ CRUD(Create, Read, Update, Delete) ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์คํ๋ง์์๋ ์ฃผ๋ก
@Repository
์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ด ๊ณ์ธต์ ๊ตฌํํ๋ฉฐ JPA, MyBatis, Hibernate ๋ฑ์ ORM(Object-Relational Mapping) ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
3๏ธโฃ ์ด ํจํด์ ์ฃผ์ ์ฅ์ .
-
๋ชจ๋ํ
- ๊ฐ ๊ณ์ธต์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ฏ๋ก, ๊ฐ ๊ณ์ธต์ ์ฝ๋๊ฐ ๋ช ํํ ๋ถ๋ฆฌ๋ฉ๋๋ค.
-
์ ์ง๋ณด์์ฑ
- ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ์ ๊ทผ, ๊ทธ๋ฆฌ๊ณ ํ๋ ์ ํ ์ด์ ๋ก์ง์ด ๋ถ๋ฆฌ๋์ด ์์ด, ๊ฐ ๋ถ๋ถ์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ๊ฑฐ๋ ํ์ฅํ๊ธฐ ์ฝ์ต๋๋ค.
-
ํ
์คํธ ์ฉ์ด์ฑ
- ๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์ด, ๋จ์ ํ ์คํธ์ ํตํฉ ํ ์คํธ๊ฐ ์ฉ์ดํฉ๋๋ค.
-
์ ์ฐ์ฑ
- ํน์ ๊ณ์ธต์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋์ฒดํ ๋, ๋ค๋ฅธ ๊ณ์ธต์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ ์ ์์ต๋๋ค.
์ด ๊ณ์ธตํ ์ํคํ ์ฒ๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑํํ๋ ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ์ด๋ฉฐ, ์ํํธ์จ์ด ์ค๊ณ์ ๋ฒ ์คํธ ํ๋ํฐ์ค ์ค ํ๋๋ก ๋๋ฆฌ ์ธ์ ๋ฐ๊ณ ์์ต๋๋ค.