말은 거창하게 서비스 아키텍처라고 사용하였다.
- Model/Entitt와 DTO클래스
- Controller, Service, Persistence 클래스
- 테스팅용 REST API
에 대해 실습을 하면서 설명은 설명을 위주로하는 카테고리에서 하도록 하겠다.
오 프로젝트에서는 모델과 엔티티를 한 클래스에 구현한다.
따라서 모델은 비즈니스 데이터를 담는 역할과 데이터베이스의 테이블과 스키마를 표현하는 두 역할을 한다.
큰 애플리 케이션의 경우 모델과 엔티티를 따로 구현하지만 우리는 규모가 작으므로 합쳐서 구현하는 것이다.
이 모델/엔티티의 이름은 TodoEntity이고, Todo리스트의 한 아이템에 해당한다.
TodoEntity를 작성하기에 앞서 model 패키지 com.unoSpringBoot.study.model을 만들어주었다
클래스이름은 TodoEntity로 지정해주었다.
package com.unoSpringBoot.study.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TodoEntity {
private String id; // 오브젝트의 아이디
private String userId; //이 오브젝를 생성한 아이디
private String title; //Todo타이틀
private boolean done; //true - todo 를 완료 , 미완료했을때
}
서비스가 요청을 처리하고 클라이언트로 반환할 때 모델 자체를 그대로 리턴하는 경우는 별로 없다. 보통은 데이터를
전달하는데 사용하는 오브젝트인 Data Transfer Object - DTO 로 변호한해 리턴한다.
이유는 비즈니스로직을 캡슐화하기 위해서다.
com.unoSpringBoot.study.DTO 라는 패키지를 하나 생성해주자
package com.unoSpringBoot.study.DTO;
import com.unoSpringBoot.study.model.TodoEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TodoDTO {
private String id;
private String title;
private boolean done;
public TodoDTO(final TodoEntity entity) {
this.id = entity.getId();
this.title = entity.getTitle();
this.done = entity.isDone();
}
}
사용자는 이 클래스를 이용해 todo 아이템을 생성, 수정, 삭제할 예정이다.
이제 HTTP 응답으로 사용할 DTO가 필요하다. DTO패키지 아래에 ResponseDTO를 생성해서 다루도록하자
package com.unoSpringBoot.study.DTO;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ResponseDTO<T> {
private String error;
private List<T> data;
}
TodoDTO뿐만 아니라 이후 다른 모델의 DTO도 ResponseDTO를 이용해 리턴 할 수 있도록 자바 Generic을 이용했다.
또 이 프로젝트의 경우 Todo를 하나만 반환하는 경우보다 리스트를 반환하는 경우가 많으므로 데이터를 리스트로 반환하도록 작성했다.
REST API
HTTP는 GET/POST/PUT/DELETE/OPTIONS 등 과 같은 메서드와 URI를 이용해 서버에 http요청을 보낼수 있다.
테스트를 위해 com.unoSpringBoot.study에 클래스를 만들었다. 이것이 작동하는지만 보면된다.
package com.unoSpringBoot.study;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class TestController {
@GetMapping
public String testController() {
return "Hello world";
}
}
헬로월드!
겟요청이다.이것은
그래서 헬로월드가 뜨는것이다.
저번시간에 설치한 포스트맨을 이용하여 테스팅하면 HTTP메서드를 확실히 구분할 수 있다.
@GetMapping("/testGetMapping")
public String testControllerWithPath() {
return "Hello world!! TestGetMapping";
}
도 한번 추가해주고 포스트맨으로 돌려보자
다음엔 매개변수를 넘겨받는 방법에 대해 알아보자
'Spring boot 프로젝트 기록 > 1. 백엔드 개발' 카테고리의 다른 글
기본 쿼리와 쿼리 작성 방법 (0) | 2021.11.26 |
---|---|
서비스 레이어 : 비즈니스 로직 (0) | 2021.11.24 |
매개변수를 넘겨받는 방법 (0) | 2021.11.23 |
실행, 라이브러리추가, 포스트맨 API추가 (0) | 2021.11.18 |
1. 백엔드 개발 환경설정 (0) | 2021.11.17 |
댓글