ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Express.js와 라우팅, 그리고 미들웨어
    TIL 2024. 10. 14. 17:26

    1. Express.js에서 라우팅(Routing)이란 무엇이며, 이를 어떻게 구성하는지 설명해 주세요.

    → Express에서 라우팅이란 HTTP 요청이 들어왔을 때 앱이 어떤 방식으로 반응할 것인지에 대한 정의입니다. Express 앱에서 모든 요청은 일련의 라우팅 과정을 거치는데, app.use()라는 메서드에 명시된 경로를 이용하여 요청이 어느 경로를 통해 어떤 함수를 콜백할지를 결정하게 됩니다.  

    • 예를들어 app.use(’/home’, homeRouter) 같은 식으로 정의되어 있다면, /home 이라는 URI 경로로 접근할 때 homeRouter 라는 이름으로 import 된 라우터 내에 정의된 각 HTTP 메서드에 해당하는 콜백들을 이용하여 요청을 처리하게 됩니다.
    • 본 로직을 실행하기 전 중간 단계에서 실행되는 middleware 또한 router의 일종으로 분류됩니다.

     

    2. Express.js 미들웨어란 무엇이며, 사용 사례를 설명해 주세요.

    → Express의 middleware는 라우터의 일종이며, 본 로직의 실행 전 부가적으로 실행할 보조 함수혹은 함수들을 일컽습니다.

    • 주된 사용 사례로는 인증 및 인가 여부를 판단하는 auth 함수들이나 문자열의 허용 여부를 판단하는 validation 등의 기능을 함수화시켜 메인 로직 실행 전에 우선적으로 처리하도록 구성하는 방식이 있습니다. 해당 로직들을 통과하면 next() 함수를 통해 다음 라우트로 넘어가도록 유도할 수 있으며, 자체적으로 response를 보내고 return하거나 에러를 throw하고 에러 핸들러에 전달하는 방식으로 처리하기도 합니다.

     

    3. Express.js의 라우팅(Routing)을 사용하여 API 설계 시 성능 최적화 방안은 무엇인가요?

    → 기본적으로 I/O 작업에 대한 동기 함수 사용을 최소화하는 방법이 있겠습니다. 데이터베이스나 네트워크 전송 등의 I/O 작업의 경우 일반적으로 시간이 오래 걸리는 작업이기 때문에 동기 함수로 작성하게 되면 쓰레드를 블로킹하여 앱의 시간당 요청 처리량을 저하시킬 수 있습니다. 따라서 비동기로 실행하여 백그라운드로 처리한 뒤 결과를 돌려받도록 구성하는 것이 적합합니다.

    • 또 다른 방법 중에는 NODE_ENV 설정을 production으로 바꾸는 간단한 방법이 존재합니다. 이는 Express 앱의 환경에서 몇 가지 caching 기능을 활성화하고 logging의 verbose 레벨을 낮추는 등의 역할을 합니다.

     

    4. GET과 POST 요청의 차이점을 설명해 주세요.

    → HTTP에서 GET과 POST 메서드의 주된 차이점은 우선 요청의 사용 목적에 있습니다. GET 메서드의 경우 말그대로 데이터를 얻는 과정, 즉 정보 조회가 목표입니다. 반면에 POST의 경우 데이터를 POST하는 것, 즉 쓰기가 목적입니다. 전자는 특정 주소로 접근하여 페이지를 로딩하는 것처럼 데이터를 불러오는 모든 행위를 포함합니다. 후자의 경우 회원 가입이나 게시글 작성 등 어딘가에 데이터 쓰기가 진행되는 행동들에 사용됩니다.

    • 예외적으로 로그인의 경우 데이터를 쓰지 않는데도 POST 메서드가 많이 사용됩니다. 그 이유는 URL을 통해 정보를 전달하는 GET과는 달리 POST의 경우 HTTP body에 정보를 담아 보내는데, 이 때 HTTPS를 사용하게 되면 보안이 향상되어 민감한 로그인 정보를 보호하기 수월하기 때문입니다.

     

    5. 미들웨어(Middleware)를 활용하여 인증(Authentication)과 권한 부여(Authorization) 로직을 어떻게 구현할 수 있을까요?

    → 인증이나 인가가 필요한 라우트에 대해 인증이나 인가 확인 절차가 포함된 미들웨어가 실행되도록 설정하는 식으로 작성합니다.

    • JWT 토큰을 사용하는 방식으로 예를 들면, 인증의 경우 최초에 로그인 성공 시 토큰을 발급할 때 토큰에 user를 식별할 수 있는 정보를 저장하고, 인증이나 인가가 필요한 기능들에 알맞은 auth 미들웨어를 설정하여 추후 접근 시 auth 미들웨어에서 토큰의 유무나 유효성 등을 검사하여 인가 성공 시 next() 함수를 호출하거나 반대의 경우 요청 처리를 거부하는 status code를 포함하는 response를 보내도록 설정할 수 있습니다.
    • 인가의 경우도 마찬가지로 토큰 sign 시 유저의 역할군(관리자 혹은 일반 유저 등)의 정보를 담아두는 방식으로 다음 접근 시 해당 토큰을 확인하여 접근 시도에 대한 권한을 확인할 수 있겠습니다.
    728x90

    'TIL' 카테고리의 다른 글

    [Node.js] Stream과 Back Pressure  (5) 2024.10.24
Designed by Tistory.