6주차: Restful API, Entity & Dto

이재혁·2023년 7월 7일

6주차 부터 개인 게시판 / 쇼핑몰 만들기를 시작합니다. 8주차까지 자신만의 프로젝트를 완성시키는 것이 목표입니다!

https://github.com/LEEJaeHyeok97/dcInsideClone2

인프런 김영한 스프링부트-JPA-API개발-성능최적화(미리보기)

JPA는 엔티티를 사용하므로 API 짜는 것이 기존의 API 짜는 방법과 완전히 다르다.

API 개발 기본

  • postman 활용

회원 등록 API

  • 템플릿 엔진을 사용해서 렌더링하는 컨트롤러와
  • API 타입의 컨트롤러를 분리를 한다.
  • API랑 화면이랑은 공통처리 해야하는 요소가 너무 다르다.
  • 템플릿 엔진에서 에러는 공통 에러 HTML이 나와야하지만
  • API는 공통 에러용 API JSON 스펙이 나가야한다.

⇒ API와 템플릿 엔진 렌더링 방식을 분리해야 하는 이유

  • JSON 데이터 날리기

  • 결과(DB)

@Validation 으로 검증

  • Validation으로 데이터의 중복을 검증할 수 있다

DTO를 사용해야 한다

  • 엔티티를 그냥 사용하면 컬럼 이름을 변경해야할 소요가 있을 때 변경해버리면 프로그램이 작동하지 않는다.
  • 즉, 엔티티를 막 변경하면 안된다.
  • API 스펙을 위한 별도의 DTO(Data Transfer Object)를 만들어서 사용해야 한다.
  • 큰 장애가 발생하기 떄문이다.

@Data란?

  • 롬복이 제공하는 태그이다.
  • @Getter / @Setter, @ToString, @EqualsAndHashCode와 @RequiredArgsConstructor 를 합쳐놓은 종합 선물 세트라고 할 수 있다.

postman을 사용해보자

  • JSON 상차 성공

  • JSON 상차 실패

http 메서드

HTTP: HTML을 주고받는 프로토콜

METHOD의미
GETRead데이터 조회
POSTCreate요청 데이터 처리, 주로 데이터 등록에 사용
PUTUpdate데이터 수정(전체)
DELETEDelete데이터 삭제
PATCHUpdate데이터 삭제(부분)

restful한 api란?

  • Representational State Transfer의 줄임말
  • HTTP URI를 통해 자원(명사로 쓴다)을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
  • ROA(자원 기반의 구조) 설계의 중심에 자원이 있고 http method를 통해 자원을 처리하는 아키텍처이다.
  • 장점
    • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다
    • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도를 쉽게 파악할 수 있다
  • 단점
    • 표준이 존재하지 않는다
    • http method가 제한적이다

@RestController 사용하기

  • @RestController // @Controller + @ResponseBody <= (데이터 자체를 JSON의 xml로 바로 보내고자 할 때 쓴다.

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와 dto(data transfer object)

entity에 직접적으로 접근하는 것들이 많기 때문에 몇가지를 entity에서 수정하려고 하면 전체 api가 빠그러지면서 프로그램 작동에 문제가 생길 가능성이 높다.

이를 방지하기 위해

DTO라는 데이터 전달을 위한 객체를 새로 생성해서 DTO에 데이터를 적재하고 옮겨준다.

그야말로 데이터 전송을 위해 태어난 객체이다.

이를 통해 가장 크게 얻을 수 있는 이점은 API가 빠그러지지 않고 엔티티를 수정할 수 있고 프로그램 안정성을 높힐 수 있다.

JSON

  • JSON이란 JavaScript Object Notation의 줄임말
  • • JavaScript Object Notation라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환 형식
  • • JSON은 데이터 포맷일 뿐이며 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다.
  • • 서버와 클라이언트 간의 교류에서 일반적으로 많이 사용된다.
  • JSON 형식
{
  "firstName": "Kwon",
  "lastName": "YoungJae",
  "email": "kyoje11@gmail.com"
}
  • 문제점

AJAX 는 단순히 데이터만이 아니라 JavaScript 그 자체도 전달할 수 있다. 이 말은 JSON데이터라고 해서 받았는데 단순 데이터가 아니라 JavaScript가 될 수도 있고, 그게 실행 될 수 있다는 것이다. (데이터인 줄 알고 받았는데 악성 스크립트가 될 수 있다.)

profile
서비스기업 가고 싶은 대학생

0개의 댓글