[Spring Boot] 스프링 웹 계층

BitedRadish·2025년 5월 18일
post-thumbnail

Spring Framework 애플리케이션은 유지 보수와 확정성을 위해 여러 계층으로 나뉘어 설계합니다.
계층은 크게 Presentation Layer, Business Layer, Data Access Layer로 3개(3-Tier Architecture)로 나눌 수 있습니다.

그림을 한 줄로 요약하자면 사용자가 요청을 보내을 때, Controller -> Service -> Repository -> DB로 흘러가고, 결과는 다시 반대 방향으로 되돌아온다로 정리할 수 있습니다.

⭐️ Presentation Layer

표현 계층은 사용자 요청을 가장 먼저 받는 입구입니다. 사용자가 보낸 요청을 확인해서, 적절한 서비스(Service)에게 처리를 맡깁니다.

구체적으로 설명해보자면,

  1. 브라우저 상의 웹 클라이언트의 요청 및 응답 처리
  2. 서비스 계층, 데이터 엑세스 계층에서 발생하는 Exception을 처리

@Controller 어노테이션을 사용하여 작성된 Controller 클래스가 Presentation Layer에 속합니다.

⭐️ Business Layer

Business Layer는 핵심 업무를 처리하는 계층입니다. 요청에 맞게 필요한 작업을 설계하고 지시하죠. 처리하는 과정에서 필요한 데이터가 있다면 Data Access Layer에 요청을 보냅니다.

  1. 어플리케이션 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 적합성 검증
  2. 트랜잭션 관리
  3. 프레젠테이션 계층과 데이터 엑세스 계층 사이를 연결하며, 두 계층이 직접적으로 통신하지 않게 함. (결합도를 낮추기 위함)

Service 인터페이스와 @Service 어노테이션을 사용하여 작성된 Service 구현 클래스가 해당 계층에 속합니다.

⭐️ Data Access Layer

Data Access Layer는 실제 데이터베이스와 연결되는 계층입니다. 예전에는 DAO 클래스를 따로 만들었지만, 지금은 JPA의 @Repository 어노테이션을 주로 이용하고 사용하고 있습니다.

  1. ORM(Mybatis,Hibernate)을 주로 사용하는 계층
  2. DB에 데이터를 CRUD하는 계층

DAO 인터페이스와 @Repository 어노테이션을 사용하여 작성된 DAO 구현 클래스가 해당 계층에 속합니다.

도메인 모델 계층

DB의 테이블과 매칭될 클래스를 작성하는 계층입니다.
Domain 로직만을 가지고 있어야하며 Presentation Logic을 가지고 있어서는 안됩니다. (사용자 요청 받기 등)

@Entity 어노테이션을 이용하여 작성된 클래스가 해당 계층에 속합니다.

DTO (Data Transfer Object)

  • 각 계층간 데이터 교환을 위한 객체
  • Domain,VO라고도 불립니다.
  • DB에서 데이터를 얻어 Service, Controller 등으로 보낼 때 사용합니다.
  • 로직을 갖지 않고 순수하게 getter, setter 메소드만 가집니다.
  • 모든 계층 간 데이터 이동에 사용됩니다.

DAO(Data Access Object)

  • DB에 접근하는 객체, DB를 사용해 데이터를 조작하는 기능을 하는 객체
  • Repository라고도 부릅니다.
  • Service 계층과 DB를 연결하는 고리 역할을 합니다.

참고 블로그

profile
코딩 주니어

0개의 댓글