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

AI 세일즈 에이전트에게 도구를 줬더니: 추측에서 실제 조사로 전환한 B2B 파이프라인 구축기

AI 세일즈 에이전트에게 도구를 줬더니: 추측에서 실제 조사로 전환한 B2B 파이프라인 구축기

계속 우리를 괴롭혔던 문제 세일즈 파이프라인이 작동하고 있었습니다. 여섯 개의 Claude 에이전트가 각자 역할을 수행했습니다: 회사를 조사하고, 솔루션을 매핑하고, 제안서를 작성하고, 딜 규모를 추정하고, 이메일을 작성하고, 빠른 적합성 요약을 생성합니다. CLI 명령어 하나면 몇 분 안에 개인화된 세일즈 제안서가 완성되었습니다. 하지만 거기에는 거짓말이 내재되어 있었습니다. "리서처" 에이전트는 실제로 아무것도 조사하지

By Sardor Madaminov
배타적 서브타입(Exlusive Subtype) 테이블 설계와 백엔드 구현

배타적 서브타입(Exlusive Subtype) 테이블 설계와 백엔드 구현

배타적 서브타입이란? 데이터베이스 테이블 설계에서 슈퍼타입(Super Type)과 서브타입(Sub Type)은 공통 속성을 기준으로 엔티티(테이블)를 상위/하위로 나누는 데이터 모델링 기법입니다. * Super Type (상위 엔티티) * 여러 엔티티가 공통으로 가지는 속성을 모아 놓은 엔티티 * 식별자(PK, ID)를 포함한 공통 정보를 가지고 있음 * Sub Type (하위 엔티티)

By Plato Jung
A2A 메모리 레이어: AI 에이전트를 위한 공유 두뇌 구축하기

A2A 메모리 레이어: AI 에이전트를 위한 공유 두뇌 구축하기

모든 것의 시작이 된 문제 우리를 계속 괴롭히던 것이 있었습니다: 왜 AI 에이전트는 대화가 끝나는 순간 모든 것을 잊어버릴까요? 한번 생각해보세요. 챗봇에게 전화보다 이메일을 선호한다고 말합니다. 다음 세션에서는요? 마치 처음 만난 것처럼 행동합니다. 한 상담원에게 주문 문제를 설명하고, 다른 상담원에게 연결되면, 갑자기 처음부터 다시 시작해야 합니다. 우리 모두 겪어본 일입니다.

By Sardor Madaminov