Controller, Service, Repository란?

Jae Hun Lee·2023년 2월 8일
0

Controller, Service, Repository로직

  • View에서 전송한 정보를 Controller에서 수신 받은 정보를 Service로 넘김
  • Service에서 비지니스 로직을 수행 후 DB접근이 필요하면 Repository에 요청
  • Repository는 DB에 접근하여 DB에 관련 된 작업을 수행

Controller

  • 사용자의 요청을 처리 한 후 뷰에 모델 객체를 넘겨주는 역할
  • 어떤 처리를 할지 결정을 Service에 넘겨준다 그 후 Service에서 처리한 내용을 Veiw로 넘겨준다

예제코드

@RestController
@RequiredArgsConstructor
public class BoardController {

   private final BoardService boardService;
   @PostMapping("/api/add")
   public Board addBoard(@RequestBody BoardRequestDto boardRequestDto){

       return boardService.addBoard(boardRequestDto);

   }
}
  • @RestController : @RestController는 @Controller에 @ResponseBody가 추가된 것으로 JSON 형태로 객체를 반환
  • @RequiredArgsConstructor : final이 붙거나@NotNull이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션
  • @PostMapping("/api/add") : 특정URL로 호출하여 받아 호출될 메서드를 지정해주는 어노테이션
  • boardService.addBoard(boardRequestDto) : BoardService의 addboard 함수를 호출하고 반환

Service

  • Service는 비지니스 로직을 수행한다.
  • Repository에서 받은 정보를 가공하여 Controller에게 전달한다

에제코드

@Service
@RequiredArgsConstructor
public class BoardService {
    private final BoardRepository boardRepository;
    @Transactional
    public Board addBoard(BoardRequestDto boardRequestDto) {
        Board board = new Board(boardRequestDto);
        boardRepository.save(board);
        return board;

    }
}
  • @Service : Service로 지정하는 어노테이션
  • @Transactional : 선언적 트랜잭션으로 지정하는 어노테이션
  • boardRepository.save(board) : Repository를 통해 DB에 저장한다

Repository

  • Entity에 의해 생성된 DB에 접근하는 메서드 등을 사용하기 위한 인터페이스
  • DB연결, 해제 , 자원관리 등 CRUD 작업을 처리
  • JPA를 이용해 기본적인 CRUD가 가능하다

예제코드

public interface BoardRepository extends JpaRepository<Board,Long> {
        List<Board> findAllByOrderByCreatedAtDesc();
}
  • @Repository : Repository로 지정하는 어노테이션
  • extends JpaRepository<Board,Long> : JPA를 사용하기위해 JpaRepository를 상속받는다 제네릭은 <엔티티 타입, PrimaryKey 타입>이다

참조

https://velog.io/@jybin96/Controller-Service-Repository-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
https://velog.io/@daydream/Spring-Controller-Service-Repository-DAO
https://velog.io/@kimdy0915/Spring-Controller-Service-Repository%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

profile
기록을 남깁니다

0개의 댓글