ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 항해 99 4주차 주특기 숙련 회고록_15일차
    항해[TIL] 2021. 11. 28. 19:54

    Today I Learnd 

     

    (2021. 11. 24. 수)

     

     

     

     

    목차

    1. express middleware
    2. express-validator
    3. 4주차 3일차 소감 및 부족한 점

     

    1. express middleware

     

    Middleware란

    • 미들웨어 함수는 req(요청) 객체, res(응답) 객체, 그리고 어플리케이션 요청-응답 사이클 도중 그 다음의 미들웨어 함수에 대한 엑세스 권한을 갖는 함수이다.
    • 간단하게 클라이언트에게 요청이 오면 그 요청을 보내기 위해서 응답하려고 하는 중간(미들)에 목적에 맞게 처리를 해주는 거쳐가는 함수들이다.
    • 미들웨어 함수에 대한 엑세스는 next 함수를 이용해서 다음 미들웨어로 현재 요청을 넘길 수 있다.
    • next 함수를 통해서 middleware는 순차적으로 처리가 되므로, 순서가 중요하다.

     

     

    HTTP 메서드

    미들웨어가 작동할 path

    미들웨어 함수

     

     

     

    다음 미들웨어로의 액세스 함수

    HTTP response 객체

    HTTP request 객체

     

     

    Middleware 특징

    • 모든 코드를 실행할 수 있다.
    • 미들웨어가 순차적으로 실행이 되므로 순서가 중요하다.
    • res(응답), req(요청) 객체를 변경을 할 수 있다.
    • 요청-응답 주기를 종료(res methods)는 res method를 이용해서 클라이언트에게 응답을 전송한다는 의미이다.

     

    Middleware 유형

     

    expresss는 여러 유형의 Middleware가 있다.

    • 어플리케이션 레벨 미들웨어
    • 라우터 레벨 미들웨어
    • 오류 처리 미들웨어
    • 써드파티 미들웨어

    - 어플리케이션 레벨 미들웨어

     

    app.method() 함수(.get .use 등) 를 이용해서 app object의 인스턴스에 바인드를 시킨다.

    미들웨어를 어플리케이션 영역에서 지정한 path대로 처리 가능하게 하도록 한다.

    const app = express();
    
    app.use("/", function (req, res, next) {
    	console.log(req);
    	next();
    });
    
    app.get("/", (req, res) {
    	res.send('hello!!')
    });
    
    app.listen(3000);

    이 예시코드를 보면 중간에 app.use라는 미들웨어를 쓰겠다고 하는 부분이다.

    이 코드는 어떤 요청이 들어오더라도 console에 req라는 로그를 찍고나서 순차적으로 실행이된다.

     

     

    - 라우터 레벨 미들웨어

    • express.Router() 인스턴스에 바인드 된다는 점을 제외하면 어플리케이션 레벨 미들웨어와 동일한 방식으로 작동이 된다.
    • Router객체를 이용해 router.use() 및 router.Method()함수를 사용해서 라우터 레벨 미들웨어를 가지고 올 수 있다.
    • Router 객체는 그 자체가 미들웨어처럼 움직이므로 app.use()의 인수로 사용이 될 수 있고, 다른 router의 use() method에서 사용될 수 있다.
    • const router = express.Router()로 router객체를 생성한 후 app.use()를 통해 지정해줘여만 사용할 수 있다.
    • app.use()에서 지정한 경로와 같은 것이 들어오면 모두 적용을 시키기 때문에 중복이 될 수 있다.
    • router를 사용하는 이유는 특정 root url을 기점으로 기능이나 로직별로 라우팅을 나눠서 관리를 할 수 있다.

     

    - 서드 파티 미들웨어

    • 기능적으로 express app에 미들웨를 추가하기 위해서 서드 파티 미들웨어 사용을 권고한다.
    • node.js 모듈을 사용하고 싶으면 어플리케이션 레벨이나 라우터 레벨을 가져와서 사용하면 된다.
    • npm에서 설치를 할 수 있다.

     

     

     

     

    2. express-validator

     

    • express에서 사용할 수 있는 유효성 감사 모듈이다. 
    • 미들웨어 함수로도 사용을 할 수 있고, API형태로 활용도 가능하다.
    • validator.js 를 활용을 해서 편리하게 제작된 모듈이다.
    • post 라우터를 구현을 할 때 클라이언트 수준에서만 유효성 검사를 진행하면 여러 취약점을 발생시킬 수 있기 때문에 Controller 수준의 서버에서의유효성 검증이 꼭 필요하다.

     

    유용한 express-validator 함수

    • trim() : 공백을 제거해준다.
    • isLength(num) : 길이가 num인지 확인해준다. { min: num, max: num } 과 같이 최소, 최대 값도 지정할 수 있다.
    • bail() : 해당 부분에서 에러가 발생하면 다음으로 넘어가지 않는다.
    • isNumeric() : 숫자 형태인지 확인한다. String이어도 해당 String이 숫자인지 확인해준다.
    • isEmail() : String이 이메일 형태인지 확인해준다.
    • isJSON(): String이 유효한 JSON인지 확인해준다.
    • isMobilePhone() : String이 모바일 휴대폰 번호인지 확인해준다.

     

     

     

     

    3. 4주차 3일차 소감 및 부족한 점

     

    소감

     

    항해99에서 나눠준 Node.js 심화반 강의를 2주차 강의 까지만 듣고 개인프로젝트를 하는 중이다. 기초 주차에 비해서 숙련 주차에서는 난이도가 갑자기 급상승한 느낌이다. 기초 주차에서 했던 프로젝트에서 기능들을 추가하는데 강의를 참고해서 진행하고 있다.

     

    그런데 여기서의 문제점이 저번 프로젝트 때 name을 고유값으로 정해주는 바람에 뭔가 꼬이는 느낌이다... 우선 오늘 할 수 있을 때 까지 해보겠지만, 하다가 뭐가 계속 꼬인다 싶으면 프로젝트 했던 것을 한번 엎고 다시해야겠다.

     

    2021.11.21 - [항해99[WIL]] - [WIL]항해99 3주차 주특기 기본 회고록

     

    [WIL]항해99 3주차 주특기 기본 회고록

    항해 99 부트캠프 3주차 알고리즘 코딩테스트 (11 . 15 월 ~ 11 . 20 토 총 6일간) 목차 - 주특기 기본 주차 개인 프로젝트 - Restful API - package.json - 3주차 소감 1. 주특기 기본 주차 개인 프로젝트 3주차..

    kwaktaem.tistory.com

     

     

    부족한 점

     

    저번 주차에 비해서 뭔가 크게 성장한 느낌이 없는 것 같다. 전 주에 비해서 하루에 20시간 씩 공부를 하고 프로젝트를 만드는 것 같은데 뭔가 실력이 상승하지 않고 정체된 느낌이 든다.

     

    시간 대비해서 실력이 오르지 않는 가성비가 떨어지는 것 같다. 이 문제로 팀원분들이나 친해진 분들한테 말하면 실력이 계속 일정하게 쭉 가다가 한번 쭉 오르는 포인트가 있다고 한다.

     

    실력이 오르는게 계단식이라고 하는데 아직 나는 그 포텐이 안터진 것 같다. 뭔가 여기서 포기하거나 좌절을 하게 된다면 내일 터질 수 있고 다음주에 터질 수 있는 그 포인트를 정말 눈 앞에서 놓치는 기분이라 이런 감정을 계속해서 생각하는 것 보다는 내가 하고 있는 이 프로젝트와 공부를 열심히 해봐야겠다.

     

     

     

     

     

Designed by Tistory.