SpringData HATEOAS

more·2023년 7월 27일
0

JPA 심화 2일차

목록 보기
5/5

HATEOAS

Hypermedia As The Engine of Application State
-> 다음 요청을 위한 하이퍼링크가 제공되어야 한다

  • 예시
{
  "data": {
    "id": 1000,
    "name": "게시글 1",
    "content": "HAL JSON을 이용한 예시 JSON",
    "self": "http://localhost:8080/api/post/1000", // 호출한 api 주소
    "profile": "http://localhost:8080/docs#query-article", // 호출한 api 문서
    "next": "http://localhost:8080/api/post/1001", // 다음 post를 조회 api 주소
    "comment": "http://localhost:8080/api/post/comment", // post의 댓글 달기 api 주소
    "save": "http://localhost:8080/api/feed/post/1000", // post을 내 피드로 저장 api 주소
  },
}

HATEOAS 를 SpringData JPA 페이징에 적용

  1. HATEOAS 의존성 추가 (spring-boot-starter-hateoas)
    // SpringBoot HATEOAS 의존성 추가
    implementation 'org.springframework.boot:spring-boot-starter-hateoas'
  2. 핸들러 매개변수로 PagedResourcesAssembler 넣고 PagedModel 로 응답
    -> PagedResourcesAssembler : Page 객체를 PagedModel로 변경시키는데 사용
  • 예시

    @RestController
    public class ChannelController {
    
      @Autowired
      ChannelRepository channelRepository;
    
      @GetMapping("/channels")
      public PagedModel<User> getUsers(Pageable pageable, PagedResourcesAssembler<User> assembler) {
        var all = channelRepository.findAll(pageable);
        return assembler.toModel(all);
      }
    
    }
  • !! JPA 로 쿼리를 짜기 매우 어려운데 왜 다들 JPA만 쓰나요? !!

    • JPA로 많이 넘어간 까닭은, 데이터모델이 단순해진 탓
    • 대신 데이터 흐름이 매우 정교해짐
    • DDD(도메인 주도 개발)이 중심이 되어가고 있기 때문
      -> DDD: 도메인의 깊은 이해를 바탕으로 만들어진 도메인 모델을 중심으로 소프트웨어를 개발, 설계하는 접근법
    • MSA를위해 도메인 중심으로 모듈이 분리될 수 있는 구조로 프로젝트들이 발전해오고 있다.
      -> MSA (Micro Service Architecture) : 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법
profile
조금 더

0개의 댓글