2025년 1월 6일

김동환·2025년 1월 6일

오늘의 코드

index.js

// express 모듈 가져오기
import express from 'express';

// 인증 관련 라우터 가져오기
import { authRouter } from './auth.router.js';

// 사용자 관련 라우터 가져오기
import { usersRouter } from './users.router.js';

// 이력서 관련 라우터 가져오기
import { resumesRouter } from './resumes.router.js';

// 액세스 토큰이 필요한 미들웨어 가져오기
import { requireAccessToken } from '../middlewares/require-access-token.middleware.js';

// Express 라우터 생성
const apiRouter = express.Router();

// '/auth' 경로로 들어오는 요청을 authRouter로 처리
apiRouter.use('/auth', authRouter);

// '/users' 경로로 들어오는 요청을 usersRouter로 처리
apiRouter.use('/users', usersRouter);

// '/resumes' 경로로 들어오는 요청을 requireAccessToken 미들웨어와 resumesRouter로 처리
apiRouter.use('/resumes', requireAccessToken, resumesRouter);

// apiRouter를 외부에서 사용할 수 있도록 export
export { apiRouter };

오늘 배운 것 (TIL) 작성

📌 오늘의 학습 기록 (TIL: Today I Learned)

주제: Express에서 라우터 관리 및 미들웨어 적용

  1. Express 라우터 사용법

    • express.Router()를 사용하여 여러 라우트를 그룹화하고 모듈화할 수 있음.
    • 라우터는 apiRouter.use()를 통해 특정 경로로 들어오는 요청을 처리하도록 설정 가능.
  2. 라우터 모듈화의 이점

    • 라우트를 파일 단위로 나눔으로써 코드 가독성과 유지보수성을 높임.
    • 예를 들어, 인증 관련 라우트는 auth.router.js로, 사용자 관리 라우트는 users.router.js로 분리.
  3. 미들웨어 적용 방식

    • 미들웨어는 특정 라우트에서만 동작하도록 설정 가능.
    • 예: /resumes 경로에서만 액세스 토큰 검증 미들웨어 requireAccessToken 적용.
    • 이를 통해 보안 요구사항이 다른 경로별로 미들웨어를 효율적으로 관리할 수 있음.
  4. 파일 구조

    • auth.router.js, users.router.js, resumes.router.js 등으로 라우터를 분리.
    • middlewares/require-access-token.middleware.js로 미들웨어 코드 분리.
    • 이런 파일 구조는 대규모 프로젝트에서 특히 유용.

느낀 점
라우터와 미들웨어를 모듈화하고 조합하여 사용하니 코드가 훨씬 깔끔해졌다. 파일 단위로 기능을 분리하면 코드 수정 시 특정 파일만 집중적으로 변경하면 되어서 유지보수가 쉬워진다. 앞으로 프로젝트 구조를 설계할 때 이러한 패턴을 적극 활용해야겠다.


2번째 오늘의 코드

user.router.js

import express from 'express';
import { requireAccessToken } from '../middlewares/require-access-token.middleware.js'; // 액세스 토큰을 요구하는 미들웨어
import { HTTP_STATUS } from '../constants/http-status.constant.js'; // HTTP 상태 코드 상수
import { MESSAGES } from '../constants/message.constant.js'; // 응답 메시지 상수

const usersRouter = express.Router(); // Express 라우터 생성

// 현재 로그인된 사용자 정보 조회
usersRouter.get('/me', requireAccessToken, (req, res, next) => {
  try {
    const data = req.user; // 요청 객체에서 사용자 정보 가져오기 (액세스 토큰 미들웨어에서 추가됨)

    // 사용자 정보를 성공적으로 응답
    return res.status(HTTP_STATUS.OK).json({
      status: HTTP_STATUS.OK, // HTTP 200 상태 코드
      message: MESSAGES.USERS.READ_ME.SUCCEED, // 성공 메시지
      data, // 사용자 데이터
    });
  } catch (error) {
    next(error); // 오류 처리 미들웨어로 오류 전달
  }
});

