서버를 설계하기 이전에 아키텍처에 대해 알아보고, 어떤 아키텍처로 설계하면 좋을지 생각해보자.
3 Tier Architecture
→ 3 계층 구조 : 클라이언트, 어플리케이션, 데이터 계층에 따른 서버를 분리하여 개발
3 Layer Architecture
→ 3 레이어 구조 : Controller, Service, DAO 로 분리하여 개발
코드의 물리적 분리(구조) ( 분리시, 동일한 서버(컴퓨터)안에서 위치 할 수 없음)
다른 서버에 상주 함으로, 직렬화된 개체로서 값으로만 계층과 통신
하나의 서버(컴퓨터)에서 3가지의 다른 기능을 함께 구현한 방식. (프론트엔드, 백엔드, DB 가 모두 구현해져있는 형태로 클라이언트 계층(Client Tier
)으로 1계층 구조가 완성된다.)
클라이언트 계층과 데이터 계층의 서버(컴퓨터)로 구분하여, 서로의 계층에서 변경이 이루어지더라도 영향을 받지 않는다.
클라이언트 계층Client Tier
(웹 서버, 프론트엔드), 어플리케이션 계층Application Tier
(비즈니스 로직, 데이터 액세스 로직), 데이터 계층Data Tier
(DBMS, 쿼리 실행) 의 서버(컴퓨터)들을 모두 물리적으로 구분하여 구성한 경우로, 각각의 계층에서 변화가 일어나더라도 서로 영향을 받지 않도 독립적으로 운영된다.
비즈니스 로직을 완전히 분리하여 데이터베이스 시스템과 클라이언트 사이에 배치한 클라이어느 서버 시스템의 일종이다. 일반적으로 3-tier 구조가 널리 쓰인다.
- 각 계층을 담당하는 팀들을 구성하여 업무 분담이 가능함으로 업무 효율성 증가,
- 서로 다른 물리적인 서버들을 구성함으로 리스크 완화,
- 여러 대의 서버로 나누어 각 계층이 동작하므로 서버의 부하 감소 및 유지보수 용이
(+) 단점 : 1계층으로만 관리하는 것에 비하여는 비용이 많이 발생 할 수 있으므로 서비스 규모 및 사용자 증가에 따라서 계층 구조를 설계 및 고려해야 한다.
코드의 논리적 분리(구조) ( 동일한 서버(컴퓨터)안에 위치해야 서로 통신이 가능)
값과 참조를 통하여 다른 계층과 통신 할 수 있음.
Controller
- Service
- Data Access Layer
구조
Controller
에서 클라이언트 요청을 받고 서비스에 전달하면,Service
는 비즈니스 로직을 수행하는데 이때 DAO 를 통해 값을 얻어오고,Data Access Layer
는 이때 쿼리를 수행하여 DB 와 상호작용한다.
- 가독성과 재사용성을 향상시키고
- 다른 레이어의 변경으로 인한 애플리케이션 변경을 최소화 할 수 있다.
[참조]
http://dawoonjeong.com/mvc-vs-3tier/
https://freefeast.info/tutorials-for-beginners/dotnet-tutorials/3-tier-vs-3-layer-architecture-difference-between-3-layer-and-3-tier-architecture/
https://www.stevenjlee.net/2020/05/08/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-3%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0-3-tier-architecture/