[Spring] Controller, Service, Repository를 알아보자

Doyeon·2023년 2월 6일
0
post-thumbnail

Controller

  • 사용자의 요청을 처리한 후, 지정된 뷰에 모델 객체를 넘겨준다.
    • 클라이언트의 요청에 대해 어떤 처리를 할지 Service로 넘겨준다.
    • Service에서 처리된 내용을 View로 넘겨준다.
  • URL마다 처리해야 할 기능을 정해놓은 API를 모아놓은 클래스이다.
    • 클라이언트가 API로 요청을 보내면, 서버에서 기능을 처리한 후 API를 통해 결과를 보내준다.
  • 사용자와 상호작용을 처리하는 Presentation 계층에 속해 있다.

Controller 예시 코드

@RestController // #1
@RequiredArgsConstructor
public class BoardController {

    private final BoardService boardService;  // #2

		@PostMapping("/api/post")  // #3
		public BoardResponseDto createPost(@RequestBody BoardRequestsDto requestsDto) {
		    return boardService.createPost(requestsDto); // #4
		}
}
  • #1 : Controller로 지정해주는 어노테이션
    • @Controller : 주로 View 반환, @ResponseBody 와 사용하면 @RestController 와 같은 기능
    • @RestController : @Controller + @ResponseBody, 주로 JSON/XML 형태로 객체 데이터 반환
  • #2 : 각각의 레이어는 일반적으로 자신과 인접한 레이어와 직접 소통한다.
    • Controller는 Service와 인접하므로 BoardService 객체를 가지고, 서비스에서 받아온 데이터를 전달하거나, 서비스 로직을 호출할 수 있다.
    • #4 : boardService 객체의 createPost 함수를 호출하고, 리턴값으로 데이터를 받아와 클라이언트로 반환한다.
  • #3 : 특정 요청(URL)에 호출될 메서드를 지정해주는 어노테이션

Service

  • 비즈니스 로직을 수행한다.
  • Repository에서 받아온 데이터를 가공하여 Controller에게 보내준다.
  • 서비스 / 시스템의 핵심 로직인 Domain(Business or Service) 계층에 속해 있다.

Service 예시 코드

@Service  // #1
@RequiredArgsConstructor
public class BoardService {

    private final BoardRepository boardRepository; // #2

		@Transactional
		public BoardResponseDto createPost(BoardRequestsDto requestsDto) {
		    Board board = new Board(requestsDto);
		    boardRepository.save(board); // #3
		    return new BoardResponseDto(board);
		}

}
  • #1 : @Service - Service로 지정해주는 어노테이션
  • #2 : Service와 인접한 계층은 Repository이므로, BoardReposiotry 객체를 통해 데이터를 데이터베이스에 저장하거나, 데이터베이스로부터 데이터를 가져온다.
    • #3 : boardRepository 객체의 save 함수를 호출해 board 객체 데이터를 데이터베이스에 저장하도록 한다.

Repository

  • Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스
  • 받은 정보를 데이터베이스에 저장하고 조회하는 기능을 수행한다.
  • 주어진 JPA 인터페이스 메소드를 활용하여 기본적인 CRUD가 가능하다.
  • 데이터베이스를 관리하고 데이터 소스와 소통하는 Data Access(Persistence) 계층에 속해 있다.

Repository 예시 코드

@Repository  // #1
public interface BoardRepository extends JpaRepository<Board, Long> { // #2
}
  • #1 : @Repository - Reposiotry로 지정해주는 어노테이션
  • #2 : JPA를 사용해서 데이터베이스에 테이블 정보를 생성, 저장, 조회할 것이므로 JpaRepository 를 상속받는다. 이 때 제네릭스 타입은 <엔티티 타입, PK 타입> 이다.

[참고]
https://velog.io/@seungho1216/Spring-BootController-Service-Repository에-대하여
https://velog.io/@daydream/Spring-Controller-Service-Repository-DAO

profile
🔥

0개의 댓글