220114 TIL

25tutmmu·2022년 1월 14일

백엔드 수업

Graphql

오늘은 Grapgql api docs 만드는 법을 배웠다.
거기에 저번에 만들어 두었던 휴대폰 인증번호 보내기함수를 이용했다.
Graphql의 라이브러리인 Apollo server를 이용했다.

graphql에서는 Type과 Resolvers가 중요하다
type에서 어떤 타입인지 정해주고

const typeDefs = gql`
  type BoardReturn {
    number: Int
    writer: String
    title: String
    contents: String
  }

resolvers에서` 내용을 리턴해준다
Resolver란 클라이언트로부터 요청된 Query 혹은 Mutation에 대해 반환할 결과를 생성하는 로직이다. GraphQL 서버가 Resolver를 찾아 Query와 Mutation에 해당하는 함수를 실행합니다.
Query나 Mutation에서 넘어온 인자가 객체의 형태로 전달되기 때문에 ( _, { arg1, arg2, ... } )의 형태로 인자를 넘겨받아 사용하는 특징이 있다.

const resolvers = {
  Query: {
    // 데이터베이스에서 데이터를 꺼내오는 로직 
    fetchBoards: (_, args) => {
      return  [
            {number:1, writer: "철수", title:"제목", contents: "내용"},
            {number:2, writer: "철수", title:"제목", contents: "내용"},
            {number:3, writer: "철수", title:"제목", contents: "내용"},
            {number:4, writer: "철수", title:"제목", contents: "내용"}
    ]
    }
  }

types

Scalar - 단일 값을 저장합니다.
Object - 데이터의 객체 구조를 보여준다
Query - 특정 타입들의 entry point 역할
Mutation - 데이터를 조작하는 entry point 역할
Enum - 열거형 타입. 목록 중에 선택해야 하는 상황에서 사용
List - []를 사용해서 정의할 수 있다
Non-Nullable - 정의된 타입 뒤에 ! 를 붙여서 표현한다. null이 될 수 없으므로 무조건 값을 리턴해줘야 한다.

// const { ApolloServer, gql } = require('apollo-server');
import { ApolloServer, gql } from 'apollo-server'
import{ sendTokenTOSMS, getToken, checkValidationPhone } from './phone.js'

// The GraphQL schema
const typeDefs = gql`
  type BoardReturn {
    number: Int
    writer: String
    title: String
    contents: String
  }

  input CreateBoardInput {
    writer: String
    title: String
    contents: String
  }

  type Query {
    # fetchBoards: BoardReturn => 객체 1개의미 
    fetchBoards: [BoardReturn] # =>배열안의  1개 이상
  }
  type Mutation {
    createBoard(CreateBoardInput : CreateBoardInput!) : String
    creatTokenOfPhone( myphone : String ) : String
  }
`;

// A map of functions which return data for the schema.
onst resolvers = {
  Query: {
    // 데이터베이스에서 데이터를 꺼내오는 로직 
    fetchBoards: (_, args) => {
      return  [
            {number:1, writer: "철수", title:"제목", contents: "내용"},
            {number:2, writer: "철수", title:"제목", contents: "내용"},
            {number:3, writer: "철수", title:"제목", contents: "내용"},
            {number:4, writer: "철수", title:"제목", contents: "내용"}
    ]
    }
  },
  Mutation: {
    // 데이터베이스에서 데이터를 저장하는 로직 
    createBoard: (parentm,args, context, info) => {
      
      return "등록성공"

    },
    
    creatTokenOfPhone: (_, args) => {
      const myphone = args.myphone
      const isValid = checkValidationPhone(args.myphone)
        if(isValid) {
            // 2. 핸드폰 토큰 6자리 만들기
            const myToken = getToken(4)
           // 3. 핸드폰 번호에 토큰 전송하기
            
            sendTokenTOSMS(args.myphone, myToken)
        }
        return "인증완료"
      }
  }

};

const server = new ApolloServer({
  typeDefs,
  resolvers
  
});

server.listen(4000).then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

Mutation 휴대폰인증을 위해 필요한 number을 필요하다고 쓰고
CreateBoardInput을 통해 여러가지 프로퍼티를 쓰는 법도 배웠다 .

apollo - server와 express를 써볼수있어 좋았다

알고리즘

? 연산자 if문과 비슷함
데이터 타입을 알 수 있는 매소드
type of
※isNaN(undefined) - true
Number.isNaN(undefined) - false

큰 수 구하는 방법

function bigNum( str ){
  console.log( Math.max(...[1,2,3,4,5,6,]))
}

0개의 댓글