📚요약
지난 시간 프로젝트의 틀을 구현했습니다. 이번 시간에는 이어서 프로젝트를 구현하겠습니다.
📖프로젝트 폴더 구조 변경
기존에는 routes라는 폴더에 url을 따서 만든 books나 librarians와 같은 파일을 만들어 구현했습니다. 이는 나쁜 방법은 아니지만 코드의 양이 늘어남에 따라 복잡성이 올라가고 가독성이 떨어져 결국 유지보수를 어렵게 만들 수 있습니다. 그렇기 때문에 routes에는 실제 사용자의 요청에 따른 url만 분리하고 실제 로직을 controller에 따로 분리하겠습니다.
// 변경 전
// routes/books
router
.route("/")
.get(
(req, res) => {
...로직
}
)
// 변경 후
// routes/users
const signup = require('../controller/UserController');
router.post("/signup", signup);
// controller/UserController
const signup = (req, res) => {
...로직
};
moduels.export = signup;
📖회원 API
📄구현




🍯tip! 하드 코딩(직접 작성)을 하는 것은 좋은 코딩 습관이 아닙니다. 왜냐하면 하드 코딩을 하는 당시에는 코드가 어떤 것을 의미하는지 알 수 있지만, 나중에 알아보기 어려워질 수 있습니다. 상태 코드(status code)를 예로 들 수 있습니다. 그렇기 때문에 http-stauts-codes와 같은 모듈을 사용하거나 직접 코드를 작성해서 다른 의미 있는 것으로 대체하는 것이 중요합니다.
📄비밀번호 암호화(내장 모듈 crypto)
구현을 하다 보면 회원가입을 했는데 비밀번호를 데이터베이스에 문자열 그대로 저장하면 보안에 문제가 없나? 하는 의문이 들 수 있습니다. 이를 보완하기 위해 비밀번호를 암호화해서 데이터베이스에 저장하고 로그인할 때 복호화해 확인하는 방법이 있습니다.
여러 방법 중 Node.js에 내장 모듈로 제공되는 crypto 모듈을 활용해 암호화하고 복호화하는 작업을 진행하겠습니다.
const crypto = require("crypto");
const pw = "1234";
const salt = crypto.randomBytes(10).toString("base64");
const hashPassword = crypto.pbkdf2Sync(pw, salt, 10000, 10, "sha512").toString("base64");
위와 같이 코드를 작성하면 hashPassword에 암호화된 비밀번호가 저장되고 이를 데이터베이스에 넣으면 됩니다.
잠깐! 이때 pbkdf2Sync() 함수는 같은 비밀번호를 넣어도 salt 값과 해시 함수 반복 횟수, 비트 수, 사용되는 해시 함수에 따라 값이 다르게 나옵니다. 현재 코드에서 변하는 값은 비밀번호와 salt 값입니다. salt 값이 고정이라면 해킹당하기 쉽습니다. 그래서 salt 값을 고정시킬 수 없으니 데이터베이스에 암호화된 비밀번호와 같이 저장해야 로그인할 수 있습니다.
실제 코드는 Github에 올라가 있습니다.
ProgrammersSchool/PROJECT-BOOKSHOP at main · nulzi/ProgrammersSchool
프로그래머스 데브코스에서 학습하는 것들을 모아두는 레포. Contribute to nulzi/ProgrammersSchool development by creating an account on GitHub.
github.com
다음 시간에 계속...
출처 & 참고
김송아 강사님의 강의
crypto 모듈 암호화 원리 및 사용법, inpa, 2024.05.22
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
| 데브코스 스터디(알고리즘, 코테) 9회차 (0) | 2024.05.23 |
|---|---|
| 프로그래머스 데브코스 34일차 with. TS 웹 풀스택 (0) | 2024.05.23 |
| 프로그래머스 데브코스 31일차 with. TS 웹 풀스택 (0) | 2024.05.20 |
| 프로그래머스 데브코스 7주차 회고 with.TS 웹 풀스택 (0) | 2024.05.20 |
| 데브코스 스터디(알고리즘, 코테) 8회차 (0) | 2024.05.20 |