export { usersRouter }; // 라우터를 내보내기

📌 오늘의 학습 기록 (TIL: Today I Learned)

주제: Express 라우터에서 사용자 정보 조회 API 구현


1. 코드 설명

주요 동작:

  • 현재 로그인된 사용자 정보 조회
    • /me 경로로 GET 요청 시, 로그인한 사용자 정보를 반환하는 API를 구현.
    • 요청의 유효성을 검증하기 위해 미들웨어(requireAccessToken)를 사용.

주요 코드 분석:

  1. 라우터 생성 및 미들웨어 적용

    • usersRouter.get('/me', requireAccessToken, ...):
      • /me 경로에 대해 requireAccessToken 미들웨어가 먼저 실행되어 액세스 토큰을 검증.
      • 검증이 성공하면 다음 핸들러가 호출되어 사용자 정보를 반환.
  2. HTTP 상태 코드와 메시지 관리

    • HTTP 상태 코드 상수 (HTTP_STATUS):
      • HTTP_STATUS.OK: 요청 성공(200)을 나타냄.
    • 응답 메시지 상수 (MESSAGES):
      • MESSAGES.USERS.READ_ME.SUCCEED: 성공 메시지를 관리하는 상수로, 코드에서 하드코딩을 피할 수 있음.
  3. 핸들러 동작

    • req.user:
      • requireAccessToken 미들웨어에서 추가된 사용자 정보를 사용.
    • 성공 시 응답:
      return res.status(HTTP_STATUS.OK).json({
        status: HTTP_STATUS.OK,
        message: MESSAGES.USERS.READ_ME.SUCCEED,
        data,
      });
      • HTTP 상태 코드, 메시지, 사용자 데이터를 포함한 JSON 형식으로 클라이언트에 응답.
    • 오류 처리:
      • catch 블록에서 발생한 오류를 next(error)로 전달해 오류 처리 미들웨어로 위임.
  4. 라우터 내보내기

    • export { usersRouter }:
      • 작성된 라우터를 내보내서 다른 파일에서 사용할 수 있도록 설정.

2. 오늘 배운 내용

  1. 미들웨어로 사용자 인증 처리

    • requireAccessToken 미들웨어는 액세스 토큰 검증, 사용자 정보 추가 등의 작업을 처리하며, 이후 라우터 핸들러에서 req.user를 통해 사용자 데이터를 바로 활용 가능.
    • 미들웨어를 사용하면 공통 기능을 재사용하여 코드를 더 간결하게 작성할 수 있음.
  2. HTTP 상태 코드와 메시지 상수화의 장점

    • 상태 코드와 메시지 상수:
      • HTTP_STATUSMESSAGES 상수를 통해 코드의 가독성과 유지보수성을 높임.
      • 예: 메시지가 변경되면 상수 파일만 수정하면 됨.
  3. 오류 처리 패턴

    • 핸들러 내부에서 오류가 발생하면 next(error)로 오류를 전달하여, 중앙에서 관리하는 오류 처리 미들웨어로 위임.
    • 이를 통해 각 핸들러에 일관된 오류 처리 방식을 유지.

3. 느낀 점

오늘 작성한 코드를 통해 Express에서 라우터와 미들웨어를 효과적으로 조합하여 API를 구현하는 방법을 이해할 수 있었다. 특히, 미들웨어의 활용상수 관리의 중요성을 다시 한번 느꼈다. 앞으로도 유지보수가 쉬운 코드를 작성하기 위해 이런 패턴을 적극 활용해야겠다.


추가로 학습할 내용

  • Express 오류 처리 미들웨어 심화 학습
  • TypeScript를 적용하여 더 강력한 타입 안전성을 확보하는 방법
profile
Node.js 7기

0개의 댓글