티스토리 뷰

카테고리 없음

8주차 프로젝트(5)

파이썬 초보 파이리 2025. 3. 12. 17:36

1. 회원가입 API구현

회원가입 API는 사용자가 이메일과 비밀번호를 통해 새로운 계정을 생성할 수 있게 해주는 기능이다. 이 API는 크게 세 가지 주요 작업을 처리한다:

  • 요청 데이터 처리: 사용자가 입력한 이메일과 비밀번호를 받아온다. 이 정보는 req.body에서 추출한다.
  • SQL 쿼리 실행: 받은 이메일과 비밀번호를 데이터베이스에 저장하기 위해 SQL INSERT 쿼리를 작성한다. 이 쿼리는 파라미터 바인딩을 사용해 SQL 인젝션을 방지하고, 안전하게 데이터를 저장한다.
  • 응답 처리: 쿼리가 성공적으로 실행되면 클라이언트에게 새로 생성된 사용자 정보와 함께 상태 코드 201(CREATED)를 반환하며, 실패하면 오류 메시지를 전달한다.
 

const join = (req, res) => {
  const { email, password } = req.body;
  const sql = `INSERT INTO users (email, password) VALUES (?, ?);`;
  const values = [email, password];

  conn.query(sql, values, (err, results) => {
    if (err) {
      return res.status(StatusCodes.BAD_REQUEST).json({
        msg: `Error: ${err.code}`,
      });
    }
    return res.status(StatusCodes.CREATED).json(results);
  });
};


회원가입 API 테스트

API를 구현한 후, 실제로 잘 작동하는지 확인하는 과정이 필요하다. 이를 위해 주로 Postman이나 Insomnia 같은 API 테스트 툴을 사용한다. 아래와 같은 절차로 테스트할 수 있다:

  • 요청 보내기: Postman에서 /join 엔드포인트로 이메일과 비밀번호를 포함한 POST 요청을 보낸다.
  • 성공적인 응답 확인: 요청이 성공하면 서버는 사용자 정보를 포함한 상태 코드 201을 반환해야 한다. 이를 통해 회원가입이 정상적으로 처리되었음을 확인할 수 있다.
  • 에러 처리 확인: 잘못된 이메일 형식이나 비밀번호 입력 시, 서버는 400 BAD_REQUEST와 같은 오류 메시지를 반환해야 한다. 이를 통해 잘못된 요청에 대해 서버가 올바르게 응답하는지 확인할 수 있다.

2. 로그인 API 구현

로그인 API는 사용자가 입력한 이메일과 비밀번호를 확인하여 인증된 사용자에게 접근을 허용하는 기능입니다. 이 API는 다음과 같은 주요 작업을 처리합니다:

  • 요청 데이터 처리: 사용자가 입력한 이메일과 비밀번호를 req.body에서 받아옵니다.
  • SQL 쿼리 실행: 데이터베이스에서 해당 이메일을 가진 사용자를 조회하는 SQL SELECT 쿼리를 작성합니다.
  • 비밀번호 확인: 데이터베이스에서 가져온 사용자 비밀번호와 요청에서 받은 비밀번호를 비교하여 인증을 처리합니다.
  • JWT 토큰 발급: 비밀번호가 맞으면 JWT(JSON Web Token)를 발급하여, 사용자가 로그인 상태임을 인증할 수 있도록 합니다. 이 토큰은 사용자의 이메일을 포함하여 발급되며, 일정 시간 동안 유효합니다.
  • 응답 처리: 인증에 성공하면 JWT를 클라이언트에게 응답으로 반환하고, 실패하면 401 UNAUTHORIZED 상태 코드를 반환합니다.
const login = (req, res) => {
  const { email, password } = req.body;
  const sql = `SELECT * FROM users WHERE email = ?;`;
  const values = email;

  conn.query(sql, values, (err, results) => {
    if (err) {
      return res.status(StatusCodes.BAD_REQUEST).json({
        msg: `Error: ${err.code}`,
      });
    }
    const loginUser = results[0];
    if (loginUser && loginUser.password == password) {
      const token = jwt.sign(
        {
          email: loginUser.email,
        },
        process.env.PRIVATE_KEY,
        {
          expiresIn: "5m",  // 토큰 만료 시간 설정
          issuer: "minje",  // 토큰 발급자
        }
      );
      res.cookie("token", token, { httpOnly: true });  // HTTP 전용 쿠키로 토큰 저장
      return res.status(StatusCodes.OK).json({
        msg: "로그인 성공",
        token: token,
      });
    } else {
      return res.status(StatusCodes.UNAUTHORIZED).end();  // 인증 실패 시
    }
  });
};
 

로그인 API 테스트

  • 요청 보내기: Postman에서 POST /login 엔드포인트를 호출하여 이메일과 비밀번호를 전달합니다.
  • 성공적인 응답: 로그인 정보가 맞으면, 서버는 200 OK와 함께 JWT 토큰을 반환합니다.
  • 에러 처리: 비밀번호가 틀리거나 사용자가 존재하지 않으면, 401 UNAUTHORIZED 상태 코드와 함께 로그인 실패 메시지가 반환됩니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
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
글 보관함