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_HanEunJi 메종 프란시스 커정 클론코딩 #70

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

Conversation

lilviolie
Copy link

@lilviolie lilviolie commented Jul 28, 2023

⚡️패스트캠퍼스 클론코딩 프로젝트⚡️

✨ 프로젝트 소개

메종 프란시스 커정 공식 홈페이지를 클론코딩한 프로젝트입니다.

✨ 필수 요구사항

  • 과제에 대한 설명을 포함한 README.md 파일 제공
  • 과제 결과와 비교할 수 있는 실제 사이트(페이지)의 주소 명시
  • 과정에서 사용한 프로젝트 폴더/파일 모두 제출
  • 실제 서비스로 배포하고 접근 가능한 배포 링크 추가

✨ 기술 스택

✨ 주요 개발 기능

  • 각각의 상품 이미지에 트랜지션 적용
  • Intersection Observer API를 이용해 스크롤 애니메이션 적용
  • swiper.js를 이용해 슬라이드 구현

✨ 구현하지 못한 기능

  • 상단 메뉴에 마우스 호버 시 드롭다운 메뉴가 나타나는 기능
  • 장바구니 기능

✨ 배운점

  • 정말 많은 요소에 트랜지션을 적용하면서 트랜지션에 좀 더 익숙해 질 수 있었습니다. 다음에는 애니메이션 속성을 이용해 더 다양한 디자인을 구현해보고 싶습니다.
  • 자바스크립트에서 제공하는 IntersectionObserver API를 사용해 보았습니다. 요소가 뷰포트에 포함되는지의 여부에 따라 더욱 풍부한 트랜지션을 적용할 수 있었습니다.
  • 바닐라 자바스크립트 대신 swiper 라이브러리를 이용하여 더욱 빠르고 간단하게 슬라이드를 구현하는 방법을 알게 되었습니다.

✨ 아쉬운점

  • 한정된 시간에 비해 구현할 요소가 굉장히 많았던 웹사이트를 선택해서 기간 내에 구현을 마치기 힘들었습니다. 웹사이트를 구성하는 것이 생각보다 훨씬 신경써야 할 게 많았기 때문에 주제 선정에 좀 더 신경써야겠다는 생각이 들었습니다.
  • 헤더 메뉴에 마우스 호버 시 드롭다운 메뉴가 나타나는 기능을 구현하지 못했습니다. 아직 제 수준으로 구현하기에는 어려운 기능이라고 느꼈기에 트랜지션, z-index, 자바스크립트 등에 대해 훨씬 더 많은 공부가 필요하다는 것을 느꼈습니다.
  • 반복되는 코드가 굉장히 많았는데 시간이 부족하다보니 깔끔하게 코드를 작성하는 데 어려움을 겪었습니다. 적절한 시간 분배와 클린코드의 작성에 대한 중요성을 많이 느꼈고, 다음에는 css 전처리기를 사용해서 더 효율적으로 코드를 작성해보고 싶습니다.

@seungjun222
Copy link

잘 봤습니다! 우측 하단의 버튼이 특정 scroll y 값부터 보이도록 하는 디테일까지 잘 봤습니다. 말씀하신대로 헤더메뉴 드롭다운의 경우 JS 좀 더 익숙해지시면 구현할 수 있으리라 생각합니다!

Copy link

@JitHoon JitHoon left a comment

Choose a reason for hiding this comment

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

고생하셨습니다~!


