백엔드에서 중요한 개념 중 하나인 DTO는 계층간 데이터를 전달하기 위해 사용되는 객체이다. 처음에 이 DTO에 대해 공부할 때 저 계층이라는 것이 프론트엔드 - 백엔드 - DB의 계층을 말하는 것인 줄 알았는데 아니었다. 정확히는 Spring Boot의 구성 요소인 프레젠테이션 계층, 비즈니스 계층, 퍼시스턴스 계층의 3계층을 의미하는 것이었고 그것에 대해서 좀 심도있게 알아봤다.
프레젠테이션 계층
- 엔드 포인트를 이용하여 사용자 인터페이스(UI)와 애플리케이션 간의 상호작용을 담당한다
- @Controller, @RestController 어노테이션을 사용한다
- HTTP 요청을 받아 적절한 비즈니스 로직으로 전달하고, 그 결과를 다시 클라이언트에게 반환한다.
- View 템플릿과 함께 사용되어 동적 웹 페이지를 생성할 수도 있다.
비즈니스 계층
- 애플리케이션의 핵심 로직을 구현하는 계층이다.
- @Service 어노테이션을 사용한다.
- 데이터 처리, 계산, 규칙 적용 등 실제 비즈니스 요구사항을 코드로 구현한다.
- 트랜잭션 관리를 담당하여 데이터의 일관성을 유지합니다.
- 트랜잭션이란 데이터베이스에서 데이터의 일관성을 보장하기 위해 일련의 작업을 하나의 단위로 묶어서 처리하는 것이다.
퍼시스턴스 계층
- 데이터의 영속성을 관리하는 계층이다.
- 영속성이란 데이터를 영구히 저장하여 애플리케이션이나 시스템이 종료나 재시작되어도 데이터가 사라지지 않도록 하는 것을 의미하는 것
- @Repository 어노테이션을 사용한다.
- 데이터베이스와의 직접적인 상호작용을 담당한다 (CRUD 연산 등).
- ORM을 사용하여 객체와 관계형 데이터베이스 간의 매핑을 처리한다.
내가 경험해본 백엔드는 express.js 였는데 express에서는 계층을 나누어서 관리하기 보다는 각 엔드포인트 별로 하나의 독립적인 커스텀 메서드를 작성하는 느낌이었는데 Spring에서는 그 독립적이었던 형태가 기술한 3가지의 계층을 토대로 더 세분화된 느낌이다. 익숙해지면 확실히 관리하기엔 편할 것 같다는 생각이 드는데 일단 익숙해지는데에 많은 시간을 투자해야 할 듯 하다.
Ghost