2026 엑셀 신기능 '데이터 형식' 총정리 | 업무 자동화 실전 활용법

엑셀 데이터 관리의 판도를 바꿀, '커스텀 데이터 형식'의 모든 것을 정리했습니다! 필드 적용부터 목록 상자, 피벗테이블 활용까지, 핵심 기능을 빠르게 확인해보세요!✨

# 데이터분석 # 엑셀기능

작성자 :
오빠두엑셀
최종 수정일 : 2025. 11. 28. 07:47
URL 복사
메모 남기기 : (8)

2026 엑셀 신기능 '데이터 형식' 실전 활용법

엑셀 커스텀 데이터 형식 목차 바로가기
영상 강의


예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [실무기초] 엑셀 커스텀 데이터 형식 자동화 + 실전 활용법
    예제파일

.

라이브 강의 전체영상도 함께 확인해보세요!

위캔두 회원이 되시면 매주 오빠두엑셀에서 진행하는 라이브강의 풀영상을 확인하실 수 있습니다.


Script Lab 으로 데이터 형식 생성하기

MS에서 제공하는 Script Lab 추가기능을 활용해 커스텀 데이터 형식을 생성하는 방법을 알아보겠습니다. Script Lab은 엑셀 2016 이후 버전에서 지원하지만, 커스텀 데이터 형식을 생성하려면 엑셀 2021 이후 버전 사용을 권장합니다.

  1. 먼저 Script Lab 추가기능을 설치하기 위해 [홈] 탭 - [추가기능] - [더 많은 추가기능] 으로 이동합니다.
    엑셀-추가기능-설치
    홈 탭 - 추가기능으로 이동합니다.
    오빠두Tip : M365 이전 버전 사용자는 [삽입] - [내 추가기능]에서 추가기능을 설치할 수 있습니다.
    2021-추가기능-삽입
  2. 검색창에 Script 를 검색하고 Script Lab을 선택해 추가기능을 설치합니다.

    엑셀-script-lab-설치
    Script Lab 추가기능을 검색한 후 설치합니다.
  3. 엑셀 메뉴 목록에 [Script Lab] 탭이 추가되었으면, 이제 커스텀 데이터 형식을 생성할 수 있습니다. Script Lab 탭에서 [Code]를 클릭한 후, 햄버거 모양() 버튼(☰) - New 를 클릭해 새 스크립트를 생성합니다.

    script-lab-새로운-스크립트-생성
    Script Lab 에서 햄버거 모양 아이콘 - New 를 클릭해 새 스크립트를 생성합니다.
  4. 새 스크립트가 생성되었으면, 기존 코드를 지우고 아래 코드를 붙여넣습니다.
    엑셀-커스텀-데이터-형식-script-lab-코드
    커스텀 데이터 생성 코드를 붙여넣습니다.
    // 커스텀 데이터 타입을 생성하는 Script 코드입니다.
    // 25년 11월 기준, Script Lab 에서만 동작합니다.
     
    // ========================================
    // 📌 카테고리 설정 영역 (사용자가 편집 가능)
    // ========================================
    const categoryConfig = {
      //"기본 정보": ["사진","이름","사번","이메일","직급","부서","직무"],
      //"고용 정보": ["입사일","고용형태","근무지","연봉(만원)"],
      //"평가": ["평점", "리뷰수"],
      //"기타": [] // 나머지 항목 자동 등록
    };
    // ========================================
     
    Office.onReady(() => {
      const btn = document.getElementById("run");
      if (btn) {
        btn.addEventListener("click", () => {
          run();
        });
      }
    });
     
    async function run() {
      try {
        await addBookEntities();
      } catch (error) {
        console.error("addBookEntities error:", error);
      }
    }
     
    async function addBookEntities() {
      await Excel.run(async (context) => {
        // 0) 현재 선택 영역에서 표 찾기
        const selection = context.workbook.getSelectedRange();
        const tablesOnSelection = selection.getTables(false);
        tablesOnSelection.load("items/name");
        await context.sync();
     
        if (tablesOnSelection.items.length === 0) {
          throw new Error(
            "현재 선택한 범위와 겹치는 표가 없습니다. 표 안쪽 셀을 선택한 뒤 다시 실행해 주세요."
          );
        }
     
        const table = tablesOnSelection.items[0];
        console.log("Target table:", table.name);
     
        // 1) 기존 '커스텀데이터' 컬럼이 있는지 확인
        const existingColumn = table.columns.getItemOrNullObject("커스텀데이터");
        existingColumn.load("isNullObject");
        await context.sync();
     
        let entityColumn;
     
        if (!existingColumn.isNullObject) {
          // 기존 컬럼이 있으면 데이터만 초기화하고 재사용
          console.log("기존 '커스텀데이터' 컬럼 발견 - 데이터를 초기화합니다.");
          entityColumn = existingColumn;
     
          // 데이터 영역만 클리어 (헤더는 유지)
          const dataBodyRange = entityColumn.getDataBodyRange();
          dataBodyRange.clear(Excel.ClearApplyTo.contents);
          await context.sync();
        } else {
          // 컬럼이 없으면 맨 앞에 새로 추가
          console.log("'커스텀데이터' 컬럼 없음 - 새로 추가합니다.");
          entityColumn = table.columns.add(0, null, "커스텀데이터");
          await context.sync();
        }
     
        // 2) 헤더 / 데이터 로드
        const headerRange = table.getHeaderRowRange();
        const dataRange = table.getDataBodyRange();
        headerRange.load("values");
        dataRange.load("values, numberFormat");
        await context.sync();
     
        const headers = headerRange.values[0] as string[];
        const rows = dataRange.values;
        const numberFormats = dataRange.numberFormat;
     
        console.log("headers:", headers);
        console.log("row count:", rows.length);
        if (rows.length === 0) {
          console.warn("No data rows in table.");
          return;
        }
     
        // 날짜 형식인지 확인하는 헬퍼 함수
        const isDateFormat = (format: string): boolean => {
          if (!format) return false;
          const datePatterns = [
            /[yYmMdD]/,  // 년월일 패턴
            /\//, // 슬래시
            /-/,  // 하이픈
          ];
          return datePatterns.some(pattern => pattern.test(format));
        };
     
        // 백분율 형식인지 확인하는 헬퍼 함수
        const isPercentFormat = (format: string): boolean => {
          if (!format) return false;
          return format.includes('%');
        };
     
        // 날짜 값을 변환하는 헬퍼 함수
        const convertExcelDate = (value: any): Date | null => {
          if (value instanceof Date) return value;
          // 30000 = 1982년 2월 18일, 60000 = 2064년 4월 8일
          if (typeof value === "number" && value > 40000 && value < 60000) {
            // 엑셀 날짜 숫자를 JavaScript Date로 변환
            const date = new Date((value - 25569) * 86400 * 1000);
            return date;
          }
          return null;
        };
     
        // 카테고리 설정에서 이미 정의된 필드들 수집
        const definedFields = new Set();
        Object.values(categoryConfig).forEach((fields) => {
          fields.forEach((field) => definedFields.add(field));
        });
     
        const entities = rows.map((row, rowIndex) => {
          const properties: any = {};
          const usedFields = new Set(); // 실제로 데이터가 있는 필드 추적
     
          // 제목으로 쓸 필드/값 결정
          let titlePropertyName: string | null = null;
          let titleText: string = "";
          let mainImageProp: string | null = null;
     
          // 1) 한 번 돌면서 properties 구성
          headers.forEach((header, idx) => {
            const rawValue = row[idx];
     
            // 빈 값 체크
            if (rawValue === null || rawValue === undefined || rawValue === "") {
              return; // 빈 값은 properties에 추가하지 않음
            }
     
            // 현재 셀의 numberFormat 확인
            const cellFormat = numberFormats[rowIndex][idx];
            const isDate = isDateFormat(cellFormat);
            const isPercent = isPercentFormat(cellFormat);
     
            const isUrl =
              typeof rawValue === "string" &&
              (rawValue.includes("http://") ||
                rawValue.includes("https://") ||
                rawValue.includes("www."));
     
            const numValue =
              typeof rawValue === "number" ? rawValue : Number(rawValue);
            const isNumeric = !isNaN(numValue);
     
            if (isUrl) {
              // URL (이미지)
              properties[header] = {
                type: "WebImage",
                address: rawValue,
              };
              if (!mainImageProp) {
                mainImageProp = header;
              }
            } else if (isDate && isNumeric) {
              // 날짜 형식 - String으로 변환하여 처리
              const dateValue = convertExcelDate(rawValue);
              if (dateValue) {
                properties[header] = {
                  type: "String",
                  basicValue: dateValue.toISOString().split('T')[0], // YYYY-MM-DD 형식
                };
              } else {
                properties[header] = {
                  type: "String",
                  basicValue: rawValue.toString(),
                };
              }
            } else if (isPercent && isNumeric) {
              // 백분율 형식 반환
              const percentValue = Math.round(numValue * 100);
              properties[header] = {
                type: "String",
                basicValue: `${percentValue}%`,
              };
            } else if (isNumeric) {
              // 일반 숫자
              properties[header] = {
                type: "Double",
                basicValue: numValue,
              };
            } else {
              // 문자열
              properties[header] = {
                type: "String",
                basicValue: rawValue.toString(),
              };
            }
     
            usedFields.add(header);
          });
     
          // 2) 카드 제목으로 사용할 필드 선택
          if (headers.includes("도서명")) {
            titlePropertyName = "도서명";
          } else {
            const titleIdx = headers.findIndex((h) =>
              h.toLowerCase().includes("title")
            );
            if (titleIdx >= 0) {
              titlePropertyName = headers[titleIdx];
            } else if (usedFields.size > 0) {
              titlePropertyName = Array.from(usedFields)[0];
            }
          }
     
          if (titlePropertyName && properties[titlePropertyName]) {
            titleText = properties[titlePropertyName].basicValue?.toString() || titlePropertyName;
          } else {
            titleText = row[0] != null ? row[0].toString() : "";
          }
     
          // 3) 카테고리별 섹션 구성
          const sections: any[] = [];
     
          // categoryConfig가 비어있으면 카테고리 구분 없이 모든 필드를 하나의 섹션으로
          if (Object.keys(categoryConfig).length === 0) {
            const allFields = Array.from(usedFields).filter(
              (field) => properties[field]
            );
     
            if (allFields.length > 0) {
              sections.push({
                layout: "List",
                properties: allFields,
              });
            }
          } else {
            // 정의된 카테고리들을 순회하며 섹션 생성
            Object.entries(categoryConfig).forEach(([categoryName, fields]) => {
              // "기타" 카테고리는 나중에 처리
              if (categoryName === "기타") return;
     
              // 실제로 데이터가 있는 필드만 필터링
              const existingFields = fields.filter(
                (field) => usedFields.has(field) && properties[field]
              );
     
              if (existingFields.length > 0) {
                sections.push({
                  layout: "List",
                  title: categoryName,
                  properties: existingFields,
                });
              }
            });
     
            // 4) "기타" 카테고리 처리 - 정의되지 않은 필드들 추가
            const otherFields = Array.from(usedFields).filter(
              (field) => !definedFields.has(field) && properties[field]
            );
     
            if (otherFields.length > 0) {
              sections.push({
                layout: "List",
                title: "기타",
                properties: otherFields,
              });
            }
          }
     
          // 섹션이 실제로 있을 경우 카드 레이아웃 구성
          const cardLayout: any = {
            title: {
              property: titlePropertyName || headers[0],
            },
          };
     
          // 섹션이 있는 경우에만 추가
          if (sections.length > 0) {
            cardLayout.sections = sections;
          }
     
          // 메인 이미지가 있는 경우에만 추가
          if (mainImageProp && properties[mainImageProp]) {
            cardLayout.mainImage = { property: mainImageProp };
          }
     
          const entity: any = {
            type: "Entity",
            text: titleText,
            properties,
            layouts: {
              compact: { icon: "Book" },
              card: cardLayout,
            },
          };
     
          // 메인 이미지 설정
          if (mainImageProp && properties[mainImageProp]) {
            entity.layouts.card.mainImage = { property: mainImageProp };
          }
     
          return [entity];
        });
     
        // 5) 엔터티 값 넣기 (기존 또는 새로 추가된 컬럼에)
        entityColumn.getDataBodyRange().valuesAsJson = entities;
        await context.sync();
     
        console.log("커스텀 데이터 타입 생성 완료!");
      });
    }
  5. 이후 이름 또는 육각형모양 아이콘을 클릭한 후, 스크립트의 이름을 변경합니다. 이번에는 '커스텀 데이터 생성 스크립트' 라고 이름을 변경하겠습니다.

    script-lab-이름-수정
    스크립트 이름을 변경합니다.
  6. 이제 스크립트를 실행하면 커스텀 데이터를 만들 수 있습니다. 그 전에,  커스텀 데이터 형식을 만들려면 데이터 형식에 참조할 범위를 표로 변환해야 합니다. 예제파일의 [직원DB] 시트에서 데이터가 입력된 범위를 선택한 후, [삽입] - [표]를 클릭해 표 만들기를 실행하고 [확인] 버튼을 클릭해 범위를 표로 변환합니다.

    엑셀-표-만들기
    데이터 형식을 등록할 범위를 표로 변환합니다.
  7. 이제 표를 선택한 후, Script Lab 코드 창에서 재생 버튼을 클릭합니다.

    엑셀-커스텀-데이터-형식-코드-실행
    Script Lab 에서 재생버튼을 클릭합니다.
  8. 화면에 보이는 Run 버튼을 클릭하면 표의 첫번째 열에 커스텀 데이터 형식 필드가 생성됩니다.

    엑셀-커스텀-데이터-형식-만들기
    Run 버튼을 클릭하면 데이터 형식이 생성됩니다.