window.addEventListener(
'scroll',
_.throttle(() => {
Copy link

Choose a reason for hiding this comment

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

콜백 함수의 불필요한 실행을 줄이는 것도 함께 생각하면서 프로그래밍 하신게 인상깊었습니다! 저도 적용해보고 싶네요!

Copy link

@minsoo-web minsoo-web left a comment

Choose a reason for hiding this comment

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

고생 많으셨습니다. 전반적으로 반복되어 사용되는 css를 덜어내는 연습을 해보시면 좋을 것 같아요!

.DS_Store Outdated

Choose a reason for hiding this comment

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

DS_Store와 node_modules 을 gitignore에 넣으면 좋은 점에 대해서 공부해보세요!

Copy link
Author

@lilviolie lilviolie Aug 7, 2023

Choose a reason for hiding this comment

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

버전 관리가 불필요한 파일들을 제외하기 위해 .gitignore을 사용해야 하는데.. 급하게 마무리하느라 신경을 못썼던 부분이네요ㅜㅜ
수정했습니다 다음부터 주의하겠습니다!
1de6e22
d0e3f54

Comment on lines +28 to +32
<img width="100%" src="https://github.com/lilviolie/git-practice/assets/95364951/8c4f5edc-92cb-47b0-b493-7970397eff5c"/>
- Intersection Observer API를 이용해 스크롤 애니메이션 적용
<img width="100%" src="https://github.com/lilviolie/git-practice/assets/95364951/47dd2311-0e72-40a6-8c68-e8a14e6e7aa8"/>
- swiper.js를 이용해 슬라이드 구현
<img width="100%" src="https://github.com/lilviolie/git-practice/assets/95364951/0c280227-62c7-4286-bbff-9a07cf360106"/>

Choose a reason for hiding this comment

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

요 친구들 img src가 동영상이던데, 이미지 태그는 동영상을 담을 수 없습니다. gif로 변환해보세요!

## ✨ 아쉬운점

- 한정된 시간에 비해 구현할 요소가 굉장히 많았던 웹사이트를 선택해서 기간 내에 구현을 마치기 힘들었습니다. 웹사이트를 구성하는 것이 생각보다 훨씬 신경써야 할 게 많았기 때문에 주제 선정에 좀 더 신경써야겠다는 생각이 들었습니다.
- 헤더 메뉴에 마우스 호버 시 드롭다운 메뉴가 나타나는 기능을 구현하지 못했습니다. 아직 제 수준으로 구현하기에는 어려운 기능이라고 느꼈기에 트랜지션, z-index, 자바스크립트 등에 대해 훨씬 더 많은 공부가 필요하다는 것을 느꼈습니다.

Choose a reason for hiding this comment

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

호버시 드롭다운이 나타나는 건 요구사항에 따라 구현 방법이 천차 만별이지만, 간단한 CSS로도 구현이 가능합니다! 배우고자 느끼신 점이 정말 좋은 자세라고 생각합니다 👍

Copy link
Author

Choose a reason for hiding this comment

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

감사합니다😭 나중에 다시 한 번 도전해보겠습니다!

Choose a reason for hiding this comment

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

woff 와 woff2 의 차이는 무엇이 있는지도 같이 공부해보시고, 내가 어떤 폰트 확장자를 사용해야 하는지에 대한 이유도 분명히 알고 사용하는 것이 좋습니다.
추가로, CDN 웹 폰트를 가져와서 사용하는 것과 폰트를 직접 임베딩하는 것에 어떤 차이가 있는지도 같이 공부해보세요!

Copy link
Author

Choose a reason for hiding this comment

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

간단히 말하면 woff는 압축된 폰트 형식이고, woff2는 woff보다 30~50% 더 압축된 형식이라는 것까지만 알고 있었습니다. 더 찾아보니 Internet Explorer에서는 woff 형식을, 나머지 브라우저에서는 woff2 형식을 사용하도록 해서 폰트의 용량을 줄이는 것이 좋고, woff2 형식과 woff 형식을 모두 사용할 수 없을 때를 대비해 ttf 형식을 같이 사용하는 것도 좋다는 것을 알게 되었습니다. 이 외에도 최적화 부분 또한 생각해보지 못했었는데 생각보다 신경써야 할 부분이 많다는 것을 이제야 깨달았네요ㅜㅜ 앞으로 더 자세히 공부해보겠습니다!

그리고 폰트를 직접 임베딩하는 방식은 폰트 파일이 무겁기도 하고 브라우저마다 지원하는 폰트 파일 형식이 다 다르기 때문에 일일이 파일을 지정해줘야 한다는 것이 단점이라고 알고 있습니다.(혹시 틀렸다면 말씀해주세요..!) 다만 이번 프로젝트에서는 필요한 폰트의 CDN 링크를 찾을 수가 없어서,, 서버 폰트 로딩 방식을 사용했습니다.

Choose a reason for hiding this comment

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

오 네 말씀해주신 내용들이 거의 맞습니다.
폰트 확장자별로 압축용량이 달라서 불러오는 시간이 다르다는 점과, 브라우저별로 호환하는 폰트가 다르다는 점도 인지하고 사용하셨으면 좋겠다는 마음에 리뷰 남겼습니다.

또한 성능적인 차이에서 장단점이 있는데요, 아래 내용을 확인해보시면 좋을 것 같습니다.

# 폴더에 저장해서 상대 경로로 불러오는 방식:

장점:
폰트 파일을 직접 저장하기 때문에 서버에 의존하지 않고 독립적으로 폰트를 제어할 수 있습니다.
사용자가 인터넷에 연결되어 있지 않아도 폰트가 로드되는 경우에도 정상적으로 작동합니다.

단점:
폰트 파일을 웹 서버에 저장하고 있어 서버 용량을 차지할 수 있습니다.
웹 페이지에 방문하는 사용자가 다른 지역에 위치해 있을 경우, 폰트 파일을 다운로드하는데 시간이 걸릴 수 있습니다.

# CDN으로 링크 거는 방식:

장점:
CDN은 여러 지역에 위치한 서버들을 통해 콘텐츠를 제공하므로, 폰트 파일을 더 빠르게 다운로드할 수 있습니다. 이는 사용자 경험을 향상시킵니다.
폰트 파일의 캐싱을 효과적으로 처리하여, 웹 페이지 방문자가 같은 폰트를 사용하는 다른 웹 페이지를 방문할 때 성능 향상에 도움을 줍니다.

단점:
CDN 서비스를 사용하려면 추가 비용이 발생할 수 있습니다. 또는 무료 CDN도 있지만 트래픽 한도나 속도 제한 등이 있을 수 있습니다.
CDN 서버에 의존하므로, CDN 서비스가 다운되거나 느려지는 경우에 웹 페이지에 접근하는 사용자에게 영향을 미칠 수 있습니다.

Choose a reason for hiding this comment

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

webp 확장자와 png 확장자의 차이가 무엇인지 알고 계신가요?!

Copy link
Author

Choose a reason for hiding this comment

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

webp는 jpg, png 등 기존의 이미지 포맷보다 파일 크기를 더 줄일 수 있고 로딩 시간을 단축할 수 있는 새로운 포맷이라고 알고 있습니다!

Choose a reason for hiding this comment

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

맞습니다! 다만 한 가지 알아두셔야 하는게, webp는 모든 브라우저 및 버전에서 지원하지 않아요
https://caniuse.com/?search=webp

따라서 크로스 브라우징이나, 레거시 환경과 같은 곳에서는 사용할 때 고려해야하는 사항입니다!

Comment on lines 303 to 314
position: absolute;
top: 346px;
width: 100%;
height: 36px;
font-family: 'BauerBodoni', sans-serif;
font-size: 1.75rem;
letter-spacing: 1px;
line-height: 2.2rem;
color: #646467;
text-align: center;
transition: 0.8s;
opacity: 1;

Choose a reason for hiding this comment

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

비슷한 역할을 하는 요소끼리 모아놓고 개행을 더해주면 가독성에 많은 영향을 줍니다!

Comment on lines 148 to 160
.slide1 .rouge,
.slide1 .aqua-media,
.slide1 .number-724,
.slide1 .rouge-extrait,
.slide1 .rose,
.slide1 .lhomme,
.slide1 .gentle-gold,
.slide1 .gentle-silver,
.slide1 .universalis,
.slide1 .vitae,
.slide1 .celestia,
.slide1 .soir,
.slide1 .matin {

Choose a reason for hiding this comment

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

공통으로 여러 요소들을 선택하기 보다, 하나의 클래스에 값을 명시하고 그 클래스를 가져다 쓰는 방식이 훨씬 관리가 편합니다.

index.html Outdated

Choose a reason for hiding this comment

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

image

html만 formatter가 적용이 안 되지 않았나요?
html은 잘못 작성해도 버그를 내거나 다운되거나 하지 않아서 에러를 찾기가 어려울 때가 있습니다.

그럴 땐 prettier의 로그를 보는 것이 굉장한 도움이 되어요
제가 일일이 모든 태그들을 뒤져 본 게 아니라 다음과 같은 방법으로 찾았습니다

image

클릭시 다음과 같은 로그 창이 뜹니다.

image

384 번 줄 근처에 무슨 일이 벌어졌는지 알 것 같네요!

Choose a reason for hiding this comment

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

prettier는 npm으로 설치하지 않아도 extension으로 충분히 가능합니다.

}
header .menu-container .icons li .country .country-flag,
.footer-bottom .section3 .country .country-flag {
background-image: url(../assets/images/flag-france.svg);

Choose a reason for hiding this comment

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

이거 아마 안 보일텐데, 뭐가 문제인지 한 번 디버깅해보세요!

Copy link

@moonyah moonyah left a comment

Choose a reason for hiding this comment

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

너무너무 수고하셨어요..!!🥹 잘 적용된 transition이 인상깊어요.👍 저는 헤더 메뉴 시, 드롭 다운 되는 것 css로만 구현했어요! 충분히 구현하실 수 있을 것 같아요

@LikeFireAndSky
Copy link

LikeFireAndSky commented Aug 3, 2023

진짜 처음에 보여주셨을 때 와... 저걸 어떻게 만들지? 라고 생각했었는데 진짜 똑같이 만드신 것을 보고 정말 대단하시다는 생각이 들었습니다...🫢 IntersectionObserver 꼭 한번 구현해보고 싶었던 기능이었는데 이렇게 자연스럽게 쓰시다니 정말 배울게 많이 있는 코드인 것 같습니다. 파일 분할도 깔끔해서 다음 리펙토링 시간에 저도 한번 나눠서 구현해봐야겠습니다. 정말 수고하셨습니다!! (prettier 적용할 때 package.json()파일 쓰신 것도 좋은 방법론이 될 수 있겠네요!! 저는 extension으로 사용하려다가 prettierrc 적용하는데 문제가 생겨서 해결하려고 찾아본 결과, 멘토님께서 말씀해주신 format on save 설정과 VScode의 Settings.json에서 각각 HTML,CSS,JS에 vs 기본 스타일 대신 "esbenp.prettier-vscode" 를 넣으면 해결이 되었던 것 같습니다. )

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