사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
프로젝트의 핵심 부분, 주로 서비스와 리포지터리로 구성된다.
리포지터리는 저장과 조회를 담당하는데, 서비스의 하청을 받아서 일을 한다.
서비스는 실제로 데이터가 어디에 저장되는지(DB or 파일 or 메모리) 모른다. 왜냐하면 리포지터리가 담당하니까.
보여지는 부분, 대부분의 웹 프로젝트에서는 JSP나 타임리프와 같은 템플릿, 우리가 진행하는 텍스트 프로그램에서는 System.out.println
고객의 요청을 받아서 서비스에게 토스해주는 역할, 고객에 대해서 잘 알고 있다. 반대로 서비스는 고객에 대해서 몰라야 하는데, 그걸 가능하게 해주는게 컨트롤러 이다.
서비스 같은 경우는 사용자가 웹 브라우저 접속했는지, 명령어로 사용중인지 몰라야 한다.