본문 바로가기

Project

[JPA] API 서비스 흐름 알아보기.

 

1. 서비스 흐름 순서

  1. API 요청 처리 (Controller)
    • 클라이언트로부터 API 요청 수신
    • RequestBody를 DTO 객체로 매핑
    • 해당 DTO를 Service 계층으로 전달
  2. 비즈니스 로직 처리 (Service)
    • Controller로부터 전달받은 DTO로 비즈니스 로직 수행
    • 필요에 따라 DTO → Entity 또는 Entity → DTO 변환
  3. 데이터베이스 작업 (Repository)
    • Service 계층에서 Repository 호출
    • JPA를 통한 데이터베이스 접근 및 작업 수행

 

 

2. 코드 훑어보기

병동에 소속된 근무 요청들을 조회하는 서비스 흐름을 예시로 코드를 살펴보겠습니다.

api 요청을 controller 가 받고 필요한 서비스를 호출합니다.

@GetMapping("/ward/request")
public ResponseEntity<List<WardRequestResponseDto>> readWardRequest(@Auth Member member) {
	List<WardRequestResponseDto> wardRequests = requestService.readWardRequest(member);
	return ResponseEntity.ok(wardRequests);
}

 

해당 service 를 살펴보면 다음과 같습니다.

@Transactional
public List<WardRequestResponseDto> readWardRequest(Member member) {
    Ward myWard = member.getWardMember().getWard();
    return requestRepository.findByWardMember_Ward(myWard)
       .stream()
       .map(WardRequestResponseDto::of)
       .toList();

}

 

로그인한 유저 기준으로 병동을 불러오고, 해당 병동을 wardResponseDto List로 전환하였습니다.

stream에 관한 포스팅은 다음주에 해볼게요!

findByWardMember_Ward 가 어색하게 느껴집니다. 
이는 N+1 문제를 일으킬 수 있어 fetch join 으로 해결해야 하는데요. 관련 포스팅은 다음주에 다뤄볼게요!

오늘은 jpa api 요청 흐름만 다뤄보겠습니다.

Repository 메서드에서는 Ward와의 Join을 통해 Request들을 조회합니다.

이런 일련의 흐름으로 ward에 소속된 request들을 조회하는 과정이 마무리 되었습니다.

정리하자면 , Controller -> Service -> Repository ->DB 의 흐름으로 진행되며, JPA의 영속성 컨텍스트를 통해 db와 service 간의 흐름이 손 쉽게 이뤄짐을 확인할 수 있었습니다.