스프링부트와 AWS로 혼자 구현하는 웹 서비스 5 - Spring Web Layer

1 minute read

3장 스프링 부트에서 JPA로 데이터베이스를 다뤄보자

👉API를 만들 때 필요한 3개의 클래스

  • Request 데이터를 받을 Dto
  • API 요청을 받을 Controller
  • 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service

Service의 역할은 비지니스 로직을 처리하는 것이 아니다. Service는 트랜잭션, 도메인 간 순서 보장의 역할만 한다. 비지니스 로직을 처리하는 것은 Domain Model이다.

💜Spring 웹 계층

Web Layer

  • 외부 요청과 응답에 대한 전반적인 영역
  • @Controller, @RestController, @Filter… 영역
  • Controllers
  • View templates
  • Exception handlers
  • Filter
  • Controller Advice
  • Interceptor

Service Layer

  • Controller와 Dao(Repository)의 중간 영역
  • @Service, @Transactional… 영역
  • Application services
  • Infrastructure services
  • Transactional services

Repository Layer

  • 데이터베이스와 같은 데이터 저장소에 접근하는 영역
  • Dao(Data Access Object) 영역
  • Repository interfaces
  • Their implementations

Dtos

  • 데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체(DTO)의 영역
  • DTO, Data Transfer Objects
    • 뷰 템플릿 엔진에서 사용될 객체
    • Repository Layer에서 결과로 넘겨준 객체

Domain Model

  • 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해하고 공유할 수 있도록 단순화 시킨 것
  • @Entity 영역
  • Domain services
  • Entities
  • Value objects (VO)

💜TestRestTemplate

import org.springframework.boot.test.web.client.TestRestTemplate;
@Autowired
private TestRestTemplate restTemplate;

//when
ResponseEntity<Long> responseEntity = restTemplate.postForEntity(url, requestDto, Long.class);

💜자잘한 이슈 레포트

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

Test 클래스에 위 어노테이션을 정의하지 않았더니

restTemplate.postForEntity(url, requestDto, Long.class);

에서

restTemplate에 대해서 nullPointerException 발생함


Reference