Server Programming/SpringBoot

Spring Boot - DTO, controller, service 연습

Dev.BeryL 2022. 2. 1. 13:08
728x90

domain 하위에 5개의 Package 생성

  1. entity
  2. repository(DAO)
  3. DTO
  4. controller
  5. service

new > project

Spring Initializr 선택

Project SDK : 8

java version : 8

spring Boot : 2.4.2

Dependency : JPA, Mysql, Spring Web,Lombok

Lombok

자바에서 Model(DTO, VO, Domain) Object 를 만들때, 멤버필드(프로퍼티)에 대한 Getter/Setter, ToString과 멤버필드에 주입하는 생성자를 만드는 코드 등 불필요하게 반복적으로 만드는 코드를 어노테이션을 통해 줄여 주는 라이브러리

 

[자바] 자주 사용되는 Lombok 어노테이션 | Engineering Blog by Dale Seo

 

extends CrudRepository -> JPA CRUD 기능들 사용

PagingAndSortingRepository -> CRUD + Paging, Sorting 기능 제공

CrudRepository

 

CrudRepository (Spring Data Core 2.6.1 API)

Returns all instances of the type T with the given IDs. If some or all ids are not found, no entities are returned for these IDs. Note that the order of elements in the result is not guaranteed.

docs.spring.io

 

**spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC**

**spring.datasource.username=**

**spring.datasource.password=**

**server.servlet.context-path=/productservice**

계층간 데이터 교환을 위한 객체(Java Beans)이다.

DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체.

DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO를 통해 변경되어 전달

DTO는 View를 위한 클래스

변경이 잦은 클래스 -> Entity 클래스와의 분리 이유

Presentation Model

toEntity() 메서드를 통해서 DTO에서 필요한 부분을 이용하여 Entity로 만든다.

또한 Controller Layer에서 Response DTO 형태로 Client에 전달한다.

 

  • @Autowired Repository를 통해 repository의 method를 이용
  • 적절한 Business Logic을 처리한다.
  • DAO로 DB에 접근하고 DTO로 데이터를 전달받은 다음,

Business Logic을 처리해 적절한 데이터를 반환한다.

 

  • 해당 요청 url에 따라 적절한 view와 mapping 처리
  • @Autowired Service를 통해 service의 method를 이용
  • 적절한 ResponseEntity(DTO)를 body에 담아 Client에 반환
  • API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환한다.
  • view(화면) return이 주목적

 

서버와 통신할 수 있는 커맨드 명령어 툴.

웹개발에 매우 많이 사용되고 있는 오픈소스.

curl의 특징으로는 다양한 프로토콜을 지원

curl -X GET localhost:8080/productservice/api/products

curl -X GET localhost:8080/productservice/api/products/1

curl -X POST localhost:8080/productservice/api/products -H "Content-type:application/json " -d "{\"id\":\"14\",\"name\":\"airi\",\"desc\":\"bofit\",\"price\":\"1000.0\"}"

 

참고자료

반응형