Spring Boot - DTO, controller, service 연습
domain 하위에 5개의 Package 생성
- entity
- repository(DAO)
- DTO
- controller
- 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 기능 제공
**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\"}"