본 프로젝트는 야놀자 테크스쿨에서 진행되는 HTML/CSS 과제를 위한 Apple 공식 사이트 클론 프로젝트입니다.
저작권 등의 이유로 영상 및 이미지, 폰트가 다른 미디어 파일로 대체되거나 약간의 차이가 발생할 수 있습니다.
본 프로젝트는 모바일과 같은 다양한 브라우저 사이즈에 대한 대응은 현재 지원되지 않습니다. 3440x1440의 해상도를 기준으로 작업하였으니 참고해주시면 감사하겠습니다.
Y_FE ParkJisung(flamozzi) Apple 공식 사이트 클론
2023년 07월 24일 ~ 2022년 07월 28일
iOS 개발만을 해오던 내게 웹 프론트 개발은 익숙하면서도 어색한 작업이었다.
기본적으로 UI 및 로직을 구성하는 기본적인 매커니즘은 유사했다. iOS 개발에 비해 웹 개발은 매우 자유로우면서도 한편으로는 숙련도의 탓인지 아직은 불안하다는 생각이 들기도 했다.
웹 개발의 경우 상당한 수준의 자유도를 준다. 단순히 문법적인 부분에서도 굉장히 자유도가 높으며, 라이브러리 사용에서도 Swift와는 비교도 안될정도로 많은 라이브러리와 웹 기술들이 존재한다. iOS를 개발하면서 주로 import하게 되는 라이브러리 혹은 패키지는 네트워크 처리를 위한 Alamofire, 이미지 처리를 위한 Kingfisher 등이 있으며 그 외에는 기본적으로 제공하는 라이브러리가 체계적으로 잘 되어있기 때문에 외부 라이브러리 의존도가 높지는 않다.
하지만 웹 개발의 경우 gsap, swiper, 각종 style 라이브러리 등 이런저런 라이브러리의 역할들이 매우 핵심적으로 작용한다. 여기서 자유로움을 느꼈지만, 아직까지는 머릿속에서 정리하려면 숙련도가 더 필요하겠다는 생각이 들었다.
또한 Swift의 경우 매우 엄격하게 타입 규칙을 적용하기 때문에 컴파일 타임에서 어지간한 오류를 모두 해결할 수 있다. 하지만, JS의 경우 타입이라는 개념 자체가 매우 약하거나 거의 없다. TypeScript로 가면 이 문제가 해결될 수 있을 거 같긴 하다.
이번 과제는 약간의 JS 로직을 제외하고는 거의 바닐라 HTML/CSS로 제작되었다. 실제 서비스를 개발하다보면 최신 기술들을 선별하여 작업하게 된다. 지금까지 사이드 프로젝트도 대부분 그렇다.
하지만 이번 기회를 통해 실제 서비스가 아닌, 정말 '학습' 목적의 개발을 한 듯한 기분이 든다.
바닐라로 깊게 공부해보는 경험이 분명 추후에 다양한 프레임워크를 사용하여 개발할 때 도움이 될 것이라고 생각한다.
이하는 PR의 피드백을 기반으로 리팩토링한 수정 사항이다.
아직은 JS 문법에 익숙하지 않아서 변수 선언을 할 때 가끔씩 var를 혼용해서 사용했었다. 하지만 개정 JS에서는 let 혹은 const를 사용하는 것을 권장한다. 내 JS 로직에서 해당 부분은 재할당 등이 필요하지 않기 때문에 const를 사용하면 된다. 따라서 다음과 같이 수정했다.
리팩토링 전 내 코드에서는 swiper pagination bullet을 이미지와 겹치지 않게 만드려고 했지만, margin으로 처리하려고 해서 그런지 의도대로 잘 처리되지 않았다. 피드백에 따라 다음과 같이 padding 값을 통해 문제를 해결 및 적용을 완료하였다.
리팩토링 이전 내 작업물에서는 화면 크기를 줄였을때 다음과 같이 헤더 네비 메뉴의 글자 정렬이 깨지는 문제가 발생했다. 따라서 멘토님의 피드백에 따라 white-space: nowrap 속성을 통해 문제를 해결 하였다.
이외에도 header menu hover 애니메이션이라던지 디바이스 크기에 따른 반응형 로직이라던지.. 여러가지 수정하고 싶은 사항이 있었으나, 멘토님의 의견에 따라 이는 리액트로 추후에 반응형 웹앱을 만들어보며 해보면 더 좋을 거 같다고 말씀해주셔서 이는 이후의 과제로 남겨두려고 한다. 좋은 공부가 된 과제였다. 다음 과제에는 JS 로직을 더 적극적으로 사용해보고자 한다.
이런 유용한 정보를 나눠주셔서 감사합니다.