본문 바로가기
CS

Service Layer의 활용

by yukuda 2024. 3. 13.
728x90

Layered Architecture Permalink

Service Layer에 대해 알려면, 먼저 Layered Architecture(계층 구조)를 이해해야 한다.

Layered Architecture는 코드를 모듈화하고 재사용성을 높여서, 애플리케이션을 쉽게 확장하고 유지보수 하기 위해 사용한다. 즉, 각 계층이 독립적으로 개발되고, 테스트될 수 있으며, 따라서 애플리케이션 전체의 유지보수성이 향상된다.

각 계층은 분명 서로 상호작용이 일어나지만, 다른 계층에서 발생하는 일에 대해선 전혀 몰라도 된다.

개인적으로 Layered Architecture에 대해 가장 이해하기 쉬웠던 그림이다.

Presentation Layer는 Spring MVC 패턴을 통해 사용자의 요청을 처리하여 응답을 생성하고,

Persistence Layer(Data Access Layer)는 데이터의 영속성을 관리하고 저장, 검색, 수정, 삭제 등의 작업을 수행한다.

그럼 Service Layer는 무엇을 하는 녀석일까?

Service Layer의 필요성 Permalink

  • 비즈니스 로직의 분리와 중앙화 : 도메인 객체간의 상호작용을 조정하고, Persistence Layer와 데이터를 주고 받으며, 한 기능 단위의 결과물을 Controller로 전달한다. 즉, Presentation Layer, Persistence Layer, Domain Model과 전부 상호 작용을 하며 핵심 비즈니스 로직을 처리하는 역할을 맡는다.
  • 비즈니스 로직을 Controller나 Persistence Layer에서 직접 처리하는 경우, 코드가 복잡해지고 유지보수가 어려워진다. 이미 각자의 역할이 있는데 거기에 비즈니스 로직이 또 추가가 되기 때문이다. 그래서 서비스 계층을 도입함으로써 비즈니스 로직을 분리하고 중앙화 하여, 코드의 가독성과 유지보수성이 향상되고 개발 효율성을 높이게 된다.
  • 각 계층의 역할 명확화 : 바로 위의 역할에 연장되는 느낌인데, Controller는 사용자의 요청을 처리하고 응답을 생성하는 역할을, Persistence Layer는 DB와의 상호작용을 담당하는 역할을, Service Layer는 비즈니스 로직과 트랜잭션 관리를 수행하는 역할을 하게 된다. 이렇게 각 계층의 역할이 분명해지면 코드의 가독성과 유지보수성이 향상된다.
  • 트랜잭션 관리 : 각 핵심 기능마다 데이터의 일관성과 무결성을 보장하기 위해 트랜잭션을 관리한다. 하나의 기능을 처리하기 위해 여러 Dao 혹은 Service를 통해 데이터를 다뤄야 할 때, 중간에 어떤 계기로 인해 기능이 중단되어 한 단위 기능의 원자성이 파괴되는 것을 예방하기 위함이다. 또한, 기능 단위로 트랜잭션을 관리할 수 있어서 트랜잭션의 경계를 더 명확히 할 수 있다.Persistence Layer에서 트랜잭션을 관리하기엔, 이 또한 비즈니스 로직과 데이터의 영속성과 관련된 작업이 혼재될 수 있다. 그리고 트랜잭션 범위의 한계가 너무 좁아져서 각각의 기능 단위를 관리하는 Service Layer에서 트랜잭션 처리를 하기 어렵게 된다.
  • Controller에서 관리하기엔, 각 트랜잭션의 단위가 너무 커지고 비즈니스 로직 처리와 트랜잭션 처리가 동시에 이루어지지 않아서 유지보수의 어려움이 생길 수 있다. 또한, Transactional은 AOP를 통해 구현되는데, Controller는 보통 인터페이스가 없다. AOP는 Dynamic proxy를 사용해서 인터페이스가 필요하기에, Controller에 Tracsantional을 적용하기엔 어려움이 따를 수 있다.
  • 코드 재사용성 촉진 : 서비스 계층은 비즈니스 로직을 캡슐화하므로 애플리케이션의 여러 부분에서 코드 재사용성을 촉진한다. 예를 들어 여러 컨트롤러가 동일한 서비스를 사용하여 공통 작업을 수행하여 코드 중복을 줄일 수 있다.

https://tjdtls690.github.io/studycontents/java/2023-04-24-service_layer/

 

[Java, Spring] Service Layer는 무엇이고 어떻게 활용해야 하는가?

.

tjdtls690.github.io

 

'CS' 카테고리의 다른 글

Spring Boot에서 이벤트 사용하기  (0) 2024.03.14
자바의 Record로 DTO를 만들어보자  (0) 2024.03.13
Stream API의 map  (0) 2024.03.13
Thread, maxThread, maxConnections, accpetCount의 이해  (0) 2024.03.13
메모리 구조  (0) 2024.02.25