mongoose의 자체 메서드를 쓰자.
API 를 개발하다 보면 몽고디비를 건드려야 할 때가 많다. 그럴때 mongoose 라는 라이브러리를 쓰면 참 편하다.
몽고디비에 없는 스키마라는 개념을 도입해서 데이터 관리에 안정성을 더해 준다.
스키마는 일종의 데이터가 저장되는 방식의 모델이다.
데이터를 디비에 저장하면 그 하나하나의 단위를 도큐먼트라고 부른다. 그 도큐먼트의 구성방식을 스키마가 잡아 준다. 아래 코드를 보면 postSchema 가 그러한 모델이다. 게시글(post) 하나가 생성될 때마다 도큐먼트가 어떻게 저장되는지 알 수 있다.
도큐먼트에 postId, user, password, title, content 필드가 생긴다. 필드별로 그 값의 type 도 정의되고, 도큐먼트 생성을 위해서 그 필드 값이 반드시 필요한지(required)도 규정된다.
const postsSchema = new mongoose.Schema({
postId: {
type: Number,
required: true,
},
user: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
title: {
type: String,
required: true,
},
content: {
type: String,
required: true,
},
});
서론이 길어졌다. 이러한 mongoose의 자체 메서드를 쓰면 코드가 훨씬 간결해진다. 객체와 도큐먼트를 1:1로 매칭해 주는 Object Document Mapping 도 메서드를 쓰다보면 자동으로 활용하게 된다.
feat 1. Restful
Restful API 는 로이 필딩(Roy Fielding)이 자신의 2000년 박사 학위 논문에 정의한 네트워크 소프트웨어 아키텍처다.
Restful API 라는게 뭘까? 일단 Representational State Transfer 이다. 자원의 상태(state)를 주고받을 때 표현적으로( representational) 주고받는 API라는 것이다. 개발자들이 잘 알아볼 수 있다. 예를 들자면 아래와 같은 요청-응답 구조가 있다.
클라이언트에서 http://localhost:3000/post/2/commnets 라는 url로 게시글(post) 2번의 모든 댓글(comments)을 요청하는 것이다. url에 이상한 단어가 들어가는 것보다 이해하기 쉽다. 표현적이다.
이러한 RESTful API 가 갖고있는 몇몇 특징을 정리해 본다.
- Client-Server : 클라이언트와 서버로 분리되어야하며 서로 의존성이 없어야 한다. 자원이 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트가 된다.
- Stateless(무상태성) : 상태 정보를 따로 저장하지 않으며, 이용자가 누구인지 혹은 어디서 접근하는지와 관계 없이 결과가 무조건 동일해야 한다.
- HTTP 메서드를 사용한다.
POST | 자원 생성(POST) |
GET | 자원 조회(Read) |
PUT | 자원 수정(Update) |
DELETE | 자원 삭제(Delete) |
HEAD | header 정보 조회 |
관련해 자세한 내용은 아래 AWS의 설명을 참조바란다.
https://aws.amazon.com/ko/what-is/restful-api/
feat 2. package.json
node.js 프로젝트를 진행하다 보면 npm으로 패키지들을 설치하게 된다. 그 패키지들의 정보가 담겨 있는 파일이 package.json이다. 하나의 프로젝트를 깃헙에 올려서 여러 개발자들이 함께 작업하려면 패키지들을 사람들 간에 통일해 줘야 한다. 패키지 버전이 다르면 개발 환경이 달라져서 개발자가 A는 가능한 작업이 B에게는 불가능해질 수 있다.
그래서 하나의 같은 package.json 을 개발자들이 사용해서 npm install 을 진행하면 '어느정도' 같은 패키지를 사용할 수 있다.
feat 3. package-lock.json
package-lock.json 은 더 정확한 패키지들의 정보를 담아줄 수 있다. package.json 은 패키지들 버젼의 범위를 저장해 주지만 package-lock.json 은 정확한 버젼을 저장한다. 그리고 패키지들간의 의존성 트리를 만들어 준다고 한다. 개발자들 간에 더 정확하고 논리적인 패키지 공유가 가능한 것이다.
'항해99' 카테고리의 다른 글
EC2를 https 로 배포할때 참고. (0) | 2023.05.27 |
---|---|
WIL: 시간 투자 = 개인적 삶 내려놓기? feat. ORM (0) | 2023.05.11 |
WIL: 알고리즘 풀이는 퍼즐 맞추기일까? feat. node.js, Express and Middleware (0) | 2023.04.20 |
2023. 4. 12. 부트캠프 프로그래밍 주차를 마치는 어떤 1인에 대한 평가 (1) | 2023.04.14 |
WIL: 명상, 요가가 더 필요하다. feat. HTML 간단요약 (0) | 2023.04.13 |