WSET WEC 차세대 리더 소믈리에 과정

WSET WEC 차세대 리더 소믈리에 과정

쉐라톤 수쿰윗 체크아웃을 4시에 하고 볼트를 불러 메리어트 마르퀴스까지, 2km 정도로 거리는 짧지만 워낙 막히는 도로라서 25분 걸렸습니다. 큰 차 불러서 133바트, 약 5천 원. 메마퀸파는 이전에 3번 스테이 했었고 이번이 4번째인데, 마지막이 2018년이었어서 굉장히 오랜만인. 그 중간에 라운지랑 레스토랑은 방문했었지만 워낙 규모가 큰 호텔이라 늘 붐비는데, 12월 크리스마스 주간이었으니 더욱. 프런트 데스크가 그나마 넓게 분리되어 있어서 나은 편이고, 재빨리 메리어트 플래티늄 이상 멤버 체크인 하는 쪽으로 가서 클럽 라운지에서 체크인하고 싶다고 말하면 안내해 줍니다.


무한 스크롤
무한 스크롤

무한 스크롤

무한 스크롤이란 유저가 페이지 특정 하단에 도달했을 때, API를 호출하여 요구하는 내용을 계속 로드시키는 것입니다. 특히, 내용이 많거나 이미지 등이 포함된 데이터들을 한 번에 모두 불러오는 것보다는 무한 스크롤 방식으로 일부 데이터만을 특정 이벤트에 지속해서 로드시키는게 성능상, 이용자 경험에 큰 이점을 줍니다.

라이브러리와 같이 다른 모듈에 의존하지 않고 만들기로 했다. 처음 고려한 방식은 스크롤 이벤트의 감지와 변화를 통한 방식입니다.

여러 방법 중 하나는, innerHeight 뷰포트 내부 높이 픽셀 단위와 scrollTop스크롤 세로 방향 픽셀 단위를 offsetHeight패딩, 스크롤 바, 테두리가 포함된 요소 높이 픽셀 단위와 함께 계속 스크롤 이벤트를 인지하고 비교하며 기대하는 특정 부분에서 API를 지속해서 요청합니다. 하지만, 이 방법은 스크롤이 변화할 때마다.

아티클 CRUD
아티클 CRUD

아티클 CRUD

아티클 작성은 웹 에디터 라이브러리인 을 사용하였는데, 글을 작성하게 되면 HTML 태그 형식의 string 값들이 저장됩니다. 이를 보여주기 위해서는 의뢰인 단에서 직접적으로 HTML을 삽입시켜줘야 합니다. 에서 dangerouslySetInnerHTML은 브라우저 DOM에서 innerHTML을 사용하기 위한 React의 대체 방법이라고 명시되어 있습니다. XSS 공격에 쉽게 노출될 수 있기에 위험하다는 것을 상기시키기 위해 dangerouslySetInnerHTM을 쓰고 html 키로 객체를 전달해주어야 한다고 합니다.

html 태그 요소 부분에 악의적인 스크립트를 포함시켜 공격할 수 있다고하니, 이를 보완하기 위해서를 사용했다. DOM Purify는 HTML을 삭제하고 XSS 공격을 방지할 수 있다고 합니다.

reduxpersist로 리덕스와 로컬 스토리지로만 관리했던 장바구니 상태들을 리덕스 미들웨어에서 유저 정보를 가져와 db에 접근해 CRUD 작업 하고 장바구니 상태들을 관리해야했다. 사실, 처음 기획에는 로그인 회원가입 기능이 추가 기능이었는데, 생각보다. jsonserverauth를 통해 쉽게 구현하면서 더 이상 로컬 스토리지로 장바구니 상태들을 관리하는 것은 의미가 없어졌다. 로컬 스토리지에 관리하는 것은 유저가 로그인 로그아웃 비회원 행동과 관계 없이 브라우저에 저장하기 때문입니다.

이 과정에서 여러 난관에 부딪히기도 했는데, 첫 번째는 장바구니 db를 어떠한 방식으로 구성해야 서버에서 라우트 가드를 안전하게 처리할 수 있을까 고민이 됐습니다. 서버에 해당 유저의 토큰과 필터링 요청을 할 값(유저 id)들을 요청하면 안전하게 해당 유저의 장바구니 데이터를 받을 수 있을 것이라고 생각했기 때문입니다.

정적 홈페이지 배포하기 With Heroku
정적 홈페이지 배포하기 With Heroku

정적 홈페이지 배포하기 With Heroku

이번 프로젝트는 production용으로 개발된 것은 아닙니다. jsonserver 자체가 fakerest api이기 때문에 무료로, jsonserver를 어떠한 방식으로 호스팅을 해야할것인가가 관건이었다. 을 참고했다. 프론트 서버는 vercel 혹은 heroku로 배포하고 데이터 서버는 glitch 혹은 heroku로 배포하는 것이 공짜로 가격부담 없이 쉽게 배포할 수 있는 것 같다.

heroku로 모두 한 번에 배포하는 것이 관리나 완성 관점에서 쉽고 빠르고 좋을 것 같아서 결정했습니다. 배포 하는 과정은 을 참고할 수 있어요. 배포를 마치고 위기?를 겪게 되었습니다. 정적 웹 사이트이기 때문에 백엔드 서버와 API 호출을 통해 동적 리소스를 불러오지 않습니다.

메리어트 마르퀴스 퀸즈파크 M 클럽 라운지 이브닝 칵테일 North Tower M 클럽 라운지는 Only South Tower에서만, 소프트드링크나 커피는 24시간 가능하고, 체크인아웃도 사우스 타워의 라운지에서만 가능 사우스에 비하면 규모가 14 정도라서 조용하고 아늑함. 분주한 분위기 싫으면 여기가 더 나을지도. 음식은 조금 더 적거나 비슷할 것 같다. 배가 너무 부른데 앞에서 계속 왔다. 갔다. 생각했더니 계속 먹어보기를 권유하셔서 맛만 볼까 하고 정말 조금만 달라고 했는데. 노스에는 사람이 워낙 없습니다..

보니 음식이나 술도 다. 가져다주시고, 조용히 있기 좋았다.

자주 묻는 질문

무한 스크롤

무한 스크롤이란 유저가 페이지 특정 하단에 도달했을 때, API를 호출하여 요구하는 내용을 계속 로드시키는 것입니다. 좀 더 자세한 사항은 본문을 참고해 주세요.

아티클 CRUD

아티클 작성은 웹 에디터 라이브러리인 을 사용하였는데, 글을 작성하게 되면 HTML 태그 형식의 string 값들이 저장됩니다. 좀 더 자세한 사항은 본문을 참고해 주세요.

정적 홈페이지 배포하기 With

이번 프로젝트는 production용으로 개발된 것은 아닙니다. 자세한 내용은 본문을 참고 해주시기 바랍니다.