[prismagram] [BackEnd] 1. 프로젝트 생성, 셋업하기

업데이트:

모든 내용은 MacOS Catalina 기준으로 작성되었습니다

프로젝트 셋업하기

1. 프로젝트 생성

  • Github에서 Repository 만들기
  • .gitignore: Node
  • yarn init 혹은 npm init 한뒤 Git 연동.

2. GraphQL 서버 구축을 위한 라이브러리 설치

  • graphql-yoga

    yarn add graphql-yoga
    
  • nodemon -D (src/server.js에 있는 코드를 실행하는 script를 작성하는데 필요합니다.)

    yarn add nodemon -D
    
  • babel-cli -D

    yarn add babel-cli -D
    

3. server.js 생성

  • src 폴더 내부에 server.js 파일을 생성합니다.

4. package.json 수정

  • main: index.js 제거
  • yarn dev를 실행하면 nodemon –exec babel-node src/server.js를 실행하게 합니다

    "scripts" : {
    "dev" : "nodemon --exec babel-node src/server.js"
    }
    
  • nodemon을 실행할 때마다 babel-node로 src폴더의 server.js 파일을 실행하게 됩니다.
  • nodemon은 저장할 때마다 실행을 해주는 도구입니다. 서버를 껐다가 킬 필요가 없어지게 해주는 도구입니다.
  • babel은 코드를 호환성 있게 만들어줍니다.
  • .babelrc 파일을 만든뒤 node가 import를 인식할 수 있도록 아래와 같은 코드를 입력합니다.

    {
    "presets": ["@babel/preset-env"]
    }
    
  • @babel/node와 @babel/preset-env, @babel/core를 설치하여 babel을 세팅합니다.

5. 환경변수 설정하기

로컬서버를 사용하기위한 PORT와 같은 환경변수를 설정해주는 작업을 해야합니다. 이러한 환경변수들은 따로 .env파일을 통해 관리합니다.

  • .env파일을 src 폴더에 만든 뒤 설정할 포트 PORT = 4000을 선언합니다. 모든 환경변수들은 .env에 선언하는 것이 좋습니다.

    PORT = 4000
    
  • server.js에서 PORT 변수를 만듭니다.

    require("dotenv").config()
    const PORT = process.env.PORT || 4000;
    

이때, .config()에서 아무것도 입력하지 않은 경우에는 .env 파일로 인식하여 실제 .env파일에는 아무내용도 입력하지 않는 것 같습니다.

6. typeDefs, Resolvers 만들기

서버를 만들기 위해서는 query를 생성해야하는데, query를 생성하기 위해서는 typeDefs과 Resolvers가 필요합니다. 그 Type과 Resolvers를 Server.js안에 우선 만들어보도록 하겠습니다.

//typeDefs
const typeDefs = `type Query{ hello : String! }`
//resolvers
const resolvers = {
Query : {
hello : () => "hello"
}
}
const server = new GraphQLServer({typeDefs,resolvers});
server.start({port : PORT}, () => console.log(`server is running http://localhost:${PORT}`));

7. 마무리

yarn dev를 하면 server is running http://localhost:4000 라는 메시지가 뜨며 서버가 동작합니다.

이슈

Requires Babel “^7.0.0-0”, but was loaded with “6.26.3”.
If you are sure you have a compatible version of @babel/core, it is likely that something in your build process is loading the wrong version.

에러 발생. -> yarn global remove babel-cli로 해결

댓글남기기