[Spring] Layered Architecture

JiKwang Jeong·2022년 4월 26일
0

REST API

REST 제약조건

  • 클라이언트-서버
  • 상태가 없는
  • 캐시되는 데이터
  • 일관적인 인터페이스
  • 레이어 시스템
  • 코드-온-디멘드 (선택)

Annotation

  • @RequestMapping("test")
    URL 경로에 매핑
  • @GetMapping, @PutMapping, @PostMapping, @DeleteMapping
    HTTP 메서드 (GET, UPDATE, POST, DELETE)에 매핑
  • @PathVariable
    URI의 경로로 넘어오는 값을 변수로 받을 수 있음
  • @RequestParam
    요청 매개변수로 넘어오는 값을 변수로 받을 수 있음
  • @RequestBody
    반환하고자 하는 리소스가 복잡할 때 사용 (오브젝트)
  • @RestController 내부는 크게 두 어노테이션의 조합으로 이뤄져 있다.
    하나는 @Controller, 다른 하나는 @ResponseBody다.
    • @Controller
      스프링이 이 클래스의 오브젝트를 알아서 생성하고 다른 오브젝트들과의 의존성을 연결한다.
    • @ResponseBody
      이 클래스의 메서드가 리턴하는 것은 웹서비스의 ResponseBody라는 뜻이다.
      즉, 메서드가 리턴할 때 스프링은 리턴된 오브젝트를 JSON 형태로 바꾸고 HttpResponse에 담아 반환한다는 뜻이다.
      스프링이 오브젝트를 JSON으로 바꾸는 것처럼 오브젝트를 저장하거나 네트워크를 통해 전달할 수 있도록 변환하는 것을 직렬화(Serialization)라고 하고, 반대의 작업을 역직렬화(Deserialization)이라 한다.
  • @Service
    스테레오타입 어노테이션으로 내부에 @Component 어노테이션을 갖고 있다.
    단지 이 클래스는 스프링 컴포넌트이며 기능적으로는 비즈니스 로직을 수행하는 서비스 레이어임을 알려주는 어노테이션이다.

퍼시스턴스 레이어 : Spring Data JPA

  • JDBC 드라이버
    자바에서 데이터베이스에 연결할 수 있도록 도와주는 라이브러리
  • JPA란 자바에서 데이터베이스 접근, 저장, 관리에 필요한 스펙. 이 스펙을 구현하는 구현자를 JPA Provider라고 하는데 대표적으로 Hibernate가 있다.

    자바 클래스를 엔티티로 정의할 때 주의해야 할 점

    1. 매개변수가 없는 생성자, NoArgsConstructor 필요
    2. Getter/Setter 필요
    3. 기본 키 (Primary Key) 지정
  • Repository는 인터페이스인데 어떻게 TodoRepository를 구현하는 클래스가 없이도 동작할까?
    스프링은 MethodInterceptor라는 AOP 인터페이스를 사용한다. MethodInterceptor는 우리가 JpaRepository의 메서드를 부를 때마다 이 메서드 콜을 가로채 간다.(Spring AOP APIs). 가로챈 메서드의 메서드 이름을 확인하고 메서드 이름을 기반으로 쿼리를 작성한다.

정리
레이어드 아키텍처
1. 컨트롤러 레이어
HTTP 요청과 응답을 어떻게 넘겨받고 리턴하느냐, 즉 외부 세계와 통신하는 규약을 정의.
2. 서비스 레이어
HTTP나 데이터베이스 같은 외부 컴포넌트로부터 추상화돼 우리가 온전히 비즈니스 로직에만 집중할 수 있게 한다.
3. 퍼시스턴스 레이어
데이터베이스와 통신하며 필요한 쿼리를 보내고 해석해 엔티티 오브젝트로 변환해 주는 역할을 한다.

profile
기억보다 기록, 난리보다 정리

0개의 댓글