Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KDT0_YebinSeo 직원 관리서비스 #64

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open

KDT0_YebinSeo 직원 관리서비스 #64

wants to merge 5 commits into from

Conversation

syb0127
Copy link

@syb0127 syb0127 commented Aug 18, 2023

📷 직원 사진 관리 서비스

직원들의 사진을 관리할 수 있는 사진 관리자 서비스를 만들어 보았습니다!

[과제 기간]

2023.8.9~ 2023.8.18

[과제 수행 및 제출 방법]

  1. 현재 저장소를 로컬에 클론(Clone)합니다.
  2. 자신의 본명으로 브랜치를 생성합니다.(구분 가능하도록 본명을 꼭 파스칼케이스로 표시하세요, git branch KDT0_이름)
  3. 자신의 본명 브랜치에서 과제를 수행합니다.
  4. 과제 수행이 완료되면, 자신의 본명 브랜치를 원격 저장소에 푸시(Push)합니다.(main 브랜치에 푸시하지 않도록 꼭 주의하세요, git push origin KDT0_이름)
  5. 저장소에서 main 브랜치를 대상으로 Pull Request 생성하면, 과제 제출이 완료됩니다!(E.g, main <== KDT0_이름)
  6. Pull Request 링크를 LMS로도 제출해 주셔야 합니다.
  7. main 혹은 다른 사람의 브랜치로 절대 병합하지 않도록 주의하세요!
  8. Pull Request에서 보이는 설명을 다른 사람들이 이해하기 쉽도록 꼼꼼하게 작성하세요!
  9. Pull Request에서 과제 제출 후 절대 병합(Merge)하지 않도록 주의하세요!
  10. 과제 수행 및 제출 과정에서 문제가 발생한 경우, 바로 담당 멘토나 강사에서 얘기하세요!

[유저 플로우 다이어그램]

image

[웹사이트 링크 및 사용방법]

링크: https://kakaojs-7b84e.web.app/index.html

파이어베이스를 사용하여 스크롤이 가능한 형태의 직원 정보 조회 및 수정 페이지를 만들었습니다. 첫 페이지가 프로필 페이지고 각 직원 정보가 버튼 형태로 나오기 때문에 클릭하고 몇 초가 지나면 맨 밑에 그 직원의 사진을 대체 할수 있는 팝업과 버튼이 뜹니다. 직원을 추가하고 싶으면 NavBar에 있는 "Add More Employees"를 누르면 직원 추가 페이지로 넘어갑니다. 직원 추가를 마치면 자동으로 프로필 페이지로 돌아옵니다. 데스크탑-모바일 반응형 페이지며, 사진 업데이트 버튼은 마우스가 올라가면 그라데이션으로 색이 바뀌고 그림자가 생기는 애니메이션을 추가 하였습니다. CSS에서도 child가 있는 요소는 child에 rem을 적용하였습니다. 또한 script.js 파일 안에서 DOM event를 사용하여 파이어베이스 데이터베이스에서 직원 정보를 불러내 리스팅 했습니다.

[사용한 기술 스택]

JS, HTML, CSS, 파이어베이스

[후기 및 아쉬운 점]

(이번에도) 깃이 제대로 꼬여서 제출하느라 애먹었습니다. 파이어베이스를 처음 써봐서 그런지 연동하는 작업이 꽤 오래 걸렸는데 굉장히 좋은 경험이었습니다! 다만 기능을 위주로 개발하다 보니 디자인에 신경을 못 썼고 처음 구상했던 카카오 프렌즈 정보 및 사진 관리 페이지로 발전시키지 못해 아쉽습니다(그래서 폴더 이름에 "카카오"가 들어간 것입니다).

@jinjoo-jung
Copy link

업로드 기능 구현 잘 되는 것 같아요! 나중에 수정 삭제 기능이랑 css 만 더 다듬어주시면 좋을 것 같아요! 상세 페이지도 만들면 좋을 것 같습니다 ㅎㅎ 과제하시느라 수고하셨습니다!!

@minseokiim
Copy link

업로드랑 수정기능 테스트 해봤는데 잘 동작합니다 .
사진 크기가 제각각이라서 프로필 카드 사이즈가 각각 다른데 이 부분은 이미지랑, 카드의 너비 자체에 고정된 사이즈를 주면 좀 더 깔끔할거 같습니다!

@jongsujin
Copy link

과제하느라 고생 많으셨습니다!

  • container 안에 img와 그 둘러 싸고 있는 칸 자체에 고정된 사이즈 주시면 괜찮을 것 같습니다!
  • $ 이 부분은 `` 처리를 해주시면 더 간결해보일 것 같습니다!
  • JS 파일을 따로 구분해서 해주시면 좀 더 폴더 구조가 깔끔해질 것 같습니다!

@wkdtnqls0506
Copy link

업로드랑 수정 기능 모두 정상적으로 작동하네요 🍀🍀
과제 리뷰 후 css 좀 더 가다듬으면 퀄리티 더 올라갈 것 같습니다!!
$('.~')는 제이쿼리 문법으로 알고 있는데 자바스크립트 문법으로 바꿔주시면 더 좋을 거 같습니당 ㅎㅎ
파이어베이스 처음 다루느라 고생 많으셨을텐데 과제 수고하셨습니다!!😁

