2024.01.16(화)

🐍snake_case → 🐪camelCase

  • response format을 변경했다.
  • 변경하는 방법은 크게 2가지이다.

AS(별칭)을 사용하여 query에서 camelCase로 지정해주기

  • 장점
    • 후처리를 할 필요가 없다.
    • 일관된 스타일로 query를 작성할 수 있다.
  • 단점
    • *을 사용할 수 없어 각 필드를 일일이 지정해주어야 한다.
    • 쿼리가 길어지고 유지보수가 어려워질 수 있다.

② query에서는 snake_case로 받고 response를 보내기 전에 이름 형식 바꿔주기

  • 장점
    • *을 사용하여 모든 필드를 선택할 수 있다.
    • snake-camel과 같은 라이브러리를 사용하면 편리하게 형식을 변환할 수 있다.
  • 단점
    • 모든 property에 대해 순회하며 형식을 변환하는 작업이 필요하다.
    • 추가적인 라이브러리 의존성이 있을 수 있다.

  • 나는 2번 방식의 경우 모든 property에 대해 순회해야 하므로 시간 복잡도가 O(n)O(n)이 돼서 data 개수가 많아질수록 성능 이슈가 있을 수 있다고 생각했다. 물론 지금은 데이터가 그렇게 많지도 않으니 두 방식을 적당히 섞어 써보자.

  • utils에 responseFormatter.js 모듈을 만들어 다음과 같이 format을 변환해주는 함수를 작성해 보았다.

    /** 
     *  @example
     *  const testObject = {
     *      'snake_case': 1,
     *      'hello': 2,
     *      'camelCase': {
     *          'hi_world': 3,
     *          'this_is_test': [
     *              { 'nested': 4, 'g_idle': 5 },
     *              { 'nested': 6, 'g_idle': 7 }
     *          ]
     *      }
     *  };
     *  
     *  const camelCaseObject = convertSnakeToCamel(testObject);
     *  console.log(JSON.stringify(camelCaseObject, null, 4));
     */
    const convertSnakeToCamel = (obj) => {
        if (obj === null || typeof obj !== 'object') {
            return obj;
        }
    
        if (Array.isArray(obj)) {
            return obj.map(convertSnakeToCamel);
        }
    
        return Object.keys(obj).reduce((acc, key) => {
            const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
            acc[camelKey] = convertSnakeToCamel(obj[key]);
            return acc;
        }, {});
    }
    
    module.exports = convertSnakeToCamel;
  • query에서도 column 하나만 바꿔주면 되는 경우도 있고, 아니면 많은 column들을 모두 바꿔야하는 경우와 같이 다양해서 정말 한 두개의 column만 바꿔주면 되는 것은 1번 방식으로 별칭으로 지정해줬고, 그 외에 *로 많은 수의 snake_case 형태의 column들을 가져오는 경우에는 내가 만든 convertSnakeToCamel 함수를 이용해 변환했다!

솔직히 그냥 모든 변수명 형식을 하나로 통일하고 싶은데 DB table의 column명은 snake_case로 javascript는 모든 변수명을 camelCase로 쓰는 관습이 있다보니 변환을 해주어야 하는 부분 조금 불편하다.🤨 그래도 연습삼아 하니 이마저도 재미있다.😋

profile
이것저것 관심 많은 개발자👩‍💻

0개의 댓글