React-native 프로젝트 회고 - Mango-Market

Junho Yun·2023년 1월 13일
0

sparta

목록 보기
2/4

1. 프로젝트 : Mango-Market 회고

프로젝트 소개

비싼 집값 시대에 집에있는 오래된 물건이 나의 집을 차지하는 것을 참을 수 없었습니다.

중고거래를 통해 필요없는 물품을 판매하시고, 같은 집이지만 더 넓은 환경에서 지내보세요.

github & notion

repo : https://github.com/yunjunhojj/Mango-Market
notion : https://perpetual-product-9cd.notion.site/Team-Project-Template-0fe56e2827754095b3a22e7ce486ed16

2. 역할 및 느낀점

  • 팀장이지만, 팀원 및 나 자신의 성장에 도움이 되도록 팀을 이끌지 못해서 아쉽습니다.

  • 디자인 깔끔하게 정리해주시고, 추가로 댓글까지 구현해주셔서 만족스러운 결과물 이였습니다..

  • 이번 네이티브 프로젝트 하면서 사실 혼자 수동적으로 작성한 코드가 많이 없었고 다른 사람들에 비해 실력이 부족하여 도움이 되지 못한것 같아 앞으로 남은 기간동안 최선을 다해 공부하고 싶다.

  • 먼저 기능을 구현했으면 다른 팀원들의 기능을 도와서 했어야 했는데 그러지 못한 점이 아쉽지만 추가 기능까지 구현 완료해 프로젝트가 성공적으로 끝난 것 같아서 만족합니다.

  • 100퍼센트 완성도있는 프로젝트가 아니라 아쉽지만 부족한부분을알게되고,
    더발전해야되는 계기를 만들어준 프로젝트였습니다.

  • 잘하시는 분들이 많은 조여서 민폐가 될까 걱정이 많았는데 도움을 정말 많이 주신덕에 헤쳐나간것같아 조원분들께 감사한 마음이 듭니다.

3. Keep

github

  • 항상 pull request는 팀원 모두가 있을 때 진행 했습니다.

진행

  • 정기적으로 회의를 하여 진행상황을 공유하고 원할하게 의견을 공유하였습니다.
  • 기본 기능을 최우선으로 진행하고, 이후에 추가로 기능을 구현했습ㄴ디ㅏ.

4. problem

코드 구현 (개인)

  • RN에 대해 이해가 어려워 코드 작성을 할 때 다른 사람에 도움을 많이 받았습니다.
  • 서버와의 통신에 대한 이해가 없어서 해야 할 일에 대한 정확한 이해가 어려웠습니다.
  • 서버와 통신하면서 비동기적인 코드에서 해결하는 것에 많은 오류가 발생하고, 시간이 소모 됐습니다.

진행 (협업)

  • github 및 팀노션 관리가 미흡했습니다.
  • 자신이 맡은 기능 구현이 끝나고 다른 어려운 기능들을 함께 맡아서 도움을 주지 못 했습니다.
  • Commit 메세지를 사용하는데 있어 적절히 사용하지못했습니다.

5. try

  • 문서화 작업 및 github 브랜치 관리에 더 신경써서 프로젝트를 원활하게 진행할 수 있도록 해야겠습니다.
    1. 회의록 작성을 하면서 진행 사항을 한 눈에 볼 수 있도록 정리
    2. github issue 관리, pull request 관리
  • 팀원들이 조금 더 편하고, 의욕적으로 프로젝트를 진행할 수 있도록 하는 방법을 생각해봐야겠습니다.

6. 개인의 노력

  • git에 대한 이해를 기반으로 github를 정확하게 활용할 수 있도록 준비해야겠고 생각했습니다.

  • 자바스크립트,React에대한 공부를 더 해야겠다는 생각이 들었습니다.

  • 공식문서를 기반으로 문제를 해결할 수 있도록 항상 연습해야겠습니다.

마지막 코드

useFocusEffect(
    useCallback(() => {
      if (!authService.currentUser) {
        // 로그인 X
        reset({
          index: 1,
          routes: [
            {
              name: "Tabs",
              params: {
                screen: "Home",
              },
            },
            {
              name: "Stacks",
              params: {
                screen: "Login",
              },
            },
          ],
        });
        return;
      }
      getPostDate();
    }, [])
  );
  • 로그인 하지 않으면 Home이 아닌 Login 화면으로 이동
  • 로그인을 했으면 Home 화면을 바로 보여준다
const uploadImage = async () => {
    const blobImage = await new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();
      xhr.onload = function () {
        resolve(xhr.response);
      };
      xhr.onerror = function () {
        reject(new TypeError("네트워크 요청 실패"));
      };
      xhr.responseType = "blob";
      xhr.open("get", image, true);
      xhr.send(null);
    });
    // Create the file metadata
    /** @type {any} */
    const metadata = {
      contentType: "image/jpeg",
    };

    const storageRef = ref(storage, "Categories/" + Date.now());
    const uploadTask = uploadBytesResumable(storageRef, blobImage, metadata);

    uploadTask.on(
      "state_changed",
      (snapshot) => {
        const progress =
          (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
        console.log("Upload is " + progress + "% done");
        switch (snapshot.state) {
          case "paused":
            console.log("Upload is paused");
            break;
          case "running":
            console.log("Upload is running");
            break;
        }
      },
      (error) => {
        switch (error.code) {
          case "storage/unauthorized":
            break;
          case "storage/canceled":
            break;

          case "storage/unknown":
            break;
        }
      },
      () => {
        getDownloadURL(uploadTask.snapshot.ref).then((downloadURL) => {
          setImage("null");
          const newBoard = createNewBoard(downloadURL);
          addBoard(newBoard);
        });
      }
    );
  };

const createNewBoard = (img) => {
    return {
      userId: currentId,
      title,
      content,
      price,
      date: new Date(),
      isDone: false,
      isEdit: false,
      img,
    };
  };
  const addBoard = async (newBoard) => {
    await addDoc(collection(dbService, "posts"), newBoard);
    setContent("");
    setTitle("");
    setPrice("");
    Alert.alert("작성 완료");
    navigation.navigate("Home");
  };

const pickImage = async () => {
    // No permissions request is necessary for launching the image library
    let result = await ImagePicker.launchImageLibraryAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.All,
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    });

    if (!result.canceled) {
      setImage(result.assets[0].uri);
    }
  };
  • expo의 image picker를 통해 모바일 환경에서 파일을 선택하고, 해당 파일을 파이어 베이스에 업로드 하는 코드입니다.
  • 추가로 위에서 업로드한 이미지 파일의 url을 포함한 게시글도 업로드하면서 게시글에 사진을 띄어줄 수 있도록 하는 코드 입니다.
profile
의미 없는 코드는 없다.

0개의 댓글