고수준 모듈과 저수준 모듈을 구분하는 것은 소프트웨어 시스템 설계에서 중요한 개념입니다. 이를 이해하려면 각 모듈의 역할과 시스템 내에서의 위치를 고려해야합니다.
고수준 모듈 (High-level Module)
고수준 모듈은 시스템의 주요 로직이나 정책을 포함하는 모듈입니다. 이 모듈은 시스템이 수행해야 할 큰 그림을 담당합니다.
- 비즈니스 로직, 애플리케이션의 주요 기능을 포함합니다.
- 다른 모듈의 동작을 지시하거나 조정합니다. ( 다른 모듈을 호출하거나 상호작용하는 주요 진입점 )
- 일반적으로 인터페이스를 통해 다른 모듈과 상호 작용합니다. ( 구체적인 세부 사항을 다루지 않음 )
- 컨트롤러(OrderController, UserController), 서비스 레이어 (OrderService, UserService..)
저수준 모듈 (Low-level Module)
저수준 모듈은 시스템의 세부 사항을 구현하는 모듈입니다. 이 모듈은 실제 작업을 수행하는 코드로 구성됩니다.
- 데이터베이스 접근, 파일 I/O, 네트워크 통신 등 구체적인 작업을 수행합니다. ( 기술에 종속적이다.)
- 구체적인 구현 세부 사항을 포함합니다.
- 고수준 모듈의 요청을 실제로 수행합니다.
- 데이터 접근 객체(DAO, OrderRepository, UserRepository)
- 유틸 클래스 (FileUtil)
레이드 아키텍처에서의 관계
// 도메인 모델 (엔티티)
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String product;
private int quantity;
// getters and setters
}
// 데이터 접근 레이어 (저수준 모듈)
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
// 기본 CRUD 메서드 제공
}
// 서비스 레이어 (고수준 모듈)
@Service
public class OrderService {
private final OrderRepository orderRepository;
@Autowired
public OrderService(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
public Order createOrder(String product, int quantity) {
Order order = new Order();
order.setProduct(product);
order.setQuantity(quantity);
return orderRepository.save(order);
}
public List<Order> getAllOrders() {
return orderRepository.findAll();
}
}
// 프레젠테이션 레이어 (고수준 모듈)
@RestController
@RequestMapping("/orders")
public class OrderController {
private final OrderService orderService;
@Autowired
public OrderController(OrderService orderService) {
this.orderService = orderService;
}
@PostMapping
public ResponseEntity<Order> createOrder(@RequestBody Order order) {
Order createdOrder = orderService.createOrder(order.getProduct(), order.getQuantity());
return ResponseEntity.status(HttpStatus.CREATED).body(createdOrder);
}
@GetMapping
public ResponseEntity<List<Order>> getAllOrders() {
List<Order> orders = orderService.getAllOrders();
return ResponseEntity.ok(orders);
}
}
스프링 레이드 아키텍처에서는 프리젠테이션 레이어, 서비스 레이어가 고수준 모듈의 역할을 수행하고, 데이터 접근 레이어가 저수준 모듈 역할을 수행합니다. 이를 통해 스스템의 모듈 간 결합도를 낮추고, 유연성과 유지보수성을 높을 수 있습니다.
'개발관련 이것저것' 카테고리의 다른 글
o.apache.kafka.clients.NetworkClient-1145 - [Consumer clientId=consumer-comnKeywordGroup-1, groupId=comnKeywordGroup] Error while fetching metadata with correlation id 157 : {comnKeyword-updates=LEADER_NOT_AVAILABLE} (0) | 2024.10.16 |
---|---|
Springboot + Redis + Kafka 설치부터 설정, 실행 과정 (2) | 2024.10.16 |
SOLID (0) | 2024.05.23 |
VO & DTO (0) | 2024.05.23 |
get vs find (0) | 2024.05.23 |