(TIL) 2022-04-16

데이터베이스에 저장할 때 save 와 update 두가지가 방법이 있는데 이 둘의 차이는 return 값을 전달받는지에 대한 차이인 것 같다

save

const studentsInfo = await this.studentsInfoRepository.save({
  id: id,
  name: name,
  grade: grade,
  phone: phone,
});

save는 결과에 대한 return 값을 변수로(위 코드에서는 studentsInfo) 받아올 수 있다. 그래서 그 변수를 다시 return 하면 프론트엔드로 보내줄 수 있다.

update

await this.studentsInfoRepository.update({
  id: id,
  name: name,
  grade: grade,
  phone: phone,
});

update는 결과에 대한 값이 update가 성공했는지 안했는지 정도의 값만 받을 수 있다고 한다(?)

create + save

const studentsInfo = await this.studentsInfoRepository.create({
  id: id,
  name: name,
  grade: grade,
  phone: phone,
});
//create 만으로는 실제 DB에 기록되지 않는다

await this.studentsInfoRepository.save(studentsInfo)

이런 방법도 가능하다


GraphQL 을 RESTApi 방식으로 사용할 때의 특징

  1. RESTApi 는 원하는 데이터를 가져올 때마다 각각의 엔드포인트로 한번씩 요청을 했어야 했다.
axios.get("https://웹페이지주소/:students")
axios.get("https://웹페이지주소/:examScore")
axios.get("https://웹페이지주소/:examSchedule")

하지만 GraphQL 으로 요청할 때는 단 한번의 요청만으로도 여러개의 Api를 동작하게 할 수 있다.

axios.post("https://웹페이지주소/graphql",
  { query: `query {
              fetchStudents
              {
                  id
                  name
                  age
              }
			  fetchExamScore
              {
                  name
                  score
              }
              fetchExamSchedule{
              {
                  date
                  exam
              }
           }`
})
  1. (위에 코드참고) RESTApi는 요청하는 주소의 엔드포인트가 항상 다르지만, GraphQL은 /graphql 하나만으로 통일된다

  2. (위에 코드참고) RESTApi는 요청하는 방식이 (GET, POST, UPDATE, DELETE..) 다양하지만, GraphQL은 POST 하나로 통일된다

  3. GraphQL은 요청이 실패하더라도 항상 성공(200)상태로 표시된다. (내부 각각의 요청들은 따로 성공인지 실패인지 구별할 수 있다)

  • GraphQL은 RESTApi 의
    UnderFetching 문제점(1번 예시처럼 한번의 요청만으로는 필요한 데이터를 모두 처리할 수 없는 것),
    OverFetching 문제점(RestApi는 요청으로 받는 데이터중에 원하는 것만 골라서 받을 수 없고 데이터 전체를 받아올 수 밖에 없다. 그래서 리소스낭비가 생기지만, GraphQL은 필요한 데이터만 골라서 받아올 수 있다)
    을 해결했다

좋은 웹페이지 즐겨찾기