axios 를 이용해서 우아하게 파라미터 넘기기

axios 를 이용해서 우아하게 파라미터 넘기기
Photo by Caspar Camille Rubin / Unsplash

GET 메서드는 파라미터를 query string으로 넘깁니다

  • 위 그림의 parameters는 query string 이라고도 부릅니다

데이터 조회 시 파라미터 넘기기

type FactoryParams = {
  size: number;
  page: number;
  companyId?: string;
  factoryName?: string;
  enabled?: boolean;
  sort?: string | string[];
}
export async function getFactories({
  companyId,
  factoryName,
  enabled,
  page,
  size,
  sort,
}: FactoryParams) {
  const queryParams = [];

  if (companyId !== '') {
    queryParams.push(`companyId=${companyId}`);
  }
  if (factoryName !== '') {
    queryParams.push(`factoryName=${factoryName}`);
  }
  if (enabled !== '') {
    queryParams.push(`enabled=${enabled}`);
  }
  if (sort && sort.length > 0) {
    if (Array.isArray(sort)) {
      const sortQueryString = sort.map((s) => `sort=${s}`).join('&');
      queryParams.push(sortQueryString);
    } else {
      queryParams.push(`sort=${sort}`);
    }
  }

  queryParams.push(`page=${page}`);
  queryParams.push(`size=${size}`);

  const queryString = queryParams.join('&');
  const url = `/api/factories?${queryString}`;

  return await axios.get<FactoryResult>(url).then((response) => response.data);
}
  • 파라미터 중 일부는 옵셔널이지만 기본 값으로 빈 문자열('')을 사용하고 있습니다
  • axios.get(url, { params: { ...파라미터 }}) 와 같이 axios get 메서드 옵션의 params 필드를 사용할 수 있지만
    기본값이 그대로 전달되는 경우 /api/factories?companyId=&factoryName= 와 같이 빈 문자열이 그대로 쿼리 스트링에 포함이 되었고 원치않는 응답이 전달되었습니다
  • 따라서 위와 같이 쿼리 스트링을 직접 만들어서 조합하는 코드가 삽입되었습니다

빈 파라미터를 제거하고 우아하게 리팩터링하기

  • PR을 올렸을 때 중첩된 if 문에 대한 수정요청이 있었습니다
  • 그리고 빈 파라미터를 제거하는 유틸함수를 만들고 get 메서드 옵션 중 params 필드로 넘겨서 리팩터링을 해보았습니다
// 빈 파라미터를 제거하는 유틸함수
export const removeEmptyField = <T extends Record<string, unknown>>(obj: T) => {
  return Object.fromEntries(
    Object.entries(obj).filter(([, v]) => {
      if (v === null || v === undefined || v === '') {
        return false;
      }
      if (Array.isArray(v) && v.length === 0) {
        return false;
      }
      return true;
    }),
  ) as T;
};
export async function getFactories(params: FactoryParams) {
  return await axios
    .get<FactoryResult>('/api/factories', {
      params: removeEmptyField(params),
      paramsSerializer: {
        indexes: null,
      },
    })
    .then((response) => response.data);
  • 위와 같이 params를 removeEmptyField함수로 감싸면 if 문을 사용하지 않고 빈문자열 필드 없이 파라미터를 넘길 수 있습니다
  • sort 파라미터의 경우 string[] 과 같이 배열으로 전달될 수 있는데 이 때 paramsSerializer 필드에 위와 같이 indexes: null을 전달해야 올바르게 쿼리스트링이 만들어집니다

Read more

Lumen - AI Agent를 위한 지속 가능한 두뇌

Lumen - AI Agent를 위한 지속 가능한 두뇌

왜 만들었는가 AI 에이전트는 모든 대화를 기억상실증 상태에서 시작합니다. Claude Code, Cursor, Codex, Mastra 하네스, LangChain 파이프라인 — 이 도구들은 세상을 알지만 당신의 세상은 전혀 모릅니다. 당신이 읽은 200편의 논문, 당신이 출시하는 코드베이스, 지난 분기에 내린 아키텍처 결정, 새벽 2시에 그 버그를 잡아냈을 때 마침내 통했던 트래젝토리. 모든 세션이 같은 컨텍스트를

By Sardor Madaminov
200 OK, 텅 빈 body — Starlette Race Condition 장애 분석기

200 OK, 텅 빈 body — Starlette Race Condition 장애 분석기

발생일: 2026-04-23 / 해결일: 2026-04-27 영향 범위: report-dev.machine365.ai 전체 API 들어가며 API가 200 OK를 반환하는데 body가 비어있다. 프론트엔드에는 아무것도 안 뜨고, Swagger UI(/docs)도 빈 화면. 그런데 로컬에서 돌리면 멀쩡하다. 배경은 이랬다. 미터링(Metering) 기능을 만들면서 API 호출 로그를 수집할 미들웨어를 작성했다. Spring Boot 백엔드에 먼저 적용하고, Python

By Jeonggil