좀 더 좋은 코드를 만들기 위해 개발된 개념
유지보수가 용이한 것, 가독성이 좋은것, 남이 쉽게 이해할 수 코드.
인건비 대비 효율성. 개발자의 시간을 아껴야 효율성이 높아진다.
코드를 이해하고, 유지보수하는데 시간을 아끼자.
수많은 패턴과 라이브러리 탄생.
모든 기능을 서버 파일 하나에서만 하면?
문제 발생시 다 터짐...
프로세스를 분리하면 발생하는 문제를 빠르게 해결할 수 있음
클라이언트에 가까운 곳부터 데이터베이스까지 layer를 나눈다.
l각 구성 요소의 역할이 명확
각 레이어의 코드가 서로 독립적이고, 서로에게 끼치는 영향 최소화.
높은 가독성, 높은 재사용 가능성
모듈화 한다, 컴포넌트화 한다, 분리한다, 관심사의 분리를 한다.
client <=> presentation <-> business <-> persistence <=> database
컨트롤러
요청/응답 처리
서비스
로그인, 회원가입 등 서비스와 직접적으로 연결된 내용
모델
sql처리
단방향성
자기 직전 레이어만 생각한다.
presentation 레이어가 persistence 레이어와 통신할 일 없다는 의미.
SoC
서로 독립적이다. 서로 관심이 없다.