DTO
- form 데이터를 받아오는데 사용한다
- 프론트에서 form에서 input이나 textarea 등 데이터를 입력하는 태그의 name 속성이 dto의 필드랑 일치해야 함
- 컨트롤러의 파라미터로 DTO 객체를 받아주면 된다
- DTO를 Entity 객체로 변환할 toEntity 메소드를 선언하기도 함
Model, View
@Controller
public class FirstController {
@GetMapping("/hi")
public String nicetoMeetYou(Model model){
model.addAttribute("username","몽이");
return "greetings";
}
}
- Model 클래스는 따로 만들 필요 없이 import 해서 사용
- Model에 값을 전달해 view에서 사용 가능함
- greetings가 Controller가 반환하는 view
- RestController를 사용하면 RestController는 data 자체를 반환하니까 이런 형태로 사용하지 않음
- 프론트 프레임워크와 RestController를 같이 사용하면 아래와 같이 작동함
- 프론트 서버에서 백엔드 서버로 요청 보냄
- 백엔드 서버의 RestController는 프론트로 data 반환
- 프론트 서버에서 data를 받아서 뷰페이지에 표시함
Controller : 클라이언트로부터 요청을 받는다
View : 최종페이지를 만들어줌
Model : 최종페이지에 쓰일 데이터를 View에게 전달
Entity
- 자바 객체를 DB가 이해하게 하는 역할이다
- DTO를 DB에서 이해하도록 만든 객체이므로 DTO의 필드는 기본적으로 갖는다
- 추가적으로 id 값등을 가짐. id값은 @GeneratedValue로 자동생성하는 경우가 많다. 이럴 때는 생성자에 id 부분은 null을 전달해줘야 함
- 활용하는 어노테이션으로는 @Entity, @Column, @Id, @GeneratedValue 등
Repository
- Entity를 DB에 저장한다
- JPA에서 제공하는 인터페이스를 구현해 리조피토리를 만든다
- 아래 예시에서는 CrudRepository를 구현했는데 JpaRepository를 구현할 때가 많음
package com.example.firstproject.repository;
import com.example.firstproject.entity.Article;
import org.springframework.data.repository.CrudRepository;
public interface ArticleRepository extends CrudRepository<Article, Long> {
}
- 템플릿 문법이고 연동할 Entity 클래스 이름과 Entity 클래스의 id 자료형인 Long을 템플릿 인자로 전달해줌
- DB 연동에 기본적으로 필요한 메소드들 save() 등.. 은 모두 인터페이스에서 제공함
- 필요할 경우 인터페이스에 쿼리문을 활용해 메소드 선언 가능
- 컨트롤러의 필드로 리포지토리를 선언하는데 DI(의존성 주입)으로 객체를 직접 생성하지 않고 알아서 생성되게 함
- 리포지토리 필드에 @Autowired 사용
- 컨트롤러 클래스에 @RequiredArgsConstructor 사용. 대신 이 경우에는 멤버에 final 선언을 해줘야함
Controller
- 클라이언트의 요청을 처리한다
- 어떤 요청인지에 따라 다른 Mapping 어노테이션을 사용함
- @PathVariable로 요청 url의 값을 변수로 사용 가능함
@GetMapping("/articles/{id}")
public String show(@PathVariable Long id){
log.info("id = "+id);
return "";
}
Service
- 컨트롤러와 리포지토리 중간에 위치한다
- 컨트롤러가 웨이터, 서비스가 셰프, 리포지토리가 보조 셰프
- 클라이언트가 메뉴를 요청하면 컨트롤러가 주문을 받아서 서비스에게 전달하고 서비스가 요리를 만들고 필요한 재료는 리포지토리가 가져온다.