/DMS-Clone

DMS-Clone 만들기

Primary LanguageJavaScript

DMS-Clone

사용 언어

JavaScript (Node.JS)

사용 프레임워크

Express

데이터베이스

유저 정보, 잔류 신청 정보 등을 관리하기 위해서 MySQL을 사용했습니다. 자바스크립트 구문으로 MySQL을 조작하기 위해서 npm에서 제공하는 ORM인 Sequelize를 사용했습니다.

HTTP Method

요청 정보가 필요하고 보안을 위해서 파라미터를 숨길 필요가 있는 로그인, 회원가입, 잔류신청 등의 API는 POST 메서드를 사용했으며, 잔류신청 조회, 기상음악신청 조회 등의 단순 조회를 하는 API는 GET 메서드를 사용했습니다.

Status Code

요청 처리에 성공했으면 200, 새로운 리소스를 작성했으면 201, 그리고 요청을 처리했는데 컨텐츠가 없으면 204를 반환 하도록 했습니다. 요청을 할 때 서버가 요구하는 값이 아닌 값을 보내거나 비밀번호와 비밀번호 확인이 틀렸을 때와 같이 잘못된 값이 왔을 때는 400, 그리고 회원가입을 할 때 아이디가 이미 존재하거나 기상음악을 신청하는데 이미 기상음악을 신청했을 때처럼 요청값과 서버가 충돌하면 409를 반환 했습니다. status code에 대해서 인터넷으로 찾아보면서 했지만 아직 확신이 안서기 때문에 보완이 필요합니다.

모듈분리

하나의 js파일에 모든 코드가 들어가 있으면 코드가 너무 길어지고 가독성이 떨어지기 때문에 여러 개의 모듈로 분리하여 코드를 작성했습니다.

암호화

사용자의 비밀번호를 그대로 저장하면 보안이 취약해지므로 Node.JS에 내장돼있는 crypto 모듈로 사용자의 비밀번호를 암호화했습니다. 복호화를 할 필요는 느끼지 못했기 때문에 단방향 암호화 방식을 선택했습니다.

API

  • 로그인

    npm에서 제공하는 passport, passport-local 모듈을 이용하여 로그인을 구현했습니다. passport는 로그인 후에 유저 정보를 세션에 저장하기 때문에 express-session 모듈도 함께 사용했습니다. passport를 이용한 이유는 로그인 구현이 쉽고, 로그인한 유저 정보를 가져오기 쉽기 때문입니다.

  • 잔류 신청

    요청 body를 통해서 유저가 설정하고자 하는 잔류 status를 받고 status가 잔류, 금요귀가, 토요귀가, 토요귀사 중 하나면 유저의 잔류 상태를 업데이트 해줍니다(201). 만약 저 4개의 상태가 아닌 값이 들어오면 잔류 상태를 업데이트 하지 않습니다(400). 잔류 정보는 기본값을 잔류로 설정했습니다.

  • 내 잔류 조회

    로그인 된 유저의 잔류 상태를 가져와서 보여줍니다(200).

  • 기상음악 신청

    요청 body를 통해서 유저가 신청하고자 하는 노래(song), 가수(singer), 요일(day)을 받아서 day가 월, 화, 수, 목, 금 중에 하나가 아니면 요청을 거절합니다(400). 또한 신청하려는 요일에 음악 신청이 이미 4개 이상이거나, 유저가 이미 음악을 신청했다면 요청을 거절합니다(409). 위에 조건을 모두 통과하면 기상 음악 신청이 됩니다(201).

  • 내 기상음악 조회

    로그인한 유저가 신청한 기상음악 정보를 가져와서 보여줍니다(200). 만약 신청한 기상음악이 없다면 204를 반환합니다.

  • 모든 잔류신청, 기상음악 조회

    모든 유저의 잔류 신청, 기상음악 정보를 가져와서 보여줍니다(200). 신청된 기상음악이 없다면 204를 반환합니다.