[Spring] Controller, Service, Repository 구조Software Development/Spring2024. 1. 5. 13:09
Table of Contents
MVC 패턴을 들어보셨나요?
소프트웨어공학 시간에 한번쯤은 짚고 넘어가는 부분입니다.
응용 프로그램을 개발할 때, Model, View, Controller로 나누어 그 구조를 구성하는 방법입니다.
Model
- 어플리케이션의 데이터, 자료를 의미합니다.
View
- 사용자에게 보여지는 부분, 즉 유저 인터페이스를 의미합니다.
Controller
- Model과 View 사이를 이어주는 브릿지 역할을 의미합니다.
조금 더 자세히 설명하면 다음과 같습니다.
모델(Model)
- 프로그램에 사용되는 데이터를 의미하며 데이터베이스(DB), 상수, 문자열과 같은 변수들, 비전 프로그램이라면 카메라 정보와 같은 것들이 해당됩니다.
- 모델에는 뷰나 컨트롤러의 정보가 전혀 없습니다.
- 단지, 정보만 반환하거나 설정할 수 있습니다.
뷰(View)
- 다이얼로그에 존재하는 텍스트박스, 라벨, 버튼 등 사용자 인터페이스(User interface) 요소들을 의미합니다.
- 사용자가 제어하고 데이터를 확인할 수 있는 영역입니다.
- 뷰에서는 별도의 데이터를 보관하지 않습니다.
- 뷰에서 입력받고 출력해주는 모든 데이터는 모델을 사용해야합니다.
컨트롤러(Controller)
- 모델과 뷰를 관장하는 브릿지(Bridge)역할을 수행합니다.
- 사용자가 버튼을 클릭하면 이벤트는 뷰에서 발생하지만 내부 처리는 컨트롤러에서 관리하는 것입니다.
- 또한, 입력이 발생하면 이에 대한 통지를 담당합니다.
- Model의 데이터를 가공해서 View에 뿌려줘야 한다면? 그 역할 역시 컨트롤러에서 담당합니다.
- 컨트롤러의 임무가 막중해보이지 않나요?
어떻게 비유를 하면 다음과 같겠네요.
[Design Pattern] MVC(Model-View-Controller) 패턴 이야기 #1
[Design Pattern] MVC(Model-View-Controller) 패턴 이야기 #2 (예제 포함)
그렇다면 Repository - Service - Controller 구조란?
전통적인 MVC 패턴과는 약간 다릅니다.
Spring Framework와 관련이 있는 패턴으로, Spring에서 사용되는 MVC 패턴과도 다릅니다.
이것을 주로 계층형 아키텍처 라고 부릅니다.
각 계층은 다음과 같은 역할을 합니다.
Controller(표현 계층):
- 클라이언트로부터 HTTP 요청을 받고, 해당 요청을 적절한 서비스 메소드러 전달하는데 중점을 둡니다.
- 웹의 엔드포인트(URL or URI)를 정의하고, 사용자 인터페이스와 상호작용하며, Service 계층 호출 및 결과를 반환합니다.
- 기능을 노출하는 부분이면? Controller로 가면 됩니다.
- 일반적으로 REST API를 구현하는 데 사용됩니다.
Service(비즈니스 계층):
- 비즈니스 로직을 수행하고, 애플리케이션의 핵심 기능을 제공합니다.
- 비즈니스 규칙을 구현하고, 데이터를 가공하며, 여러 Repository를 조합하여 복잡한 작업을 수행합니다.
- 비즈니스 로직과 관련있는 코드라면? Service 계층으로 가면 됩니다.
- 캡슐화, 트랜잭션 관리 등을 담당합니다.
Repository(데이터 접근 계층):
- 데이터베이스 또는 다른 데이터소스와 상호작용 하고 접근하는 데 중점을 둡니다.
- 데이터의 CRUD 작업을 처리하고 데이터 저장소와 통신합니다.
- 저장, 검색과 관련있는 코드라면? Repository로 가면 됩니다.
- JPA, Hibernate 같은 ORM을 사용하여 구현될 수 있습니다.
- GPT
- Repository Layer: 데이터의 영속성을 관리하는 계층입니다. 이는 데이터베이스와의 직접적인 상호작용을 담당하며, CRUD(Create, Read, Update, Delete) 작업을 수행합니다. JPA, Hibernate 같은 ORM(Object-Relational Mapping) 프레임워크를 사용하여 구현될 수 있습니다.
- Service Layer: 비즈니스 로직을 처리하는 계층입니다. Service 계층은 Repository를 통해 데이터를 조회하거나 변경하고, 이를 바탕으로 비즈니스 요구사항을 충족시키는 로직을 실행합니다. 이 계층은 도메인 로직을 캡슐화하고, 트랜잭션 관리 등을 담당합니다.
- Controller Layer: 사용자의 요청을 처리하고 응답을 반환하는 계층입니다. Controller는 HTTP 요청을 받아 이를 적절한 서비스 메소드에 전달하고, 서비스 계층으로부터 결과를 받아 클라이언트에게 전달합니다. 일반적으로 REST API를 구현하는 데 사용됩니다.
- Repository Layer: **UserRepository**는 사용자 데이터에 접근하기 위한 메소드를 제공합니다. 예를 들어, findById(Long id), save(User user), **delete(User user)**와 같은 메소드를 포함할 수 있습니다.
- Service Layer: **UserService**는 사용자 데이터를 처리하는 비즈니스 로직을 포함합니다. 예를 들어, 사용자를 생성하거나 업데이트, 삭제하는 로직을 포함할 수 있으며, 이러한 로직은 **UserRepository**를 사용하여 데이터베이스와 상호 작용합니다.
- Controller Layer: **UserController**는 클라이언트의 HTTP 요청을 처리합니다. 예를 들어, GET /users/{id} 요청은 특정 사용자의 정보를 검색하고, POST /users 요청은 새로운 사용자를 생성합니다. **UserController**는 이러한 요청을 받아 **UserService**의 적절한 메소드를 호출하고, 결과를 클라이언트에게 반환합니다.
'Software Development > Spring' 카테고리의 다른 글
HTTP, REST API 이해하기 (1) | 2024.01.05 |
---|---|
[Spring] Gradle 이해하기 (1) | 2024.01.03 |
@찐빵1 :: 위기주도학습
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!