백엔드 서버, DB 공부하기, 프로젝트 준비

나만무 7일차 TIL

정글일지 47

날짜

2023년 6월 7일 수요일

계획

  • node.js 서버 구현 공부
  • mongoDB 연결해보기
  • skyoffice 서버 공부
  • 게임 기능 공부
  • 프로젝트 계정 깃허브 개설
  • 프로젝트 아이디어 재설정 및 구체화
  • 출제용 알고리즘 문제 DB 찾아보기

TIL

Node.js & express.js 를 통한 서버 구현 및 MongoDB 연결

terminal (나는 window라 powershell)에서 원하는 디렉토리에 npm init을 실행시켜 package.json 파일을 만들었다. 내용에는 내가 할 project에 관한 정보가 나와있고 내가 가져온 dependencies(mongoose, express 같은)가 나와있다. scripts에 "start":"node index.js" 코드를 추가시켜 index.js가 처음 시작되는 파일로 설정하였다.

VScode terminal에서 npm install express --save를 작동시켜 express도 node_modules 와 package-lock.json도 추가시켰다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const express = require("express");
const app = express();
const port = 3000;

const mongoose = require("mongoose");
mongoose
  .connect(
    "mongodb+srv://junsoopooh:<Password>@junsu.zkfxbyd.mongodb.net/?retryWrites=true&w=majority",
    {}
  )
  .then(() => console.log("MongoDB Connected..."))
  .catch((err) => console.log(err));

app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});

index.js를 다음과 같이 작성하였다. 부분엔 내 mongoDB cluster의 비밀번호를 작성하면 된다. port는 어떤 숫자로 해도 무방하다. 내 localhost:3000 페이지엔 'Hello world!'가 나타나고 MongoDB와 연결되면 콘솔창에 'MongoDB Connected...'가 나타나게 된다.

MongoDB에서 복사해온 코드 뒤에 userNewUrlParser: true, useUnifiedTopology:true, useCreateIndex: true, useFindAndModify: false를 추가해야 했는데, 현재 버전에서는 지원하지 않는다고 한다. 실행 시 오류가 발생해서 삭제하였더니 잘 작동되었다.

npm run start를 통해 실행시켰다.

Model 과 Schema

Schema

작성한것이 누구인지, 작성을 할 때 post의 이름이 무엇인지, 이름의 type은? 이름의 최고 길이는? 등 하나하나 성질과 정보를 지정해준다.

Model

Schema를 감싸주는 역할을 한다.

내 프로젝트 폴더 내의 models폴더를 만들고 내부에 User.js 파일을 만들었다. 이 내부에서 Schema를 설정해 주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const mongoose = require("mongoose");
const userSchema = mongoose.Schema({
  name: {
    type: String,
    maxlength: 50,
  },
  email: {
    type: String,
    trim: true, // trim은 문자열의 빈 공백을 없애주는 역할
    unique: 1,
  },
  password: {
    type: String,
    maxlength: 50,
  },
  lastname: {
    type: String,
    maxlength: 50,
  },
  role: {
    type: Number,
    default: 0,
  },
  image: String,
  token: {
    type: String,
  },
  tokenExp: {
    type: Number,
  },
});
const User = mongoose.model("User", userSchema);
module.exports = { User }; // 다른 파일에서도 쓸 수 있게 해줌

결과

  • 아이디어 방향은 어느정도 가닥이 잡혔다. 말해도 상관은 없지만.. 우선 적지 않겠다. 나쁘지 않아 보이지만, 내일 코치님에게 피드백을 받아보면 어찌될지 모른다. 최대한 구체적으로 정하고 가야 값진 피드백을 받을 수 있을듯
  • express와 mongoDB의 연결이 생각보다 어렵다. 빨리 체득해야 하는데.. 서버를 만든다는 개념이 뭔지 아직 가닥을 못잡고 있다.
  • 우리가 이용할 오픈소스나 api도 못 보고 있다. 속도를 올려야 할텐데 걱정이다.

회고

중이염은 아프고, 팀 프로젝트는 잘 안풀리고, 스스로 못난게 너무 미워서 스트레스가 많다. 그 스트레스로 인해 팀원들이 피해를 받는 것 같다. 코딩은 못해도 리더 역할은 잘 할 수 있을 거라 했지만 전혀 아닌것 같아 참 참혹한 심경이다. 팀원들과 개인적으로 얘기하는 시간을 가지려고 노력한다. 생각보다 내가 내 머릿속 내용을 온전하게 전달하지 못하고 있는 것, 당연하다고 생각한 것에서 발생한 오해들로 인해 시간 낭비가 많다. 최대한 많이 뱉고, 기록하고, 말해서 서로가 동일하게 이해하고 있도록 노력해야겠다.