Controller, Service, Repository에 대한 이해

Younseo·2022년 10월 9일
0

Spring

목록 보기
2/4

Controller, Service, Repository의 구조


어노테이션부터 이야기를 하면 전부 component에서 파생되었고 각각 역할을 명시할 수 있도록 이름을 다르게 사용한것이다.(spring의 bean이다)

1. Controller

Controller는 클라이언트의 주문(Request)을 받고 음식(Response)을 대접하는 웨이터의 역할이다.

다르게 말하자면, 사용자의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할을 한다.

많은 종류의 서비스를 한 클래스로 만들어서 처리하는 것이 아닌, Controller라는 중간 제어자를 만들어 역할에 따라 분리하여 설계하면 개발 비용 및 유지보수 비용이 대폭 감소되기 때문에 Controller를 사용한다.

(1) @Controller(Spring MVC Controller)

주로 View를 반환하기 위해 사용, @ResponseBody 어노테이션과 함께 사용하면, RestController와 같은 기능을 수행한다.

(2) @RestController(Spring Restful Controller)

주로 JSON/XML 형태로 객체 데이터의 반환을 목적으로 한다. (이번 과제에서 사용한 controller)

Controller/RestController의 차이에 대해 조금 더 알아 보면 좋을 것 같다.

2. Service

Service는 Controller가 받은 주문을 확인하고 이에 맞는 요리를 하는 역할이다. Repository에서 재료(정보)를 가져오고 주문에 맞게 요리하여 Controller에게 음식(결과값)을 내어준다.

이렇게 Service가 알맞은 정보를 가공하는 과정을 “비즈니스 로직을 수행한다” 라고 이야기 한다.

Service가 비즈니스 로직을 수행하고, DB에 접근하는 Repository를 이용하여 결과값을 받아온다.

3. Repository

Repository는 음식을 만들수 있는 재료를 보관해 모아두는 창고의 문 같은 역할이다.

이 문을 작동 시키기 위해서는 JPA가 사용된다.

Entity에 의해 생성된 ‘DB에 접근하는 매서드’를 사용하기 위한 인터페이스이다.

@Entity라는 어노테이션을 사용하여 DB 구조를 만들어 CRUD를 하면, 이 것을 어떻게 할 것인지 정의해 주는 계층이라고 말할 수 있다.

public interface Team9Repository extends JpaRepository<Team9, Long> {

}
// 여기에서 Team9은 클래스명이고, Long은 이 Entity Class의 PK의 자료형이다. 
// (ex: Primary Key가 Long id라면, id의 자료형 Long을 적으면 된다.)

DAO (추가개념)

DAO는 MySQL 서버에 접근하여 SQL문을 실행할 수 있는 객체이다.

Spring Data JPA는 인터페이스를 만드는 것만으로도 Entity (@Entity) 클래스에 대한 CREATE, SELECT, DELETE, INSERT를 실행할 수 있게 해준다. 뿐만 아닌, 인터페이스에 method를 선언하는 것으로도 가벼운 Query를 수행하는 코드를 만드는 것과 동등한 작업을 수행한다.

JPA만 사용하면 DAO는 굳이 필요없다고 생각할 수 있으나, 복잡도가 높아지면 JPA만을 이용하여 DB에 접근하는 것에 한계가 있다고 한다. JPA만 사용해서 만드는 것이 SQL을 직접 사용해 개발하는 것보다 수행능력이 떨어지는 상황이 오게 되는 것이다. (그래서 SQL도 공부하라고 강의 준듯,,,,?)

이미지 출처 코딩하는 어린콩님

0개의 댓글