config, controller, dto, entity, repository, service이란?
스프링 프레임워크를 사용하여 게시판을 만들 때, config, controller, dto, entity, repository, service는 각각 특정 역할을 하는 구성 요소이다. 이들은 모두 스프링의 MVC(Model-View-Controller) 아키텍처와 관련이 있으며, 소프트웨어 설계 원칙인 SOLID를 따르는 데 도움을 준다.
1. Config(Configuration)
- 설정 파일이나 클래스를 의미한다.
- 스프링 애플리케이션의 설정을 관리하며, 데이터베이스 연결, 보안 설정, CORS 정책 등을 정의한다.
2. Controller
- 사용자의 요청을 받아처리하는 부분이다.
- HTTP 요청을 받아, 요청에 맞는 서비스 로직을 호출하고, 결과를 뷰에 전달한다.
3. DTO(Data Transfer Object)
- 계층 간 데이터 교환을 위해 사용되는 객체이다.
- 예를 들어, 사용자로부터 받은 데이터를 서비스나 데이터베이스 계층으로 전달하거나, 그 반대의 경우에 사용된다.
4. Entity
- 데이터베이스 테이블에 대응하는 자바 클래스를 의미한다.
- JPA(Java Persistence API)를 사용하여, 데이터베이스의 테이블과 매핑되며, 데이터의 영구저장을 관리한다.
5. Repository
- Entity에 대한 데이터 접근 계층이다.
- 데이터베이스와의 상호작용을 추상화하며, CRUD(Create, Read, Update, Delete) 작업을 손쉽게 할 수 있도록 도와준다.
6. Service
- 비즈니스 로직을 수행하는 부분이다.
- Controller가 받은 요청을 처리하는 로직을 담당하며, 필요한 데이터를 Repository로부터 가져오거나, 데이터를 처리한 후 결과를 Controller에게 반환한다.
MVC(Model-View-Controller)
MVC는 소프트웨어를 설계할 때 사용되는 아키텍처 패턴으로, 애플리케이션을 세 가지 주요 구성 요소로 분리한다.
1. Model
- 데이터와 비즈니스로직을 처리한다.
- 애플리케이션의 데이터 구조를 정의하고, 데이터베이스와의 상호작용 및 기타 비즈니스 로직을 관리한다.
2. View
- 사용자 인터페이스를 담당한다.
- 사용자에게 데이터를 시작적으로 표시하고, 사용자의 입력을 받는다. HTML,CSS,JavaScript 등을 사용하여 구현될 수 있다.
3. Controller
- 사용자의 입력을 받고, Model과 View를 연결한다.
- 사용자의 요청에 따라 Model을 조작하고, 그 결과를 View에 반영한다.
SOLID
SOLID는 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 나타낸다.
1. S - Single Responsibility Principle (단일 책임 원칙)
- 한 클래스는 하나의 책임만 가져야 한다.
- 클래스가 변경되어야 하는 이유는 오직 하나여야 한다.
2. O - Open/Closed Principle (개방/폐쇄 원칙)
- 소프트웨어 구성 요소(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 수정에 대해서는 닫혀 있어야 한다.
- 기존의 코드를 변경하지 않고도, 기능을 확장할 수 있어야 한다.
3. L - Liskov Substitution Principle (리스코프 치환 원칙)
- 부모 클래스 대신에 자식 클래스를 사용해도 시스템이 문제없이 동작해야 한다.
- 상속받은 클래스는 부모 클래스의 기능을 유지해야 한다.
4. I - Interface Segregation Principle (인터페이스 분리 원칙)
- 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 않아야 한다.
- 클라이언트는 자신이 필요하지 않은 메서드에 의존하면 안 된다.
5. D - Dependency Inversion Principle (의존성 역전 원칙)
- 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 이들 모두는 추상화에 의존해야 한다.
- 추상화는 세부 사항에 의존해서는 안 되며, 세부 사항은 추상화에 의존해야 한다.
나의 궁금증
Config, Controller, DTO, Entity, Repository, Service와 MVC, SOLID는 무슨 연관일까?
MVC와의 관련성
-
Config(Configuration)
- MVC 패턴에서 Config는 직접적으로 Model, View, 또는 Controller 중 어느 하나에 속한다기보다는, 이 세 구성 요소가 효과적으로 작동하도록 지원하는 역할을 한다.
- Config는 애플리케이션 전반에 걸쳐 사용되는 다양한 설정들을 관리한다. 이는 데이터 베이스 연결, 보안 설정, MVC 구성, 의존성 주입 등을 포함할 수 있다.
- Config는 다양한 구성 요소들이 서로 올바르게 통합될 수 있도록 하는 중심점 역할을 한다. 예를 들어, Controller가 올바른 Service와 연결되고, Service가 필요한 Repository를 사용할 수 있도록 설정한다.
-
Controller
- MVC의 Controller 부분에 해당한다.
- 사용자의 요청을 받아 처리하고, 적절한 서비스 로직을 호출하여 결과를 View에 반환한다.
-
DTO(Data Transfer Object)
- MVC 모델에서는 직접적으로 분류되지 않지만, 주로 Controller와 Model 사이에서 데이터 전송을 담당한다.
- 사용자의 요청 데이터를 캡슐화하여 서비스나 데이터베이스 계층으로 전달하는 역할을 한다.
-
Entity
- MVC의 Model부분에 속한다.
- 데이터벵스의 테이블과 매핑되어 데이터를 영구적으로 저장하고 관리하는 역할을 한다.
-
Repository
- Model의 일부로 볼 수 있으며, 데이터베이스와의 상호작용을 추상화한다.
- 데이터 접근 로직을 캡슐화하여, Entity와 데이터베이스 간의 CRUD작업을 담당한다.
-
Service
- MVC에서 명시적으로 분류되지는 않지만, Model의 비즈니스 로직을 처리하는 부분으로 볼 수 있다.
- 비즈니스 로직을 수행하고, Repository를 통해 데이터를 처리한다.