커스텀 데이터 고급 설정 팁

  1. M365 최신 버전을 사용중이라면 커스텀 데이터에 카테고리를 적용할 수 있습니다. 코드에서 categoryConfig 변수의 주석표시(//)를 모두 제거합니다.

    커스텀-데이터-형식-카테고리-설정
    CategoryConfig 변수에서 주석표시(//)를 모두 제거합니다.
  2. 이후 필요에 따라 커스텀 데이터 형식에 적용할 카테고리와 필드 명을 아래 구조로 작성합니다. 아래 기타에는 카테고리로 등록되지 않은 나머지 필드가 자동으로 분류됩니다.
    "카테고리1": ["필드", "필드", "필드", ... ],
    "카테고리2": ["필드", "필드", ... ],
    "카테고리3": ["필드", "필드", ... ],
    "기타": []
  3. 카테고리를 모두 분류한 후, 재생버튼을 클릭하고 [Run]을 클릭해 스크립트를 다시 실행하면 다음과 같이 카테고리별로 필드가 구분된 커스텀 데이터 형식이 완성됩니다.

    엑셀-커스텀-데이터-형식-카테고리
    필드가 각 카테고리별로 구분된 데이터 형식이 완성됩니다.

활용1: VLOOKUP 보고서 자동화

  1. 커스텀 데이터 형식은 VLOOKUP 관련 작업을 획기적으로 개선할 수 있습니다. 예제파일의 [직원정보] 시트에서 미리 작성된 사번의 직원 정보를 XLOOKUP 함수로 검색해보겠습니다. B2셀을 선택한 후, 다음과 같이 XLOOKUP 함수를 작성합니다.
    =XLOOKUP(A2,직원DB!C:C,직원DB!A:A)

    엑셀-커스텀-데이터-형식-vlookup
    XLOOKUP 함수로 사번의 직원 데이터를 검색합니다.
  2. 수식을 입력하고 아래로 자동채우기하면 그림과 같이 커스텀 데이터 형식 자체로 값을 검색할 수 있습니다.

    엑셀-데이터-형식-참조
    XLOOKUP 결과로 커스텀 데이터 형식 값이 출력됩니다.
  3. 커스텀 데이터 형식은 별도의 함수를 사용하지 않아도 데이터를 편리하게 삽입할 수 있습니다. 데이터 형식이 입력된 범위를 선택하면 우측 상단에 [데이터 삽입] 버튼이 표시됩니다. 버튼을 클릭하고 넣고자 하는 필드를 하나씩 선택하면 우측으로 데이터가 추가됩니다.

    엑셀-데이터-형식-필드-추출
    데이터 삽입에서 원하는 필드를 편리하게 추가할 수 있습니다.
  4. 이 옵션은 셀 참조에서도 동일하게 동작합니다. 시트에서 비어있는 셀을 선택한 후, 커스텀 데이터 형식이 입력된 B2:B5 범위를 선택하면 그림과 같이 필드 선택창이 표시됩니다.

    엑셀-커스텀-데이터-형식-셀-참조
    셀 참조에서도 필드를 편리하게 추가할 수 있습니다.
  5. 마우스로 필드를 직접 선택하거나, 범위 뒤에 마침표(.)를 찍고 원하는 필드를 직접 입력해서 안에 포함된 데이터를 편리하게 추출할 수 있습니다.

    커스텀-데이터-형식-필드-지정
    원하는 필드를 직접 입력해서 추출할 수 있습니다.

활용2: 목록 상자 활용

  1. 커스텀 데이터 형식은 목록 상자에도 적용할 수 있습니다. 이를 활용하면 목록 상자로 데이터를 선택 → 카드 형식으로 상세 데이터를 확인할 수 있어 사용자 편의성을 크게 높일 수 있습니다. 먼저 커스텀 데이터 형식를 이름 범위로 등록합니다. 예제파일에서 커스텀 데이터 형식을 생성한 [직원DB] 시트로 이동합니다. 이후, [수식] 탭 - [이름관리자] 를 클리하거나 단축키 Ctrl + F3 을 눌러 이름 관리자를 실행합니다.

    엑셀-이름-관리자
    이름관리자를 실행합니다.
  2. 이름 관리자가 실행되면 [새로만들기]를 클릭해 이름 범위를 등록합니다.

    엑셀-이름-관리자-새로-만들기
    이름관리자에서 새로 만들기를 클릭합니다.
  3. [새 이름] 대화상자가 실행되면 이름으로 "직원데이터형식"을 입력한 후, 참조 대상으로 커스텀 데이터 형식이 입력된 표 범위를 선택합니다. 표 범위를 선택하면 "표이름[필드]"와 같은 구조적 참조 방식으로 범위가 입력됩니다. 선택을 모두 마쳤으면 [확인] 버튼을 클릭해 이름 범위를 등록합니다.

    엑셀-표-구조적-참조-이름-생성
    이름 범위의 이름과 참조 대상을 입력합니다.
  4. 이제 [직원정보] 시트에서 목록 상자를 적용할 범위를 선택한 후, [데이터] 탭 - [데이터 유효성] 검사로 이동합니다.

    엑셀-데이터-유효성-검사-목록상자
    목록상자를 적용할 범위를 선택한 후, 데이터 - 데이터 유효성 검사로 이동합니다.
  5. 데이터 유효성 대화상자가 실행되면 제한 대상으로 [목록]을 선택하고 원본 범위로 "=직원데이터형식"을 직접 입력하거나, 원본 범위를 선택하고 F3을 눌러 이름 붙여넣기를 실행해 범위를 편리하게 입력할 수 있습니다.

    엑셀-목록-상자-이름-넣기
    제한 대상은 목록을 선택하고, 원본으로 직원데이터형식 이름 범위를 입력합니다.
  6. 이제 목록상자를 선택하면 직원 데이터 형식으로 값이 입력되며, 데이터 형식 아이콘을 클릭해 직원 정보를 편리하게 확인할 수 있습니다.

    엑셀-목록-상자-완성
    목록상자로 값을 선택하면 직원 데이터가 입력됩니다.

활용3: 피벗테이블 활용

  1. 스텀 데이터 형식은 피벗테이블에도 적용할 수 있습니다. [쿠팡DB] 시트에서 미리 추가된 [커스텀데이터] 필드를 참조해 피벗테이블을 만들어보겠습니다.

    엑셀-쿠팡-커스텀-데이터
    쿠팡DB의 커스텀 데이터로 피벗테이블을 생성합니다.
  2. 쿠팡DB 시트의 표를 선택한 후, [삽입] - [피벗테이블] 을 클릭하고 '새 워크시트'를 선택 후 확인 버튼을 클릭해 피벗테이블을 생성합니다.

    엑셀-피벗테이블-만들기
    삽입 - 피벗테이블 - 새 워크시트로 피벗 테이블을 생성합니다.
  3. 피벗테이블이 생성되면 "행 영역: 유형, 커스텀데이터, 사진", "값 영역: 할인가" 을 차례대로 추가해 피벗테이블을 구성합니다.

    엑셀-커스텀-데이터-형식-피벗테이블
    행 영역과 값 영역에 필드를 드래그해서 배치합니다.
  4. 이후 피벗테이블을 선택하고 [디자인] 탭에서 보고서 레이아웃을 '테이블 형식으로 표시'로 변경하고, 부분합은 '모두 표시 안함'을 선택합니다. 디자인을 바꾸고 열 너비를 적절히 맞추면 그림과 같이 깔끔한 피벗테이블이 완성됩니다.
  5. 이제 피벗테이블에서 데이터 형식 아이콘을 클릭해 제품의 상세 정보를 편리하게 확인할 수 있습니다.
    엑셀-피벗테이블-데이터-형식-등록
    피벗테이블에서 데이터 형식 카드 정보를 편리하게 확인할 수 있습니다.
    오빠두Tip : 모니터 크기가 작을 경우 '데이터 형식' 아이콘이 잘 클릭되지 않을 수 있습니다. 그런 경우, 피벗테이블 분석 - 선택 에서 '선택 가능' 옵션을 체크 해제합니다.
    피벗테이블-선택-옵션-수정

[엑셀 2021] 커스텀 데이터 형식 생성하기

  1. M365 이전 버전을 사용중이거나 Script Lab 사용이 어려울 경우, 파워쿼리만으로 커스텀 데이터 형식을 등록할 수 있습니다. 단, 파워쿼리로 등록한 커스텀 데이터 형식은 '이미지'와 '카테고리' 설정이 제한되는 점을 참고하세요. 예제파일에서 [2021이전] 시트로 이동한 후, 표를 선택하고 [데이터] 탭 - [테이블/범위에서]를 클릭해 파워쿼리 편집기를 실행합니다.

    엑셀-파워쿼리-실행
    표를 선택한 후, 데이터 - 테이블/범위에서를 클릭해 파워쿼리 편집기를 실행합니다.
  2. 파워쿼리 편집기가 실행되면 [변환] 탭 - [데이터 형식 만들기]를 클릭합니다.

    엑셀-파워쿼리-데이터-형식
    변환 탭 - 데이터 형식 만들기 버튼을 클릭합니다.
  3. [데이터 형식 만들기] 대화상자가 실행되면 '고급'을 선택하고 데이터 형식 이름을 적절히 수정합니다. 이번에는 예제로 '직원데이터'라고 작성했습니다. 이후, 데이터 형식에 사용할 필드를 추가합니다. 사용 가능한 열 목록에서 첫번째 항목을 선택하고 Shift 키를 누른 상태로 마지막 항목을 선택하면 모든 항목이 선택됩니다. 모든 항목을 선택한 상태에서 [추가] 버튼을 클릭해 데이터 형식의 필드로 등록합니다.

    엑셀-파워쿼리-데이터-형식-만들기
    데이터 형식 만들기 창에서 '고급' 선택 후, 데이터 형식 이름과 필드를 변경합니다.
  4. 이후 오른쪽 '선택한 열' 목록에서 데이터 형식 카드에 표시할 필드의 순서를 바꿀 수 있습니다. 사용자가 많이 확인할 값인 '이메일'을 선택하고 위쪽 화살표 버틀을 클릭해 위치를 옮깁니다.

    엑셀-데이터-형식-표시-순서-변경
    데이터 형식 카드에 표시될 필드 순서를 변경합니다.
  5. 마지막으로 '열 표시'에서 데이터 항목의 기본 레이블로 표시할 값을 선택한 후, [확인] 버튼을 클릭하면 데이터 형식이 등록됩니다.
    데이터-형식-레이블-설정
    데이터 형식의 기본 레이블을 선택한 후, [확인] 버튼을 클릭합니다.
  6. 파워쿼리 편집기에서 [파일] 탭 - [닫기 및 로드]를 클릭해 쿼리를 시트에 출력합니다.

    엑셀-파워쿼리-저장
    파일 - 닫기 및 로드를 클릭해 쿼리를 출력합니다.
  7. 이제 엑셀에서 데이터 형식을 바로 사용할 수 있습니다. 이후 표에 데이터가 새롭게 추가되면, 파워쿼리로 출력한 표를 우클릭 - 새로고침을 클릭해 데이터를 갱신할 수 있습니다.

    엑셀-파워쿼리-데이터-형식-새로-고침
    새로운 데이터가 추가되면, 표를 우클릭 - 새로고침으로 갱신할 수 있습니다.
5 4 추천
게시글평점
8 댓글
Inline Feedbacks
View all comments
8
0
Would love your thoughts, please comment.x