백엔드감자's Today I Learned : '회원가입 및 조회' 기능추가.

BE_{Potato.}·2023년 2월 21일
0
post-thumbnail

🧐 오늘 '당근쉬알'에 대한 깃허브 레포지토리를 파고, DB 테이블 별 JOIN과 회원가입 및 회원목록 조회API를 만들었다.
req.body에 각 항목들을 찾아와 등록해주는 방식이고 이건 할만했는데,
비밀번호를 DB에 그냥 저장하면 안되서 Bcrypt 라이브러리를 이용해서 코드를 작성하는데 이 부분에서 문제가 좀 있었다.

original: Error: Data too long for column 'password' at row 1

자꾸 이 에러가 나를 괴롭혔다. 그래서 user 모델의 string 글자제한을 100으로 바꿨는데, 그래도 똑같았다.
멘붕이 왔는게 구글링해보니 이런 결과가 나왔다.
app.js에 싱크부분을 포스:true로 해야 모델구조 바꾼것이 적용이 된다는 것이다. 이것이 false면 최초에 설정한대로 말고는 이후에 수정한 것은 안 바뀐다는 것이다. 그래서 테이블 모델 변경내용이 있으면 저 부분을 true로 잠깐 바꿨다가 false로 돌려놓는다.

다음으로 아이디 중복체크에서 살짝 어려움을 겪은 부분인데, 저 findOne의 조건에 where 안에 login_id라는 키값을 적어주는 것이 중요하고, express는 맨아래처럼 res.send()로 결과를 보내준다.(return으로 쓰고 헤맸다.)

const express = require("express");
const bcrypt = require("bcrypt");
const User = require("../models/user");

const router = express.Router();

router.route("/user");

// 회원목록 조회
router.get("/", async (_, res) => {
  const users = await User.findAll();
  console.log(users);
  res.send(users);
});

// 회원가입(등록)

router.post("/", async (req, res) => {
  const ID = req.body.login_id;
  const existed_id = await User.findOne({ where: { login_id: ID } });
  if (existed_id) {
    console.log("이미 등록된 아이디입니다.");
    res.send("이미 등록된 아이디입니다.");
  } else {
    const salt = await bcrypt.genSalt(10);
    const hashed_password = await bcrypt.hash(req.body.password, salt);
    console.log("------------------------------------------------------");
    console.log(hashed_password);
    console.log("------------------------------------------------------");
    const user = await User.create({
      login_id: req.body.login_id,
      password: hashed_password,
      nickname: req.body.nickname,
      role: req.body.role,
      comment: req.body.comment,
      phone_num: req.body.phone_num,
      rating_score: req.body.rating_score,
    });
    console.log(user);
    res.json(user);
  }
});

module.exports = router;

비크립트 라이브러리를 이용해서 비밀번호 암호화해서 데이터베이스에 저장하는 모습과 회원가입 전 ID 중복체크가 들어간 모습의 코드이다.
console.log로 줄을 만들어 부분마다 확인을 하는 것도 굉장히 유용했다.

포스트맨으로 회원등록 요청을 날렸을 때, 비밀번호가 해시화가 잘되는 모습이다.
rating_score는 저렇게 등록하는 식은 아니라서 나중에 손을 볼 예정이다.

이미 가입한 아이디로 또 요청을 보내면 아래와 같이 등록된 아이디라고 문구가 응답으로 간다.


🧘🏻‍♀️ 이제야 깃허브에 처음 올리고, API도 본격적으로 만들기 시작했다. 처음 써보는 것들이 많아 헤맨 부분이 많았지만, 포스트맨의 응답으로 원하는 결과가 딱 나올 때의 희열이 너무 좋았다. 그리고 재미있었다.
오늘 많은 것을 해보진 못했지만 오늘 경험으로 탄력을 확 받아 재밌게 프로젝트를 했으면 한다. 가속이 좀 붙었으면 좋겠다.
내일은 회원가입 전 휴대폰 인증과 이메일로 회원가입 축하메세지 날라가는 것, 그리고 나머지 회원 개별조회, 회원정보 수정,회원탈퇴... 그리고 다른 것들도 해보려고 한다.
Sequelize도 그렇고 Express도 그렇고 REST API도, 처음 써보거나 많이 써보진 않았던 것들인데 파일 구조도 어떻게 해야할지 막막하고, 코드진행들은 어떻게 해야할지 너무 막막해서 괜히 안하던 것을 했나라고 생각했는데, 오늘 많진 않지만 내가 원하던 방향의 결과대로 나와서 너무 좋고 자신감이 꽤 붙었다.
내일도 해보자.

profile
항상 '기본'을 중요시하는 예비 백엔드개발자입니다!

0개의 댓글