[Java] Spring Boot @Controller / @Service / @Repository 개념

Onam Kwon·2022년 10월 31일
0

Java

목록 보기
4/7
post-thumbnail

@Controller / @Service / @Repository 개념

  • 본인은 NodeJS를 통해 서버 공부를 하다 Java의 Spring Boot도 공부를 시작했으며 자바라는 언어 자체도 이때 처음 접했다.
  • 자바의 웹개발 프레임워크를 공부하다 보면 NodeJSexpress 프레임워크와 다르게 스프링이나 스프링 부트는 개념들이 굉장히 세분화 되어있었다.
  • 그 중에서 가장 대표적으로 큰 개념들이 내가봤을땐 @Service @Controller @Repository가 있다. 물론 더있음.
  • 한줄 요약 하자면 세개의 역할은 다음과 같다.
  • @Controller: 웹의 요청과 응답을 담당함, 서비스를 호출하며 작업이 끝나면 리턴값 가져와 클라이언트에 응답.
  • @Service : 서비스 레이어라고도 부르며 대부분의 로직이 이 계층에서 이루어짐,Repository를 통해 데이터를 가져오며 가공 후 컨트롤러에게 전달.
  • @Repository: 서비스에 의해 호출되며 DB관련 CRUD.

@Controller

  • 위의 그림을 보면 프론트의 view에서 요청을 했을때 controller에게 먼저 요청이 가게 된다.
  • 개발자는 서버에 URL마다 각 API를 만들어 두고 클라이언트는 필요한 정보를 적절한 API에 요청만 하면 된다.
  • 컨트롤러란 결국 이런 요청별로 하나씩 맡은 API들을 모아놓은 클래스를 칭한다.
    • 추가로 요청을 받기도 하지만 해당 요청에 대한 작업이 끝났을때 응답도 해당 컨트롤러에서 실시한다.

@Service

  • 비즈니스 로직을 처리함.
  • Repository에서 가져온 정보를 이용해 요청을 처리 후 controller에게 리턴함.
  • controller에서 service없이 바로 repository에 접근하지 않고 굳이 service계층을 하나 더 만들어 정보를 가공하는 이유는 만약 service없이 정보를 직접 CRUD한다면 테이블에 저장된 원본의 정보가 손상될 위험이 있기 때문임.
    • 따라서 원본의 데이터를 사용하는 것이 아닌 DB에서 추출한 정보의 복사본 DTO(Data Transfer Object)를 사용해 service에서 가공함.

@Repository

  • DB에 접근하는 클래스, 그 후 해당 객체를 이용해 데이터를 조작하는 기능을 하는 클래스
  • DB와연결을 할 때 Repository라는 저장소를 두게 됨, 흔히 Model이라고도 하는데 스프링에선 Repository라고 부름.
  • Repository를 구성하는 클래스는 DAO(Data Access Object) DTO(Data Transfer Object) VO(Value Object) 가 있으며 이들을 통해 DB와 연결함.
  • DAO에서 CRUD를 전담하며, DB를 사용하는것은 온전하게 데이터를 보관하고 관리하는 측면에서 유리하기 때문에 프로그램에 필요한 데이터들은 DB에 보관해두고 DTO를 통해 데이터내용을 CRUD 해야함. 따라서 controller의 부담도 줄어든다.
  • Repository계층에서 DAO를 만들어 DB연동을 수행하며 controllerDAO사이에 데이터의 가공이 필요하다면 서비스 계층에서 작업함. controllerDAO간의 중간계층이 하나 더 생성되는데 이것을 service 계층이라 함.
profile
권오남 / Onam Kwon

0개의 댓글