자바 웹 애플리케이션에서 ‘Service 계층’은 일반적으로 비즈니스 로직을 처리하는 부분을 의미합니다.
이 계층은 사용자의 요청을 받아들이고 처리하는 Controller 계층과, 데이터를 저장하고 관리하는 Repository 또는 DAO(Data Access Object) 계층 사이에 위치합니다.
Service 계층의 주요 역할은 다음과 같습니다:
1. 비즈니스 로직 처리: 사용자로부터 받은 데이터를 가공하거나, 특정 비즈니스 규칙에 따라 계산하고 처리합니다.
2. 트랜잭션 관리: 여러 데이터베이스 연산을 하나의 작업 단위로 묶어서 처리합니다. 예를 들어, 한 작업 내에서 데이터베이스의 여러 테이블에 데이터를 추가하거나 수정할 때, 모든 작업이 성공적으로 완료되거나 실패할 경우 롤백하는 등의 처리를 합니다.
3. 모델 변환: Controller 계층과 Repository 계층 사이에서 데이터 모델을 변환합니다. 예를 들어, 데이터베이스에서 가져온 엔티티를 DTO(Data Transfer Object)로 변환하여 Controller에 전달할 수 있습니다.
4. 보안 및 검증: 사용자의 요청 데이터에 대한 유효성 검사 또는 인증 및 권한 검사 등의 보안 관련 로직을 처리합니다.
이러한 Service 계층을 통해 애플리케이션의 비즈니스 로직이 Controller나 Repository와 분리되어, 각 계층이 자신의 역할에만 집중할 수 있도록 도와주며, 이는 애플리케이션의 유지보수 및 확장성을 높이는 데 중요한 역할을 합니다.
자바 웹 애플리케이션에서 Service 계층의 역할을 이해하기 위해, 몇 가지 예를 들어 보겠습니다.
먼저 간단한 온라인 쇼핑몰 시스템을 예로 들어 보겠습니다. 이 시스템에는 상품을 관리하고, 주문을 처리하는 기능이 있습니다.
1. 상품 관리 기능 (Product Management)
• Controller 계층: 사용자의 웹 요청을 받음. 예를 들어, 새로운 상품을 추가하거나, 상품 목록을 조회하는 요청을 처리.
• Service 계층: 상품 추가, 수정, 조회 등의 비즈니스 로직을 수행.
• 비즈니스 로직 처리: 새 상품 추가 시, 상품 정보의 유효성을 검사하고, 가격 책정 로직을 실행.
• 트랜잭션 관리: 상품 정보를 데이터베이스에 저장할 때, 모든 정보가 정확히 저장되도록 트랜잭션을 관리.
• Repository 계층: 데이터베이스와의 실제 상호작용을 담당. 상품 데이터를 저장하고, 조회하는 역할을 함.
2. 주문 처리 기능 (Order Processing)
• Controller 계층: 사용자가 상품을 주문하는 요청을 받음.
• Service 계층: 주문 로직을 수행.
• 비즈니스 로직 처리: 사용자가 선택한 상품의 재고 확인, 결제 처리, 주문 기록 생성.
• 트랜잭션 관리: 주문 데이터가 데이터베이스에 정확하게 저장되도록 트랜잭션을 관리. 만약 결제 실패나 재고 부족 등의 문제가 발생하면, 이전 단계로 롤백.
• 모델 변환: 주문 데이터를 DTO로 변환하여 Controller에 전달.
• 보안 및 검증: 주문 요청을 보낸 사용자의 인증 상태를 확인하고, 주문 데이터의 유효성을 검증.
이렇게 Service 계층은 Controller와 Repository 계층 사이에서 중요한 중간 매개체 역할을 하면서, 비즈니스 로직과 데이터 처리 로직을 분리하고, 애플리케이션의 전체적인 구조를 깔끔하고 관리하기 쉽게 만듭니다. 이로 인해 유지보수가 용이하고, 시스템의 확장성과 유연성이 향상됩니다.
은행 시스템에서 고객의 계좌 관리와 관련된 기능을 예로 들어보겠습니다. 이 시스템에는 계좌 생성, 입출금 처리, 계좌 잔액 조회 등의 기능이 포함될 수 있습니다.
1. 계좌 생성 기능 (Account Creation)
• Controller 계층: 웹 인터페이스를 통해 고객이 새 계좌를 생성하려는 요청을 받습니다.
• Service 계층: 계좌 생성에 관한 비즈니스 로직을 처리합니다.
• 비즈니스 로직 처리: 고객 정보의 유효성을 검증하고, 필요한 경우 고객 신원을 확인합니다.
• 트랜잭션 관리: 새 계좌 정보를 데이터베이스에 저장할 때, 올바른 데이터가 저장되도록 트랜잭션을 관리합니다.
• Repository 계층: 계좌 정보를 데이터베이스에 실제로 저장하고 관리하는 역할을 합니다.
2. 입출금 처리 기능 (Deposit and Withdrawal)
• Controller 계층: 고객이 입금 또는 출금 요청을 할 때 이를 받습니다.
• Service 계층: 입출금 로직을 수행합니다.
• 비즈니스 로직 처리: 요청된 금액에 따라 계좌 잔액을 업데이트하고, 거래 내역을 기록합니다.
• 트랜잭션 관리: 여러 데이터베이스 변경 사항을 하나의 작업 단위로 묶어 관리합니다. 예를 들어, 출금 시 잔액이 충분한지 검사하고, 부족할 경우 거래를 취소합니다.
• Repository 계층: 입출금 관련 데이터를 데이터베이스에 저장하고 관리합니다.
3. 계좌 잔액 조회 기능 (Account Balance Inquiry)
• Controller 계층: 고객의 계좌 잔액 조회 요청을 받습니다.
• Service 계층: 계좌 잔액 조회 로직을 수행합니다.
• 모델 변환: 데이터베이스에서 가져온 계좌 정보를 고객에게 표시하기 적합한 형태로 변환합니다.
• 보안 및 검증: 요청을 한 고객이 해당 계좌에 접근할 권한이 있는지 확인합니다.
• Repository 계층: 계좌 데이터를 데이터베이스에서 조회합니다.
이 예시에서, Service 계층은 비즈니스 로직의 핵심을 담당하고 있습니다. 이 계층은 사용자의 요청을 처리하고, 필요한 비즈니스 규칙을 적용하며, 데이터베이스와의 상호작용을 관리합니다. 이로써 Controller는 사용자 인터페이스와의 상호작용에, Repository는 데이터 저장 및 검색에 집중할 수 있습니다. 이렇게 계층화된 구조는 애플리케이션의 유지보수와 확장을 용이하게 합니다.
이번에는 의료 시스템을 예로 들어 자바 웹 애플리케이션의 Service 계층에 대해 설명하겠습니다. 이 시스템은 환자의 예약 관리, 진료 기록 관리, 처방전 발급 등의 기능을 포함할 수 있습니다.
1. 환자 예약 관리 기능 (Patient Appointment Management)
• Controller 계층: 환자 또는 의료진이 예약을 하거나 변경하는 웹 요청을 받습니다.
• Service 계층: 예약 관련 비즈니스 로직을 처리합니다.
• 비즈니스 로직 처리: 예약 가능 여부를 확인, 특정 시간대에 의사의 스케줄을 검사하고, 환자의 예약 요청을 승인 또는 거절합니다.
• 트랜잭션 관리: 예약 정보가 데이터베이스에 정확히 저장되도록 관리합니다.
• Repository 계층: 예약 데이터를 데이터베이스에 저장하고, 필요한 조회를 수행합니다.
2. 진료 기록 관리 기능 (Medical Record Management)
• Controller 계층: 의료진이 환자의 진료 기록을 추가하거나 조회하는 요청을 처리합니다.
• Service 계층: 진료 기록에 관한 비즈니스 로직을 수행합니다.
• 비즈니스 로직 처리: 새로운 진료 기록을 추가할 때, 환자의 이전 기록과의 일관성을 확인하고, 필요한 정보를 기록합니다.
• 트랜잭션 관리: 진료 기록이 정확히 데이터베이스에 저장되도록 합니다.
• Repository 계층: 진료 기록을 데이터베이스에 저장하고, 필요한 경우 조회합니다.
3. 처방전 발급 기능 (Prescription Issuance)
• Controller 계층: 의사가 처방전을 발급하는 요청을 받습니다.
• Service 계층: 처방 관련 로직을 처리합니다.
• 비즈니스 로직 처리: 처방약의 적절성을 평가하고, 환자의 알레르기 이력이나 다른 약물과의 상호작용을 검토합니다.
• 모델 변환: 처방 정보를 환자나 약국에 전달하기 위해 적절한 형태로 변환합니다.
• 보안 및 검증: 처방을 요청한 의사의 인증과 권한을 확인합니다.
• Repository 계층: 처방전 정보를 데이터베이스에 저장합니다.
이 예시에서 Service 계층은 의료 데이터와 관련된 중요한 비즈니스 로직을 처리하며, 이를 통해 의료 시스템의 정확성과 효율성을 보장합니다. Controller는 사용자 인터페이스와의 상호작용을 처리하고, Repository는 데이터의 저장과 검색을 담당합니다. 이러한 계층화는 시스템의 복잡성을 관리하고, 각 부분의 독립성을 유지하는 데 도움을 줍니다.
'Spring Framework' 카테고리의 다른 글
InvocationHandler (0) | 2024.04.09 |
---|---|
서비스 추상화 (0) | 2024.04.09 |
템플릿 콜백 패턴(Template Callback Pattern) (0) | 2024.04.09 |
전략 패턴 (0) | 2024.04.09 |
@Import (0) | 2024.04.09 |