[spring] (4) Three Tier Architecture in Spring

orca·2022년 11월 5일
0

Spring

목록 보기
4/13

3계층 아키텍처는 애플리케이션을 3개의 논리적 및 물리적 컴퓨팅 계층으로 구성하는 잘 정립된 소프트웨어 애플리케이션입니다.
프리젠테이션 계층 또는 사용자 인터페이스, 데이터가 처리되는 애플리케이션 계층, 그리고 애플리케이션과 연관된 데이터가 저장 및 관리되는 데이터 계층으로 나눌 수 있습니다.
IBM Cloud Education

Three Tier Architecture

소프트웨어 코드를 구성하는데 널리 사용되는 아키텍쳐!
3계층 구조에 따르면 코드는 고유한 책임을 가진 세가지 레이어로 분리된다

  • Presentation 계층
    This is the user interface of the application that presents the application’s features and data to the user.
  • Application 계층 or Business Logic 계층
    This layer contains the business logic that drives the application’s core functionalities. 의사결정, 계산, 다른 두 계층 간에 전달되는 데이터 처리 etc
  • Data Access 계층 or Data 계층
    This layer is responsible for interacting with databases to save and restore application data.

스프링 어플리케이션에서 Three Tier Architecture의 활용

  • Controller Class as Presentation 계층
    컨트롤러는 클라이언트의 요청을 받고 클라이언트에게 응답한다!
    요청에 대한 처리는 모두 서비스 클래스가 수행해야 하므로 컨트롤러는 최대한 얇게 유지해야 함
  • Service Class as Application 계층
    사용자의 요청을 처리하는 비즈니스 로직을 포함함 ex) 계산, 데이터 처리, 유효성 검사
    DB 정보가 필요할 때는 레파지토리 클래스를 호출함
    컨트롤러 클래스에 의해 호출되며 레파지토리 클래스나 다른 서비스 클래스를 호출할 수 있다.
  • Repository Class as Data Access 계층
    DB 관리
    DB CRUD 작업 처리

스프링 Annotation for Three Tier Architecture

  • @Controller, @RestController
  • @Service
  • @Repository

스프링 3계층 어노테이션은 모두 @Component의 일종임

@Component : 클래스에 대해 빈을 등록할 때 사용하는 도구

Annotation 활용해보기

@RestController
public class ProductController {
    private final ProductService productService;

    @Autowired
    public ProductController(ProductService productService) {
        this.productService = productService;
    }

    @PostMapping("/api/products")
    public Product createProduct(@RequestBody ProductRequestDto requestDto) throws SQLException {
        //ProductService productService = new ProductService();
        Product product = productService.createProduct(requestDto);

        return product;
    }
}
@Service
public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product createProduct(ProductRequestDto requestDto) throws SQLException {
        Product product = new Product(requestDto);
        productRepository.save(product);

        return product;
    }
}
public interface ProductRepository extends JpaRepository<Product, Long> {
}

0개의 댓글