개인 개발 프로젝트 55

[Graphql, MongoDB 실습] 9. N:M 관계

N:M 관계 MongoDB를 이용할 때 N:M 관계를 구현하는 방법을 설명하겠다. 간단한 예시를 들어 설명하겠다. Post라는 collection이 있고 Tag라는 collection이 있을 때, Post와 Tag가 N:M으로 존재해야 하는 예시이다. Post에 Tag의 Id를 배열로 저장하는 방법 vs Tag에 Post의 Id를 배열로 저장하는 방법 // Post { _id : 1, name : '음식 게시물', tagIds : [1, 2] } // Tag { _id : 1, name : '일상' } { _id : 2, name : '맛집' } 전자의 예시는 다음과 같다. Post에 TagIds 속성이 존재하고, 그 속성에는 Post에서 사용하는 Tag의 Id를 배열로 저장한다. // Post { _i..

[Graphql, MongoDB 실습] 8. 1:N 관계 예시 (2)

Booking에 User의 Id를 저장하는 방법 구현 이번에는 User와 Booking이 1:N 관계일 때 Booking에 User의 Id를 저장하는 예시를 구현한다. models/user2.js const mongoose = require('mongoose'); const { Schema } = mongoose; const user2Schema = new Schema({ name: { type: String, required: true }, createdAt: { type: Date, default: Date.now, }, }); module.exports = mongoose.model('User2', user2Schema); models/booking2.js const mongoose = requir..

[Graphql, MongoDB 실습] 7. 1:N 관계 예시 (1)

User에 Booking의 Id를 배열로 저장하는 방법 구현 이번에는 User와 Booking이 1:N 관계일 때 User에 Booking의 Id를 배열로 저장하는 예시를 구현한다. models/user1.js const mongoose = require('mongoose'); const { Schema } = mongoose; const user1Schema = new Schema({ name: { type: String, required: true }, booking1Ids: [{ type:Schema.Types.ObjectId, ref:'Booking1' }], createdAt: { type: Date, default: Date.now, }, }); module.exports = mongoose...

[Graphql, MongoDB 실습] 6. 1:N 관계

1:N 관계 MongoDB를 이용할 때 1:N 관계를 구현하는 방법은 다양한다. 크게 세 가지 방법으로 나뉜다. 간단한 예시를 통해 설명하겠다. User이라는 collection이 있고 Booking이라는 collection이 있을 때, User과 Booking이 1:N으로 존재해야 하는 예시이다. User에 Booking을 저장하는 방법 // User { _id : 1, name : 'Kim', bookings : [ { _id : 1, name : 'Booking restaurant' }, { _id : 2, name : 'Booking Movie' }] } 이 경우에 예시는 다음과 같다. User의 bookings 속성에 Booking을 배열로 저장한다. 이 방법은 User의 Booking을 조회할..

[Graphql, MongoDB 실습] 5. Graphql Mutation with Transaction

Mutation with Transaction API에서 Transaction이란 데이터를 조작하는 로직들이 모두 성공하거나 모두 실패하도록 묶은 하나의 단위를 의미한다. 이전 글에서는 content를 하나만 저장하는 muataion을 작성하고 실행했었다. 만약 서로 다른 content 두 개를 모두 저장해야 하는 mutation을 작성한다면 저장하는 두 로직을 하나의 transaction에 묶어야 한다. 이렇게 되면 한 content를 저장하고 나머지 한 content를 저장하기 전에 에러가 발생하면 이전에 content를 저장한 행위를 취소시킨다. 이번 글에서는 Mongoose를 이용하여 mutation에 transaction을 구현하겠다. Mongoose의 스키마 코드는 이전 글과 동일하다. 이전 ..

[Graphql, MongoDB 실습] 4. Graphql Mutation

Graphql Mutation 이전까지는 resolver에서 쿼리와 객체의 요소에 대한 쿼리를 처리하기 위한 로직을 작성하였다. 쿼리는 데이터를 조회하는 기능을 담당하고 데이터를 조작하는 로직은 resolver의 muataion 객체에 작성한다. 이를 실습하기 위해 다음과 같이 코드를 작성한다. muation 부분을 제외하면 이전 예제와 거의 동일하다. models/content.js const mongoose = require('mongoose'); const { Schema } = mongoose; const contentSchema = new Schema({ title: { type: String, required: true }, content: { type: String, required: tru..

[Graphql, MongoDB 실습] 3. Graphql 기본 쿼리 예제

Database의 document 생성 tutorial database에 poeple이라는 document를 생성하고 다음과 같이 데이터를 넣는다. 총 세 개의 collection을 넣었고 각 collection은 id, friendsIds, name 속성을 가진다. _id는 자동으로 부여되며 friendIds에는 친구의 _id값을 배열로 저장한다. 위의 예제에서 Mike의 친구는 Bill이고, Bill의 친구는 Mike와 Andy이고, Andy의 친구는 Bill이다. 이 document를 바탕으로 전체 사람 목록, 사람의 속성, 사람의 friendIds를 이용하여 다시 사람을 불러오는 쿼리를 작성한다. mongoose Schema 작성 MongoDB의 people이라는 document에 저장된 데이터를..

[Graphql, MongoDB 실습] 2. MongoDB 연동

MongoDB Atlas 설정 데이터베이스는 MongoDB를 이용하였고 MongoDB Atlas 클라우드 서비스를 이용하였다. MongoDB Atlas에서 Database를 생성한다. 여기서는 tutorial이라는 database를 생성하였다. 애플리케이션에서 MongoDB를 다음과 같이 설정하여 연결한다. Database를 생성하고 계정을 설정하는 설명은 생략하였다. Database를 생성하면 화면은 다음과 같다. App.js const { ApolloServer } = require('apollo-server'); const typeDefs = require('./graphql/schema'); const resolvers = require('./graphql/resolvers'); const dot..

[Graphql, MongoDB 실습] 1. 프로젝트 소개 및 설정

프로젝트 소개 API를 개발하는데 두 가지 방법이 있다. Restful API를 개발하는 방법과 Graphql API를 개발하는 방법이다. 이번 프로젝트에서는 Graphql를 이용하여 API를 개발하는 실습을 진행한다. Graphql에 관한 자세한 설명보다는 여러 상황에서 API를 개발하는 실습에 관하여 설명하겠다. 데이터 베이스는 MongoDB를 사용한다. Graphql, MongoDB, Mongoose에 관한 기초적인 내용은 알고 있는 상태라고 가정하고 설명하며 상세한 설명은 생략하도록 하겠다. 애플리케이션 설정 Graphql API는 다양한 언어를 이용하여 개발할 수 있는데, 여기서는 Node.js를 이용하여 개발한다. 또한 Node.js를 이용할 때에도 다양한 패키지를 사용할 수 있는데, 여기서는..

[공룡 점프 게임] 7. 마무리

마지막으로 수정하고 웹 게임을 배포하고 마무리한다. 기간 프로젝트 개발 기간 : 2019년 12월 16일 ~ 2019년 12월 30일 (2주) 블로그 정리 기간 : 2020년 02월 01일 ~2020년 02월 02일 (2일) 리액트 웹 게임 배포 링크 https://jb-game-jump.herokuapp.com/ Jump Game jb-game-jump.herokuapp.com 리액트 웹 게임 깃 주소 https://github.com/Jongbeom2/game-jump Jongbeom2/game-jump Contribute to Jongbeom2/game-jump development by creating an account on GitHub. github.com [전체 글] [공룡 점프 게임] 7...