재밌고 어려운 IT를 이해해보자~!
schema 생성 및 회원 가입 기능 제작 본문
const mongoose = require('mongoose');
const userSchema = mongoose.Schema({
name: {
type: String,
maxlength: 50
},
email: {
type: String,
Trim: true,
unique: 1,
},
password: {
type: String,
minlength: 5
},
lastname: {
type: String,
maxlength: 50
},
role : { //관리자 or 유저
type: Number,
default: 0
},
image: String,
token: { // 유효성 관리
type: String,
},
tokenExp: { // 토큰의 유효기간
type: Number
}
})
const User = mongoose.model('User',userSchema)
module.exports = {User}
※깃 프로토콜차이
HTTPS
HTTPS를 사용하면 Push, Pull 동작 시 사용자의 계정 정보(User Name, Password)를 통해 인증을 하여 Push, Pull을 동작한다.
하지만, 매번 해당 동작을 할 때 마다 계속 계정 정보를 입력해줘야 하는데, 이때 Git에서 제공하는 Credential 저장소의 기능을 이용하면 계정정보를 캐싱해두어 매번 입력할 필요 없이 자동으로 입력되도록 할 수 있다.
꼭 위의 방법이 아니더라도 각 OS의 환경에서 제공하는 기능(Mac일 경우 Keychain 시스템, Window일 경우 Windows Credential Store)을 통해 각각 계정 정보를 저장 및 활용이 가능하여 매번 로그인을 하지 않아도 된다.
SSH
해당 프로토콜을 사용을 한다면 각 원격 저장소의 설정 화면으로 가서 SSH Key를 등록해 주어야한다. 간단한 보물상자를 열 때 열쇠가 필요한 것 처럼, 해당 저장소에 대한 SSH Key가 있어야 합니다.
만약 본인이 Git의 관리자라면 본인이 저장한 공개키를 사용하면 되고, 관리자가 아니라면 관리자에게 접근이 가능한 키를 받도록 하자.
즉,
https
단순하게 사용자의 id, password로 인증하는것
ssh
내 컴퓨터의 있는 퍼블릭 key로 인증하는것
npm install body-parser --save 를통해 클라이언트에서 서버로 데이터 전달
데이터를 클라이언트로 보내기 위해서는 postman 활용
POSTMAN 이란?
API 개발을 보다 빠르고 쉽게 구현 할 수 있도록 도와 줌
개발된 API를 테스트하여 문서화 또는 공유 할 수 있도록 해주는 플랫폼
POSTMAN을 왜 사용할까?
URL을 통해 테스트는 한계가 있음
실제 개발 경우, 응답 요청과 응답 받아 화면에 출력하는 등의 작업이 길어짐
Authorization이나 Header, Body를 수정하는건 더더욱 제한이 많음
하지만 포스트맨은 해당 작업을 할 수 있도록 인터페이스를 구축해둔 툴이기 때문에 쉽게 사용가능
OS에 상관없고 어디서나 사용가능
계정을 보유하고 있다면, 내가 요청한 Request 히스토리, 테스트한 환경 그대로 저장되어
언제 어디서나 내가 작업했던 환경이 구축됨 :D
//회원 가입 할때 필요한 정보들을 cliend에서 가져오면
//그것들을 데이터 베이스에 넣어준다.
app.post('/register', (req, res) => {
//req.body에 bodyParser를 통해 객체가 들어있음
const user = new User(req.body)
user.save((err, userInfo) => {
if (err) return res.json({ success: false, err })
return res.status(200).json({
success: true
})
})
})
수업시간엔 이 코드를 활용했으나 ..!
Mongoose6부터 callback 문법이 사용되지 않는다 .......ㅠ-ㅠ
수업시간동안 나오는 코드들에 대해서 callback을 사용하지 않거나 버전을 다운그레이드 시켜야 할 것 같다!
콜백 함수란 파라미터로 일반적인 변수나 값을 전달하는 것이 아닌 함수 자체를 전달하는 것을 말한다고 보면 된다!!
수정된 코드
app.post('/register', async (req, res) => {
//회원가입시 필요 정보를 client에서 가져오면
//데이터베이스에 삽입한다
//body parser를 통해 body에 담긴 정보를 가져온다
const user = new User(req.body)
//mongoDB 메서드, user모델에 저장
const result = await user.save().then(()=>{
res.status(200).json({
success: true
})
}).catch((err)=>{
res.json({ success: false, err })
})
})
이 코드는 promise 코드라 불리는 것 같다.
callback vs promise
callback을 사용하면 비동기 로직의 결과값을 처리하기 위해서는 callback안에서만 처리를 해야하고, 콜백 밖에서는 비동기에서 온 값을 알 수가 없다. 하지만 promise를 사용하면 비동기에에서 온 값이 promise 객체에 저장되기 때문에 코드 작성이 용이
{
"name" : "johnahna123",
"email": "johnahn123@naver.com",
"password": "1234567"
}
회원가입 완료~
어렵다!
'React, Node Js' 카테고리의 다른 글
로그인 기능 및 토큰생성 (0) | 2024.05.05 |
---|---|
Bcrypt (0) | 2024.05.02 |
Node Mon, 비밀 설정 정보 관리 (0) | 2024.05.01 |
MongoDB, Mongoose (0) | 2024.04.29 |
Node.js, Express.js (0) | 2024.04.29 |