Copy link

@jungHyeonS jungHyeonS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예빈님 과제하시느라 고생하셨습니다~
어려운 과제라 많이 힘드셨을텐데 기능별 스크립트로 잘작성해주신거같습니다
리뷰 드린 내용들만 참고부탁드리며 추후에는 스크립트내 중복된 코드와 이벤트 등록에 대해 신경써주시면 좋을꺼같습니다
리팩토링이 만약 예정되어있다면 스타일도 한번 수정해주시면 좋을꺼같습니다~

Comment on lines +6 to +14
const firebaseConfig = {
apiKey: "AIzaSyBLJjgAJr-CPkOMvQ5cXo_7XxRB457ClOY",
authDomain: "kakaojs-7b84e.firebaseapp.com",
projectId: "kakaojs-7b84e",
storageBucket: "kakaojs-7b84e.appspot.com",
messagingSenderId: "225584743925",
appId: "1:225584743925:web:7800682de75fbae054ccbc",
measurementId: "G-NCXB18TBVK"
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요런 config 설정같은경우는 script 함수 밖에 선언해주시는걸 추천드립니다
함수 안에 있으면 함수가 호출될때마다 config가 설정이 되어서 비효율적입니다~

Comment on lines +68 to +85
var template = ` <p>밑에 뜨는 프로필을 수정해주세요! 새로운 이미지를 클릭하고 몇초 뒤에 창이 뜨니 클릭은 꼭! 한번만 해주세요.</p>
<div class="product">
<button type="button" onclick="script('${doc.id}');">
<img class="image" src="${doc.data().image}" alt="프로필 사진"/>
<div class="flex-grow-1 p-4">
<h5 class="name">${doc.data().name}</h5>
<p class="email">${doc.data().email}</p>
<p class="phonenumber">${doc.data().phonenumber}</p>
<input class="form-control mt-2" type="file" id="image">
<button class="btn btn-danger mt-3" id="update"><span>사진 업데이트</span></button>
</div>
</button>
</div>`;
/*for (var i = 0; i < $('.container').length; i++){
console.log("inside for loop");
$('.container').remove($('.container')[i]);
}*/
$('.container').append(template);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

append 돔 이벤트가 forEach 루프에서 계속 반복적으로 호출될꺼같습니다
데이터가 많아진다면 돔 이벤트도 많아져서 성능에 문제가 발생할수도있습니다
이러한 부분은 template += `` 문법을 사용해서 데이터를 전부다 만들고 반복문 종료후 append 한번으로 처리하는것을 추천드립니다~

res.forEach((doc) => {
console.log(doc.data());

var template = `

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

var 변수는 es6 이후로는 사용하지 않습니다 let 혹은 const 사용하시는걸 추천드립니다!

<script defer src="/__/firebase/8.6.5/firebase-storage.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-HwwvtgBNo3bZJJLYd8oVXjrBZt8cqVSpeBNS5n7C8IVInixGAoxmnlMuBnhbgrkm" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script>
<script type="module">

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 html 파일 내에 스크립트가 같이 있는거 같습니다
추후에는 파일을 분리 하여 관리하는것을 추천드립니다~

Comment on lines +21 to +27
/*$('#send').click(function(){

var file = document.querySelector('#image').files[0];
var storageRef = storage.ref();
var route = storageRef.child('image/'+ file.name);
var uploadFile = route.put(file);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이러한 사용하지 않는 주석으로 된 코드는 삭제하시는것을 추천드립니다~
깃을 사용하고있어서 히스토리 관리가 되기때문에 코드 전체를 주석으로 남기지 않아도됩니다~

Comment on lines +58 to +66
const firebaseConfig = {
apiKey: "AIzaSyBLJjgAJr-CPkOMvQ5cXo_7XxRB457ClOY",
authDomain: "kakaojs-7b84e.firebaseapp.com",
projectId: "kakaojs-7b84e",
storageBucket: "kakaojs-7b84e.appspot.com",
messagingSenderId: "225584743925",
appId: "1:225584743925:web:7800682de75fbae054ccbc",
measurementId: "G-NCXB18TBVK"
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이러한 firebaseconfig가 html 파일마다 있는거 같습니다 이러한 부분을 별도의 파일로 분리하여 스크립트를 import하는 방식으로 하시면 좋습니다~

Comment on lines +86 to +92
$('#update').click(function(){

var file = document.querySelector('#image').files[0];
var storageRef = storage.ref();
var route = storageRef.child('image/'+ file.name);
var uploadFile = route.put(file);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

update click 이벤트가 forEach 문 안에있는거 같습니다
이러면 동일한 이벤트가 forEach 문이 돌때 마다 중첩으로 이벤트가 등록이 되서 성능상 문제가 발생할수있습니다~

var template = `

<div class="product">
<button type="button" onclick="script('${doc.id}');">

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동적으로 추가되는 html에 onclick 이벤트를 넣기 보다는 innerHtml 로 html이 추가가 되고 해당 button 에 클래스를 이용해서 이벤트 리스너를 통한 클릭 이벤트를 잡아주시는게 좋습니다~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants