https://github.com/LEEJaeHyeok97/dcInsideClone2
JPA는 엔티티를 사용하므로 API 짜는 것이 기존의 API 짜는 방법과 완전히 다르다.
⇒ API와 템플릿 엔진 렌더링 방식을 분리해야 하는 이유




HTTP: HTML을 주고받는 프로토콜
| METHOD | 의미 | |
|---|---|---|
| GET | Read | 데이터 조회 |
| POST | Create | 요청 데이터 처리, 주로 데이터 등록에 사용 |
| PUT | Update | 데이터 수정(전체) |
| DELETE | Delete | 데이터 삭제 |
| PATCH | Update | 데이터 삭제(부분) |
Template engine Controller
@Controller
@RequiredArgsConstructor
@RequestMapping("/board")
public class BoardController {
@PostMapping("/save")
public String save(@ModelAttribute BoardDTO boardDTO) {
System.out.println("boardDTO = " + boardDTO);
boardService.save(boardDTO);
return "index";
}
}
Api Controller
@RestController
@RequiredArgsConstructor
public class BoardApiController {
private final BoardService boardService; //의존성 주입 -> 유연성, 재사용성
@PostMapping("/api/v1/save")
public CreateBoardResponse save(@RequestBody @Valid BoardDTO boardDTO) {
Long id = boardService.save(boardDTO);
return new CreateBoardResponse(id);
}
@Data
static class CreateBoardResponse {
private Long id;
public CreateBoardResponse(Long id) {
this.id = id;
}
}
}
entity에 직접적으로 접근하는 것들이 많기 때문에 몇가지를 entity에서 수정하려고 하면 전체 api가 빠그러지면서 프로그램 작동에 문제가 생길 가능성이 높다.
이를 방지하기 위해
DTO라는 데이터 전달을 위한 객체를 새로 생성해서 DTO에 데이터를 적재하고 옮겨준다.
그야말로 데이터 전송을 위해 태어난 객체이다.
이를 통해 가장 크게 얻을 수 있는 이점은 API가 빠그러지지 않고 엔티티를 수정할 수 있고 프로그램 안정성을 높힐 수 있다.
{
"firstName": "Kwon",
"lastName": "YoungJae",
"email": "kyoje11@gmail.com"
}
AJAX 는 단순히 데이터만이 아니라 JavaScript 그 자체도 전달할 수 있다. 이 말은 JSON데이터라고 해서 받았는데 단순 데이터가 아니라 JavaScript가 될 수도 있고, 그게 실행 될 수 있다는 것이다. (데이터인 줄 알고 받았는데 악성 스크립트가 될 수 있다.)