[프로그래머스 데브코스] TIL - 4주차 DAY4

방울·2024년 5월 4일
0

로그인 로직

로그인 처리 과정

  1. 클라이언트에서 전송된 userId와 password를 받는다.
  2. 데이터베이스(db)를 반복적으로 검색하여 해당 userId를 가진 사용자를 찾는다.
  3. 사용자가 존재하면 입력된 비밀번호와 데이터베이스에 저장된 비밀번호를 비교한다.
  4. 응답 처리
    1) 성공 시: 비밀번호가 일치하면 200 상태 코드와 함께 환영 메시지를 반환한다.
    2) 비밀번호 불일치: 비밀번호가 일치하지 않을 경우, 400 상태 코드와 오류 메시지를 반환한다.
    3) 사용자 미존재: userId에 해당하는 사용자가 없을 경우, 404 상태 코드와 오류 메시지를 반환한다.
router.post('/login', (req, res) => {
    const { userId, password } = req.body; // 요청에서 ID와 비밀번호 추출
    let loginUser = db.find(user => user.userId === userId); // DB에서 사용자 검색

    if (loginUser) {
        if (loginUser.password === password) {
            res.status(200).json({ message: `${loginUser.name}님 환영합니다!` });
        } else {
            res.status(400).json({ message: '입력 값을 다시 확인해주세요.' });
        }
    } else {
        res.status(404).json({ message: '회원 정보가 없습니다.' });
    }
});

코드를 전체적으로 올릴 수 없어 대략적으로 작성한 코드는 이렇다.

자바스크립트 Object.keys()

Object.keys() 메소드는 객체의 모든 키를 배열로 반환한다. 이를 사용하여 객체가 비어 있는지 확인할 수 있다.

const obj1 = {};
const obj2 = { message: '들어있음' };

console.log(Object.keys(obj1)); // 출력: []
console.log(Object.keys(obj2)); // 출력: ['message']
console.log(Object.keys(obj2).length === 0); // 출력: false

이 메소드는 로그인 과정에서 객체가 비어 있는지 아닌지를 확인하는 데 유용하게 사용된다.

function isExisted(obj) {
    return Object.keys(obj).length > 0;
}

이 함수는 객체에 키가 하나라도 존재하면 true를 반환하고, 그렇지 않으면 false를 반환한다. 로그인 로직에서는 이 함수를 사용하여 loginUser 객체가 비어 있는지 확인한다.

채널 API 설계

1. 채널 생성

  • Method: POST
  • URL: /channels
  • req: { "channelTitle": "채널명" }
  • res: { "message": ${channelTitle}님 채널을 응원합니다.}

2. 채널 전체 조회

  • Method: GET
  • URL: /channels
  • req: -
  • res: [ { "id": 1, "channelTitle": "채널1" }, ... ]

3. 채널 개별 조회

  • Method: GET
  • URL: /channels/:id
  • req: -
  • res: { "id": 1, "channelTitle": "채널1" }

4. 채널 수정

  • Method: PUT
  • URL: /channels/:id
  • req: { "channelTitle": "수정된 채널명" }
  • res: { "message": "채널명이 성공적으로 수정되었습니다." }

5. 채널 삭제

  • Method: DELETE
  • URL: /channels/:id
  • req: -
  • res: { "message": "채널이 성공적으로 삭제되었습니다." }

채널 API 코드 틀

Express의 route() 메소드를 사용하면 하나의 경로에 대해 여러 HTTP 메소드를 쉽게 정의할 수 있다. 이를 통해 코드의 가독성을 높이고, 유지보수를 용이하게 만들 수 있다.

const express = require('express');
const app = express();

app.route('/path')
  .get((req, res) => {
    // GET 요청 처리 로직
  })
  .post((req, res) => {
    // POST 요청 처리 로직
  })
  .put((req, res) => {
    // PUT 요청 처리 로직
  })
  .delete((req, res) => {
    // DELETE 요청 처리 로직
  });

app.listen(3000, () => console.log('Server running on port 7777'));

자주 사용하는 HTTP 상태 코드 정리

  • 200 (OK): 요청이 성공적으로 처리되었다. 가장 일반적인 성공 상태 코드
  • 201 (Created): 요청이 성공적으로 처리되었고 새로운 리소스가 생성되었다.
  • 400 (Bad Request): 서버가 요청을 이해하지 못했다. 일반적으로 클라이언트의 요청 데이터가 형식에 맞지 않을 때 반환된다.
  • 401 (Unauthorized): 이 상태 코드는 인증 실패를 나타낸다. 주로 로그인 실패 시 사용된다..
  • 403 (Forbidden): 서버가 요청을 이해했지만 승인을 거부한다. 접근 권한이 없는 자원에 대한 요청에 사용된다.
  • 404 (Not Found): 서버가 요청한 리소스를 찾을 수 없다. 일반적으로 잘못된 URL에 대한 요청에서 반환된다.
  • 500 (Internal Server Error): 서버 내부에 오류가 발생했다. 서버가 요청을 처리할 수 없을 때 사용된다.

동일한 경로를 묶어 정의할 수 있어 중복을 최소화할 수 있었다. 중복 되는 코드는 거의 없도록 노력하려하는데 이런 편리한 메소드가 있어 정말 편리한 듯하다. 🥹 상태 코드도 이제는 설명을 찾아보지 않고도 알 수 있을 것 같다.

profile
방울방울

0개의 댓글