๐ 1. ๊ฐ๋
๊ณ์ธตํ ์ํคํ ์ฒ(Layered Architecture)๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(Separation of concerns)์ ๋ฐ๋ผ ์์คํ ์ ์ ์ฌํ ์ฑ ์(๊ด์ฌ)์ ์ง๋ Layer๋ก ๋ถํดํ๊ณ , ๊ฐ๊ฐ์ Layer๊ฐ ํ์ Layer์๋ง ์์กดํ๋๋ก ๊ตฌ์ฑํ๋ ์ํคํ ์ฒ ํจํด์ด๋ค.
๐ 2. ์ฌ์ฉ ๋ชฉ์
Layered Architecture๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ๋ ์ด์ด๋ค์ด ํน์ ๊ด์ฌ์ฌ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ง์ ํฌํจํ๋๋ก ๋ง๋ ๋ค. ์ด๋ฅผ ํ์ฉํ Layered Architecture์ ํตํด ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ ์ด๋ฃฐ ์ ์๋ค.
- ์ ์ฒด์ ์ธ ์์คํ
์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
ํ์ ๊ณ์ธต์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ๊ทผํจ์ผ๋ก์จ ํด๋น ๊ณ์ธต์ ๋ณ๊ฒฝ ์ฌํญ์ ์ต์ํํ ์ ์๋ค. - ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
๊ฐ ๋ ์ด์ด์ ์๋ก ๋ค๋ฅธ ์ถ์ํ ์์ค์ ๊ฐ์ง ์ํ์ ํ๋์ ์์น์ํด์ผ๋ก์จ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค. - ์ ์ง๋ณด์์ฑ์ ํฅ์์ํจ๋ค.
ํ์ ๊ณ์ธต์ ์์กด์ฑ์ด ํ์ํ ๊ฒฝ์ฐ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๊ณ์ธต์ ๋ณ๊ฒฝ์ ๋ํ ์ํฅ์ด ์ ํ๋์ง ์๋๋ก ์ต์ํํ๋ค. - ๊ฐ๋ฐ์์ ์ธ์ง ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํ๋ค
๐ 3. 4-Layered Architecture
๊ณ์ธต์ ๊ฒฝ์ฐ, ๋น๊ต์ ๋จ์ํ ์ํฉ์์๋ 3 ๊ณ์ธต(Presentation Layer, Application Layer Data Layer))์ผ๋ก ๋๋ ์ ์๊ณ ์ผ๋ฐ์ ์ผ๋ก๋ 4 ๊ณ์ธต(Presentation Layer, Business Layer, Persistence Layer, DataBase Layer)์ ๊ฐ์ง๋ค.
4-Layered Architecture์ ๊ฐ๊ฐ์ ๋ ์ด์ด๋ค์ ๋ํด์ ์์๋ณด์.
๐ 1. Presentation Layer
- Presentation Layer๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๊ณ ์๋ตํ๋ ๊ณ์ธต์ด๋ค.
- ๋ํ์ ์ธ ๊ตฌ์ฑ์์๋ View์ Controller๊ฐ ์๋ค.
๐ 2. Business Layer
- Business Layer๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ๊ณ์ธต์ด๋ค.
- Presentation Layer๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ค๋ฉด Business Layer๋ ์ค์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค.
๋ํ์ ์ธ ๊ตฌ์ฑ์์๋ก๋ Service๊ฐ ์๋ค.
๐ 3. Persistence Layer
- Persistence Layer๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ณ์ธต์ด๋ค.
- Business์ ์์ฒญ ์ฒ๋ฆฌ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์กฐํ, ์ญ์ ๋ฑ์ ๋ก์ง์ ์ํํ๋ค.
- ๋ํ์ ์ธ ๊ตฌ์ฑ์์๋ Repository์ DAO ๋ฑ์ด ์๋ค.
๐ 4. Database Layer
- Database Layer๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์นํ ๊ณ์ธต์ ์๋ฏธํ๋ค.
- ๋ํ์ ์ธ ๊ตฌ์ฑ์์๋ก๋ MySQL, MariaDB, PostgreSQL, MongoDB ๋ฑ์ด ์๋ค.
๐ 4. Open And Closed Layer
๊ฐ ๋ ์ด์ด๋ ํ์(Closed) ๋๋ ๊ฐ๋ฐฉ(Open) ์ํ๋ฅผ ๊ฐ์ง๋ค.
๊ฐ๋ฐฉ ์ํ๋ฅผ ์ด์ฉํ์ฌ '์๊ฒฉํ ๋ ์ด์ด ์ํคํ ์ฒ'์ '์ํ๋ ๋ ์ด์ด ์ํคํ ์ฒ'๋ก ๋๋ ์ ์๋ค.
์๊ฒฉํ ๋ ์ด์ด ์ํคํ ์ฒ๋ ๋ฐ๋์ ์๋ ๊ณ์ธต๋ง์ ์์กดํ๋ ๊ฒ์ด๊ณ , ์ํ๋ ๋ ์ด์ด ์ํคํ ์ฒ๋ ์์ ์ ํ์ ๋ ์ด์ด๋ผ๋ฉด ๋ชจ๋ ์์กดํ ์ ์๋ ๊ฒ์ ๋งํ๋ค.
์๊ฒฉํ ๋ ์ด์ด ์ํคํ ์ฒ์์๋ ๋ณ๋ค๋ฅธ ๋ก์ง์ด ์๋๋ผ๋ ๋ฐ๋์ ์๋ ๊ณ์ธต์ ํธ์ถํด์ผ ํ๋ค.
์์ฒญ์ ์ ๋ฌ๋ฐ์ ํ์ ๊ณ์ธต์ ์๋ฌด๋ฐ ๋ก์ง ์์ด ์์ฒญ์ ๋ค์ ๊ณ์ธต์ผ๋ก ์ ๋ฌ๋ง ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋๋ฐ ์ด๋ฌํ ๊ฒ์ '์ฑํฌํ ์ํฐ ํจํด'์ด๋ผ๊ณ ํ๋ค. ์ด๋ ๋ถํ์ํ๊ฒ ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ๋ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํจ๋ค.
์ฑํฌํ ์ํฐํจํด์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ ์ฝ์ง ์๋ค. ๊ทธ๋์ ์ฑํฌํ ์ํฐ ํจํด์ ๋ฌธ์ ๋ฐ์ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก '80-20 RULE'์ด ์๋ค.
์ด๋ ์ ์ฒด ์์ฒญ์ 20%๊ฐ ์ฑํฌํ์ธ ์ ๋๋ฉด ๊ทธ๋ฐ๋๋ก ๊ด์ฐฎ์ ์์ค์ด๋ผ๋ ๊ฒ์ ๋งํด์ค๋ค.
๐ 5. Layered Architecture์ ๋จ์
- ํ์ฅ์ฑ ๋ฌธ์
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ค. - ๋๋ฉ์ธ ๋ณ๊ฒฝ์ ์ด๋ ค์
๋๋ฉ์ธ์ ๋ณ๊ฒฝํ๋ ค๋ฉด Presentation Layer, Business Layer, Persistence Layer, Database Layer๋ฅผ ๋ชจ๋ ๋ณ๊ฒฝํด์ผ ํ๋ค. (ํ๋์ ๋๋ฉ์ธ์ด ๋ชจ๋ ๋ ์ด์ด์ ๋ถ์ฐ๋์ด ์๋ค.)
๋ ์ด์ด๋ก ๋ถ๋ฆฌ๋ ๊ด์ฌ์ฌ ์ธ์ ๋ค๋ฅธ ๊ด์ฌ์ฌ๊ฐ ๋ฐ๊ฒฌ๋ ๊ฒฝ์ฐ, ํจํค์ง ๋ถ๋ฆฌ ๋ฐ ์ฝ๋ ๋ฐฐ์น๊ฐ ๋๊ฐํ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. - ๋ฎ์ ์์ง๋
ํ๋์ ์ํฉ ๋๋ ๊ฐ๋ ์ด ๋ ์ด์ด์ ํน์ฑ์ผ๋ก ์ธํด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๊ฒ ๋๋ค.
ํด๋น ๊ธ์
oreilly ์ 'Chapter 1. Layered Architecture',
dzone ์ 'Layered Architecture Is Good',
์ฝ๋ฉ๋ฌด๋ ๋์ 'Layered Architecture (๊ณ์ธตํ ์ํคํ ์ฒ) ๋ ๋ฌด์์ธ๊ฐ?',
junhyunny ๋์ 'Layered Architecture',
gmtmoney2357 ๋์ '์ํํธ์จ์ด ์ํคํ ์ฒ - ๋ ์ด์ด๋ ์ํคํ ์ฒ(Layered architecture)',
hudi ๋์ '๊ณ์ธตํ ์ํคํ ์ฒ (Layered Architecture)'
๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.
'๐ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CQS (Command Query Separation) (0) | 2023.06.27 |
---|---|
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ vs ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2023.06.17 |