내일배움캠프 Spring 20일차 TIL

Skadi·2024년 1월 19일
0

스프링 입문

1. 역할 분리하기

컨트롤러(Controller)

역할: 클라이언트로부터의 HTTP 요청을 받아 해당 요청에 대한 비즈니스 로직을 실행하고, 그 결과를 클라이언트에 응답으로 반환하는 역할을 수행합니다.
설명: 컨트롤러는 웹 애플리케이션의 진입점이며, 사용자와 상호작용하는 인터페이스 역할을 합니다. 클라이언트로부터의 요청을 받아 해당 요청을 처리하기 위해 서비스와 상호작용하고, 결과를 HTTP 응답으로 반환합니다.

서비스(Service)

역할: 비즈니스 로직을 처리하고, 데이터의 가공 및 조작을 담당합니다.
설명: 서비스는 컨트롤러로부터 받은 요청에 대한 실질적인 비즈니스 로직을 수행합니다. 이는 데이터베이스의 조작, 외부 시스템과의 상호작용, 계산 등을 포함합니다. 여러 컨트롤러에서 공통으로 사용되는 로직이나 비즈니스 규칙을 추상화하여 제공합니다.

리포지토리(Repository)

역할: 데이터베이스와의 상호작용을 담당하며, 데이터에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행합니다.
설명: 리포지토리는 데이터베이스와의 통신을 담당합니다. 데이터의 영속성(persistence)을 유지하고 데이터베이스에서 데이터를 조회하거나 갱신하는 등의 작업을 수행합니다. 주로 엔티티(Entity) 객체와 데이터베이스 간의 매핑을 처리하고, 데이터 액세스 계층을 구현합니다.

우리가 보통 스프링 프로젝트를 진행하면 기본적인 흐름이 있을 것이다

시작
Client -> Controller -> Service -> Repository -> DB
| |
Client <- Controller <- Service <- Repository <- DB

하지만 이러한 구성은 강한 결합을 만들게 된다.

강한결합이 생기면 의존성이 강해져 하나의 컨트롤러에 하나의 서비스를 가지게 된다. 그러면 5개의 컨트롤러가 생기면 5개의 서비스, 5개의 리포지토리가 생기게 된다.

하지만 제어의 역전(IOC), 의존성 주입(DI)이 이를 해결해준다

지금까지 제어의 흐름이 Controller ⇒ Service ⇒ Repository 였다면

스프링에서 @Service와 @Repository 어노테이션을 사용하여 클래스를 스프링 빈으로 등록하면, 스프링 컨테이너는 해당 빈을 관리하게 되며 의존성 주입(Dependency Injection)을 자동으로 수행합니다.

DI 즉, 의존성 주입을 통해 제어의 흐름을 Repository ⇒ Service ⇒ Controller 로 역전함으로써 효율적인 코드로 바뀌었습니다

0개의 댓글