Vue

Vue를 활용한 프로젝트 후기

수연 (Suyeon) 2023. 9. 3. 20:30
반응형

서울 열린 데이터 광장에서 서울에 있는 음식점들을 모아서 검색 사이트를 만들었습니다. React만 사용하다가 Vue를 사용하면서 좋은 점 등을 포스팅하려고 합니다.

 

📌 만들게 된 계기

JSON으로 데이터를 생성해서 다루기만 했지 API를 활용한 프로젝트를 만들어 본 경험이 없었고,

VueReact보다 데이터를 다루는 데 훨씬 효율적이라는 지인의 얘기를 듣고 Vue를 기반으로 한 API 프로젝트를 만들게 되었습니다.

 

📌 Vue를 사용하면서 느낀점

1. Vue에서 template와 script가 나눠져 있는 덕분에 가독성이 좋은 코드를 구현할 수 있습니다.

Vue를 처음 접했을 때 다소 어색했던 부분이었습니다. 하지만 HTML과 JavaScript 부분이 따로 나누어져 있어서 프로젝트를 구현할 때 깔끔하게 코드를 작성할 수 있는 좋은 점이었다고 생각합니다.

구인 공고를 볼 때마다 우대 조건에 Vue가 많이 있는 이유가 이 때문인지는 모르겠지만 어느 정도 영향은 있을 것 같다고 생각했습니다.

 

 

2. React보다 데이터를 시각적 그리고 효율적으로 처리할 수 있습니다.
// React 코드

function App() {
  // 변수 생성
  const [datas, setDatas] = useState<apiType[]>([]);
  const [originalData, setOriginalData] = useState<apiType[]>([]);
  const [listLength, setListLength] = useState<number>(0);
  const [filter, setFilter] = useState("구 선택");
  const [keyword, setKeyword] = useState("");
  
  // 함수 생성
  const clickedSearchBtn = () => {
    if (filter === "구 선택" && keyword === "") {
      setDatas(originalData);
      setListLength(originalData.length);
    }

    if (filter !== "구 선택" && keyword === "") {
      const list = originalData.filter((store) => store.CGG_CODE_NM === filter);
      setDatas(list);
      setListLength(list.length);
    }

    if (filter === "구 선택" && keyword !== "") {
      const list = originalData.filter((store) =>
        store.UPSO_NM.includes(keyword)
      );

      setDatas(list);
      setListLength(list.length);
    }

    if (filter !== "구 선택" && keyword !== "") {
      const list = originalData.filter((store) =>
        findStore(store, filter, keyword)
      );

      setDatas(list);
      setListLength(list.length);
    }

    return <ShowList list={datas} listLength={listLength} />;
  };

  const findStore = (store: apiType, filter: string, keyword: string) => {
    return (
      store.CGG_CODE_NM.includes(filter) && store.UPSO_NM.includes(keyword)
    );
  };
}

React 변수와 함수를 따로 생성하는 부분이 없고 JavaScript처럼 동일하게 사용합니다. 개발자들마다 코드를 작성하는 스타일이 달라서 서로의 코드를 이해할 때 어려운 부분이 생길 수도 있다고 생각합니다.

또는 하나의 파일에 여러 개의 컴포넌트가 있다면 컴포넌트만의 변수와 함수로 인해 가독성이 떨어질 수 있다고 생각합니다.

 

// Vue 코드

<script>
export default {
  // 변수 생성
  data: () => ({
    list: null,
    resetList: null,
    filter: "구 선택",
    keyword: "",
    showModal: true,
    storeInfo: null,
    map: null,
    mark: null,
  }),
  
  // 함수 생성
  methods: {
    clickedSearchBtn() {
      if (this.filter === "구 선택" && this.keyword === "") {
        this.list = this.resetList;
      }

      if (this.filter !== "구 선택" && this.keyword === "") {
        this.list = this.resetList.filter(
          (store) => store.CGG_CODE_NM === this.filter
        );
      }

      if (this.filter === "구 선택" && this.keyword !== "") {
        this.list = this.resetList.filter((store) =>
          store.UPSO_NM.includes(this.keyword)
        );
      }

      if (this.filter !== "구 선택" && this.keyword !== "") {
        this.list = this.resetList.filter((store) =>
          this.findStore(store, this.filter, this.keyword)
        );
      }
    },

    findStore(store, filter, keyword) {
      return (
        store.CGG_CODE_NM.includes(filter) && store.UPSO_NM.includes(keyword)
      );
    }
  },
 }
 </script>

하지만 Vue변수와 함수를 따로 선언하는 부분이 있어서 변수나 함수가 많아져도 같이 묶여있기 때문에 가독성이 좋지 않다고 느껴본 적은 없었고, API를 사용하는 만큼 처리해야 하는 데이터의 양이 많은데 이럴 땐 Vue를 사용하는 것이 더 좋은 것 같습니다.

또 변수뿐만 아니라 컴포넌트를 import 해야 할 때 등 Vue가 더 편리하다고 느껴졌습니다.

 

 

3. React와 크게 다르지 않아서 Vue를 따로 배우지 않아도 쉽게 사용할 수 있습니다.

React를 먼저 배운 사람은 Vue에 대한 강의를 따로 듣지 않아도 인터넷에서 조금만 찾아보거나 유튜브에서 간단하게 정리한 영상만 보더라도 프로젝트를 구현할 수 있었습니다.

저는 Vue 문서 사이트에서 튜토리얼 과정을 통해 공부를 했습니다. 쉽게 설명이 되어있고 버전 2와 버전 3 각각 나누어져서 설명이 되어있는 부분 덕분에 이해하는데 큰 도움이 되었습니다.

 

 

📌 결론

Vue를 시작하지 전까진 어려울 것 같아서 망설였는데 막상 하고 나니 React와 비슷해서 어려운 점이 거의 없었습니다.

다음에는 TypeScript까지 적용해서 다른 프로젝트를 구현해보고 싶습니다.

728x90