Spring Boot의 기본 개념 정리

Lee·2023년 5월 10일
0

1. MVC 패턴

MVC(Model-View-Controller) 패턴은 애플리케이션을 세 가지 역할, 즉 모델(Model), 뷰(View), 컨트롤러(Controller)로 구분하는 개발 방법론입니다. 설명은 다음과 같습니다.

Model

애플리케이션의 데이터를 담당합니다. 이는 데이터베이스의 테이블을 나타내는 클래스일 수 있으며, 데이터의 표현과 관련된 모든 로직을 포함합니다.

View

사용자에게 보여지는 부분을 담당합니다. 이는 사용자가 보는 화면을 구성하는 HTML, CSS, JavaScript 등을 포함합니다. View는 Model로부터 데이터를 가져와 사용자에게 보여주는 역할을 합니다.

Controller

사용자의 요청을 처리하고 Model과 View를 연결하는 역할을 합니다. 사용자의 요청에 따라 적절한 Model을 호출하여 데이터를 처리하고, 이 처리 결과를 View에 전달하여 사용자에게 보여줍니다.

2. 주요 컴포넌트

Controller

Controller는 웹 애플리케이션에서 클라이언트의 요청을 처리하고 응답을 반환하는 역할을 합니다. 이는 주로 HTTP 요청을 받아 적절한 서비스 메소드를 호출하고, 그 결과를 클라이언트에게 전달하는 역할을 합니다. Controller는 웹 레이어에 위치하며, Spring MVC 패턴에서의 핵심 요소입니다. 여기서는 주로 DTO(Data Transfer Object)를 사용하여 데이터를 전달합니다.

Service

Service 계층은 비즈니스 로직을 담당합니다. 이는 데이터를 처리하는 로직과 트랜잭션 관리 등의 업무 로직을 포함합니다. Service는 Controller와 DAO 혹은 Repository 사이에서 작동하여 Controller로부터 데이터를 받아 처리하고, 이를 DAO 혹은 Repository를 통해 데이터베이스에 저장하거나 업데이트합니다. 여기서는 주로 Entity를 사용하여 데이터를 처리하며, 변환된 DTO를 Controller에 전달합니다.

Entity

Entity는 데이터베이스의 테이블을 자바 클래스로 표현한 것입니다. Entity 클래스는 테이블의 컬럼과 매핑되는 필드를 가지며, 이를 통해 데이터베이스의 테이블과 자바 코드 사이에서 데이터를 교환합니다.

DAO(Data Access Object)

DAO는 데이터베이스에 접근하여 CRUD(Create, Read, Update, Delete) 작업을 수행하는 역할을 합니다. DAO는 데이터베이스 연결과 관련된 모든 로우 레벨의 세부 작업을 처리하며, 이를 통해 Service 계층과 데이터베이스 사이의 연결을 담당합니다. save(), findById() 등이 여기에 해당됩니다.

Repository

Repository는 DAO와 유사한 역할을 하지만, 보다 고수준의 추상화를 제공합니다. Repository는 도메인 모델의 컬렉션을 다루는 것처럼 데이터 접근을 추상화하며, 스프링 데이터 JPA와 같은 라이브러리에서 구현됩니다.

3. Controller, Service, Entity, Repository 간 실행 흐름

  1. 클라이언트가 웹 서버에 데이터 요청, 이 요청에는 HTTP 메소드(GET, POST, PUT, DELETE 등)와 함께 URI, 데이터 등의 정보 포함
  2. 클라이언트의 요청을 Controller에게 전달, Controller는 클라이언트의 요청을 분석하여 해당 요청을 처리할 수 있는 적절한 Service를 호출
  3. Service는 비즈니스 로직을 처리, 이 때 필요한 데이터는 Repository 혹은 DAO를 통해 데이터베이스에서 가져옴
  4. Repository 혹은 DAO는 데이터베이스에서 필요한 데이터를 조회, 삽입, 업데이트, 삭제하는 등의 작업 수행, Entity가 데이터베이스의 테이블과 맵핑되어 사용됨
  5. 데이터베이스로부터 받은 데이터는 다시 Service를 통해 Controller에게 전달, Service는 데이터를 처리하여 비즈니스 로직에 맞는 응답 결과를 생성
  6. Controller는 Service로부터 받은 응답 결과를 클라이언트에게 전달, 응답 형태는 주로 JSON 형태를 가지며 클라이언트는 이 응답을 받아 필요한 작업을 수행

이렇게 Controller, Service, Entity, Repository 간에 데이터가 이동하면서, 각 계층에서는 자신의 역할에 맞는 작업을 수행합니다. 이러한 분리된 계층 구조는 코드의 관리와 확장을 용이하게 만들어줍니다. 특히, 비즈니스 로직은 주로 Service 계층에서 처리되며, 이는 MVC 패턴에서 Model의 역할에 해당합니다.

4. Controller와 RestController 비교

Spring Boot에서는 두 가지 주요 컨트롤러 유형을 사용하여 웹 애플리케이션을 구축할 수 있습니다.

  • @Controller: 전통적인 웹 애플리케이션을 개발할 때 사용되며, 뷰 템플릿을 반환하는 역할을 수행합니다.
  • @RestController: 주로 RESTful API를 개발할 때 사용되며, 데이터를 직접 반환하는 역할을 수행합니다.

결론

따라서, Spring Boot에서는 MVC 패턴 및 Controller, Service, DAO, Entity, Repository 등 다양한 계층으로 이루어진 아키텍처를 구성하여, 각 계층이 명확히 분리되고, 역할과 책임이 명확히 구분되도록 구성하는 것이 좋습니다. 이러한 구조는 애플리케이션의 유지 보수성, 확장성 및 테스트 용이성을 높일 수 있습니다.

profile
잡다한 개발자

0개의 댓글