분류 전체보기 218

[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를 이용할 때에도 다양한 패키지를 사용할 수 있는데, 여기서는..

[JavaScript] call, apply, bind

this를 사용하다 보면 call, apply, bind라는 메서드가 자주 등장한다. 이번에는 이 메서드들에 관하여 설명하겠다. call 모든 함수는 call 메서드를 가지고 있다. 함수의 call 메서드를 호출할 때 인자로 객체를 전달하면 그 객체를 함수의 this에 할당하고 함수를 호출한다. 예시는 다음과 같다. function hello(){ console.log(`Hello ${this}!`); } hello.call('Mike'); // Hello Mike! 다음과 같이 hello라는 함수의 call 메서드를 호출하고 인자로 Mike라는 문자열을 전달하면 hello라는 함수의 this에 Mike가 할당하여 호출함을 확인하였다. 만약 함수가 인자를 전달받아야 한다면 다음과 같이 call 메서드에 ..

코이라멘 야탑점 (야탑역 라멘)

야탑역에 위치한 코이라멘을 방문했습니다 역에서 가깝네요 영업시간 매일 오전 11시 ~ 오후 9시 30분 (주문 9시 마감) 매월 1, 3, 5주 일요일은 휴무입니다 입구를 보면 진짜 일본에 있는 라멘집 같아요 배달의 민족 주문도 되고 포장도 가능해요 내부는 일반적인 라멘집들처럼 좁은 편이구요 혼자 먹기에도 괜찮은 듯해요 메뉴는 다양하진 않아요 라멘, 차슈 덮밥, 소바를 판매하고 있네요 여러 이벤트도 진행하고 있으니 참여해보세요 차슈 덮밥입니다 보통 차슈 덮밥 먹으면 좀 느끼했는데 엄청 담백하네요 특히 간장 계란이 진짜 맛있어요 오리지날 라멘입니다 국물이 엄청 진하고 고소해요 라멘 맛집이네요 다들 치킨 가라아게를 많이 드시는데 저는 교자를 주문했어요 원래도 교자를 좋아하지만 너무 맛있어서 교자를 하나 더 ..

아랑솥뚜껑 잠원본점 (신사역, 잠원역 솥뚜껑 삼겹살)

신사역과 잠원역 근처에 위치한 아랑솥뚜껑을 방문했습니다 역에서는 조금 거리가 있어서 10분정도 걸어야하네요 내부는 테이블도 많고 넓어요 회식 장소로도 괜찮겠네요 영업시간 매일 오전 11시 20분 ~ 새벽 2시 메뉴입니다 소시지까지 같이 파는 세트도 있지만 삼겹살이 먹고 싶어 그냥 삽겹살을 주문했어요 밑반찬과 계란찜입니다 계란찜 비주얼이 대박이네요 소금과 콩가루입니다 콩가룽 찍어 먹는 거도 별미네요 솥뚜껑 정말 오랜만이네요 옛날 감성으로 삼겹살을 구워먹었어요 삼겹살과 항정살을 주문했어요 이렇게 노릇하게 구워서 다른 야채들과 먹었어요 고사리도 구웠는데 되게 맛있어요 삼겹살과 항정살은 무난하네요 마지막으로 미나리와 파인애플과 함께 구웠어요 파인애플보다는 미나리가 잘 어울리네요 후식으로 냉면을 주문했어요 후식 ..