회원가입을 할 때 우리가 비밀번호를 그대로 database에 저장을 하게 되면 어떻게 될까요? database가 털리면 회원가입한 유저들의 정보들이 그대로 노출이 되는 불상하가 일어나는데요. 이 같은 일이 발생하지 않게 하는 게 바로 암호화입니다. 암호화는 node에서 제공하는 crypto라는 모듈, npm에서 설치해서 사용할수 있는 bcrypt라는 모듈이 존재합니다. 그렇다면 모듈을 이용하여 어떻게 비밀번호를 암호화 하는지 알아봅시다. crypto const salt = crypto.randomBytes(64).toString("base64"); const hashPassword = crypto .pbkdf2Sync(password, salt, 10000, 64, "sha512") .toString("..
백엔드 서버 구축을 하다 보면 많이 듣는 단어가 바로 "MVC패턴"인데요. 그렇다면 MVC 패턴이 무엇일까요? MVC패턴은 Model-View-Controller의 약자며, 각각의 성격에 맞는 코드를 작성을 하게 됩니다. 하지만 node에는 Router라는 개념이 추가되어 있는 상태입니다. 그렇다면 node의 파일구조는 어떻게 되어있는 건지 알아봅시다. Router에는 어떤 코드를 작성하나요? Router에는 기본적으로 경로를 설정하고, 핸들링이라 부르는 로직까지 작성을 합니다. 이렇게 라우터에서 경로 및 로직까지 다 수행하게 되는 경우에는 단점이 존재하게 되는데요 프로젝트의 규모가 커질수록 코드가 복잡해집니다. 가독성을 떨어뜨립니다. 오류를 찾고 그를 해결하는 작업도 힘이 듭니다.(트러블슈팅) 즉, 유..
유효성 검사(validation)란? 사용자가 입력한 값의 유효성을 검사하는 것을 말합니다. 즉, 타당성을 확인하는 작업입니다. 예시. 회원가입할때 조건을 생각해 봅니다. email 값이 존재해야 한다. ~~~~@email.com 형태여야 한다. password 값이 존재해야 한다. 최소 숫자와 영문 한 글자씩은 포함한 4글자 이상 이어야 한다. name 값이 존재해야 한다. 숫자가 들어오면 안 되고 문자열이어야 하며 2자 이상 이어야 한다. 그렇다면 이 많은 조건들을 어떻게 확인을 해야 할까요? if를 통해서 작업을 하게 되면 if 대 잔치가 벌어지기 때문에 우리는 이것을 유효성 검사를 통해서 진행을 하려고 합니다. 어떻게 유효성 검사를 할 수 있을까요? express-validator 우리는 유효성검..
express의 가장 큰 장점인 routing은 Request가 왔을 때 원하는 경로에 따라 적절한 방향으로 경로를 안내해 주는 것을 말합니다. 쉽게 말해서 URI와 method에 맞는 콜백함수를 어떤 걸 호출할지 알려주는 것을 의미합니다. router는 어떻게 이용하는 걸까요? express의 router를 사용하기 위해 필요한 파일 및 폴더 /routes /router.js /app.js router를 사용하기 위해서는 기본적으로 서버 구동을 시킬 app.js와, routes 폴더가 필요합니다. app.js에서는 전반적인 서버 설정 관련 코드들이 있다면 routes 폴더에는 여러 router파일들이 모여있는 것을 말하는데요. 이때 이 router.js는 특정 기능끼리 묶어서 사용하는 경우가 많습니다...
프론트엔드와 협업 시, 백엔드에서 예외처리를 해주면 좋은 코드를 알려드리려고 합니다. 이전에 작성했던 예외처리는 백엔드 프론트엔드 둘 다 사용이 가능한데요. https://code-dung.tistory.com/56 안정성을 위한 예외 처리(기본) 코드를 작성하다 보면 에러들을 많이 만나게 되는데요. 메모리부족이나 스택오버플로우 심각한 에러가 있는 반면에 수습 할 수 있는 심각도가 낮은 에러도 존재합니다. 이때 우리는 심각도가 code-dung.tistory.com 지금부터 알려드릴 코드는 프론트엔드를 위한 백엔드의 예외 처리 코드입니다. res.json(result); 여기까지만 작성을 했다면 성공을 했던 실패를 했던 전부 status code가 200으로 넘어가게 됩니다. if(!결과){ // 조건 ..
API 설계는 거창한 게 아니라 쉽게 말하자면 URI(URL)과 method로 이루어져 있는 것을 말합니다. 그렇다면 어떻게 API설계를 하면 될까요? ✨ localhost:8080/users/:id에 접속을 하면 id를 map에서 객체를 찾아 해당 객체의 정보를 넘김 URI : localhost:8080/users/:id method : GET - req : params.id(유저의 번호로 map에 저장된 key값을 전달하는데 사용) - res : map에서 id로 객체를 조회해서 정보를 전달 ✨ localhost:8080/users에 접속하여 data를 입력한뒤 서버에 전송을 하면 유저 등록 URI : localhost:8080/users method : POST - req : req.body로 유저..
GET요청을 URI를 통해 했었는데요 개인정보가 들어가는 아이디, 패스워드, 번호 등과 같은 개인정보를 URI에 담을 수 있을까요? 절대 그렇게 해서는 안됩니다. 그렇다면 개인정보를 필요로 하는 등록 할 때 쓰이는 POST, 수정하는 PUT, 삭제하는 DELETE 사용 시 제대로 등록이 되고 수정이 되고 삭제가 됐는지 어디서 어떻게 확인을 해야 할까요? postman postman은 req.query, req.body, req.params를 확인할 수 있는 애플리케이션이며 GET, POST, PUT, DELETE 외에도 PATCH, HEAD, OPTIONS 같은 값도 확인이 가능합니다. postman 다운로드 postman 시작하기 Method 선택 확인할 주소 입력 request 존으로 params, ..
express에서는 아주 감사하게도 빠르게 웹사이트를 만드는데 도움이 되는 틀을 만들어놨는데요. 바로 express-generator입니다. $ npm install -g express-generator $ express create : public\ create : public\javascripts\ create : public\images\ create : public\stylesheets\ create : public\stylesheets\style.css create : routes\ create : routes\index.js create : routes\users.js create : views\ create : views\error.jade create : views\index.jade cr..
express에서 제공하는 request 객체에는 우리가 사용하는 body, query, params라는 속성이 존재합니다. 각각 어떤 걸 내포하는지 어떤 의미인지 알아봅시다. req.params 라우터의 매개변수로 /:nickname/:num이라는 경로가 존재할 때 각각의 nickname과 num이라는 속성을 req.params.nickname, req.params.num으로 받아올 수 있습니다. 예시 : https://www.youtube.com/@tvNDENT 이런 주소가 존재할 때 https://www.youtube.com/:계정명으로 로 경로를 받고 req.params.계정명으로 값을 받아올 수 있습니다. req.query 주소의 뒤에 /:prams?name=이름데이터&age=나이데이터로 작성된..