애플리케이션을 3개의 논리적 및 물리적 컴퓨팅 계층으로 분리하는 3계층 아키텍처
=> 기존의 클라이언트-서버 애플리케이션을 위한 주요 소프트웨어 아키텍처
🧩 계층별 역할
- Controller : 어플리케이션의 가장 바깥 부분, 요청/응답을 처리한다.
- 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과를 반환해주는 역할을 한다.
- Service : 어플리케이션의 중간 부분, 실제 중요한 작동이 많이 일어나는 부분이다.
- 아키텍처의 가장 핵심적인 비즈니스 로직이 수행되는 부분이다.
- Repository : 어플리케이션의 가장 안쪽 부분, DB와 맞닿아 있다.
- 실제 데이터베이스의 데이터를 사용하는 계층이다.
우려 사항의 분리:각 계층은 코드 구성과 유지관리 가능성을 촉진하는 별개의 책임을 가지고 있다.
재사용 가능성:격리된 계층은 다른 애플리케이션이나 동일한 애플리케이션의 일부에서 재사용할 수 있다.
확장성:개별 계층은 필요에 따라 독립적으로 확장할 수 있다.
유연성:일반적으로 한 계층을 변경하면 다른 계층에 미치는 영향은 최소화된다.
보안:데이터 액세스를 분리하면 액세스 제어 및 보안 조치를 시행하는 데 도움이 된다.
EX.
class UserInterface {
showProducts(products) {
// 사용자에게 제품 표시
products.forEach((product) => {
console.log(`${product.name} - $${product.price}`);
});
}
getUserInput() {
// 제품 선택에 대한 사용자 입력 가져오기
const userInput = prompt("Enter the product ID to purchase:");
return parseInt(userInput);
}
}
// 프레젠테이션 레이어의 주 기능
const userInterface = new UserInterface();
const products = [
{ id: 1, name: "Product 1", price: 10 },
{ id: 2, name: "Product 2", price: 20 },
{ id: 3, name: "Product 3", price: 30 },
];
userInterface.showProducts(products);
const selectedProductId = userInterface.getUserInput();
// 추가 처리를 위해 선택한 ProductId를 비즈니스 논리 계층으로 보낸다.
=>
UserInterface
클래스에는 두 개의 메서드가 있다:showProducts(products)
: 이 메서드는 제품들을 받아서 console.log
를 사용하여 사용자에게 보여준다.getUserInput()
: 이 메서드는 사용자에게 제품 ID를 입력하도록 하고 사용자 입력 값을 정수로 변환하여 반환한다.-> 로직
UserInterface
의 인스턴스를 생성한다.showProducts
메서드를 호출하여 제품들을 사용자에게 표시한다.getUserInput
메서드를 호출하여 사용자가 선택한 제품 ID를 가져와 selectedProductId
변수에 저장한다.EX.
class BusinessLogic {
getProductById(products, productId) {
// ID별로 제품 세부 정보 검색
return products.find((product) => product.id === productId);
}
calculateTotalCost(productPrice, quantity) {
// 제품 가격 및 수량을 기준으로 총 비용 계산
return productPrice * quantity;
}
}
// 비즈니스 논리 계층의 주 기능
const businessLogic = new BusinessLogic();
const products = [
{ id: 1, name: "Product 1", price: 10 },
{ id: 2, name: "Product 2", price: 20 },
{ id: 3, name: "Product 3", price: 30 },
];
const selectedProductId = 2;
const quantity = 3;
const selectedProduct = businessLogic.getProductById(products, selectedProductId);
if (selectedProduct) {
const totalCost = businessLogic.calculateTotalCost(selectedProduct.price, quantity);
console.log(`Total cost for ${quantity} units of ${selectedProduct.name}: $${totalCost}`);
} else {
console.log("Product not found.");
}
=>
BusinessLogic
클래스에는 두 개의 메서드가 있다:getProductById(products, productId)
: 이 메서드는 제품 배열과 제품 ID를 인자로 받는다.Array.find
메서드를 사용하여 주어진 ID와 일치하는 제품을 배열에서 찾아 반환하거나 찾지 못한 경우 undefined
를 반환한다.calculateTotalCost(productPrice, quantity)
: 이 메서드는 제품 가격과 수량을 인자로 받아 제품 가격에 수량을 곱하여 총 가격을 계산한다.-> 로직
BusinessLogic
의 인스턴스를 생성한다.selectedProductId
와 quantity
를 데모용으로 정의한다.getProductById
메서드를 호출하여 제품 배열과 selectedProductId
로 선택된 제품을 찾는다.calculateTotalCost
메서드를 호출하여 제품 가격과 수량을 기반으로 총 가격을 계산하고 그 결과를 콘솔에 출력한다.EX.
// array를 데이터 소스로 사용하고 있지만 실제 시나리오에서는 데이터베이스 또는 API의 데이터일 수 있다.
const products = [
{ id: 1, name: "Product 1", price: 10 },
{ id: 2, name: "Product 2", price: 20 },
{ id: 3, name: "Product 3", price: 30 },
];
=>
products
라는 배열을 정의:
글 잘 봤습니다.