SOLID를 잘하는 방법으로는 스프링을 사용하는 것이라고 했는데 스프링은 웹에 SOLID의 분류, 교체를 용이하게 해주는 3계층 구조가 있다고 한다.
이는 스프링 Web MVC 에서 가장 대중적으로 활용되는 역할 분리 방법이다.
(Three-Tier(Layer) Architecture qin Spring MVC)
Presentation Layer(표현계층) - 웹에서 요청이 들어오는 것을 받아주는 계층이다. 외부와 통신하는 Layer이다. 거기에 Controller라는 Class를 만들어서 사용하는 것이다.(javascript로 요청된 요구사항을 Java가 읽을 수 있는 언어로 번역)
번역된 요구사항을 Service에 전달 => Service에서 전달된 값을 다시 클라이언트에 반환해주는 일을 한다.
(요청받은게 GET, POST 뭐 이런것들 중 어느것인지 판별)
Business Logic Layer - OO서비스라는 이름으로 Class를 만들게 된다. 실제로 작업(Business Logic)이 일어나는 단계로 서버에서 사용자의 요구사항을 처리한다.
Data Access Layer - OORepository Class라는 이름으로 Class를 만들게 된다. repository는 Service에서 나온 결과값을 저장하거나 기존의 저장된 정보를 반환해주는 등의 일을 하는 정보를 관리해주는 역할을 한다. DB의 관리를 처리하는 계층이다.
물론 SRP를 지키기 위해 Serivce도 쪼개고, Controller도 쪼개지만 이런 역할에 따른 표준적인 Layer를 제공해주기 때문에 SRP를 큰 그림에서 도와준다는 뜻이다.
다른 회사, 다른 나라에서도 스프링을 사용하면 거의 이 방식대로 사용하고 있기 때문에 처음보는 코드라도 뭔 컨트롤러면 외부요청을 받는 쪽, 뭔 서비스면 business logic을 처리하는 클래스겠네 이런식으로 빠른 파악이 가능해진다.
이런 큼직한 세단계의 Layer로 나눠주는게 스프링에서 SRP, ISP를 도와주는 가장 대표적인 기능이다.