목차
1. 프로젝트 기획의도
2. 프로젝트에 사용된 기술스펙
3. 프로젝트 구성
3-1. Common 폴더
- Common/Button
- Common/Footer
- Common/GuideSection
- Common/Header
- Common/Modal
- Common/Wrapper
3-2. Pages 폴더
- Pages/FirstPage
- Pages/BackgroundPage
- Pages/InfoPage
- Pages/WritingPage
- Pages/ImagePage
- Pages/BgmPage
- Pages/CheckPage
- Pages/TestPage
4. 프로젝트 후기
SPA 프로젝트
로 Remaster를 진행1. 언어 : TypeScript
- 현재 프론트 엔드 실무에 있어 객체 지향의 장점과 협업을 효율을 향상시켜주는
TypeScript
를 주 언어로 사용하여 코드의 가독성및 에러를 최소화 시킴2. 라이브러리 : React
- 다양한 라이브러리를 사용하여 보다 페이지를 다체롭게 꾸밀 수 있은
React
를 사용3. 상태관리 : Recoil
- React과의 호환성이 좋고 Redux보다 훨씬 가볍고 실용적인
Recoil
을 사용하여 전역 상태 관리를 진행함
Pages 폴더
와 버튼, 헤더, 풋터, 모달, 레이아웃 등 공통적으로 사용할 수 있는 Common 폴더
로 구성되어있다.min-height
와 padding-bottom
으로 값을 조정하고 풋터에 position: relative
와 translateY(-100%)
을 넣음min-height
와 padding-bottom
으로 값을 조정position: relative
와 translateY(-100%)
을 넣음props
로 전달받는 구조로 사용하여 코드의 재사용성을 높임ease forwards
를 통해 @keyframe에서 변경된 값을 유지하도록 구현useEffect
를 사용하여 esc키를 눌러 모달창을 끌 수 있도록 구현react-responsive-carousel
라이브러리를 사용하여 반응형에 적합한 Carousel로 여타 홈페이지의 WelcomePage와 유사한 UI를 구현함map
을 통해 순환시킴react-colorful
라이브러리를 사용하여 색상 팔레트를 사용Before가상요소
로 적용발신자와 수신자의 이름을 작성하는 페이지
input태그에 정보를 입력하여 전달하기에 form태그를 사용
프로젝트에서 반드시 필요한 정보이기에 input태그에 p태그를 absolute로 강조
내용을 입력하면 p태그가 민트색의 체크표시로 변경
조건을 충족하지 않을 경우, 그 조건을 충족시키라는 팝업창이 나타나도록 구현
내용을 작성하지 않아도, 헤더의 리모컨 버튼을 통해 다른 페이지로 넘어갈 수 있게 구현하여 사용에 대한 불쾌감 제거
두 p태그의 로직은 같지만, 각자 참조하는 상태가 다르기 때문에 따로 분리하여 구현
react-responsive-carousel
라이브러리를 사용하여 반응형에 적합한 Carousel을 사용map
으로 조회가능react-youtube
라이브러리를 사용하여 유튜브 url에 해당하는 영상을 상영해주는 기능 구현recoil
에서 관리가 됨recoil
을 조회하여 검토해줌(수신자 정보, 발신자 정보, 편지내용)취지에 걸맞게
다양하게 커스터마이징 할 수 있는 편지 홈페이지를 만들어 홈페이지의 정체성을 잘 살렸다
고 판단반응형 웹페이지로 제작
하여, 모바일 버전에서도 쾌적하게 사용할 수 있음다양한 React 라이브러리
를 활용하여, 기존의 메신지 시스템이 구사하지 못하는 기능들을 넣음(그라데이션 배경, 유튜브 자동재생기능...)TypeScript
와 Recoil
을 활용하여 어느정도 상업용 웹페이지의 틀을 갖춘 SPA
를 개발했다고 판단재사용
하는 방향으로 작업 => 불필요한 코드가 거의 없는 클린 코딩을 진행
별도의 서버를 운영하지 않아, Recoil이 로컬에서만 저장이 됨
=> 수신자에게 전송을 하면 Recoil에 담긴 내용 없이 default 값으로 전송됨
=> 이는 firebase
와 같은 백엔드 서포트 어플을 활용하여 개선할 계획
현제 이 페이지의 오류는 지속되는 새로고침과 리렌더링을 진행하면, recoil에 저장된 이미지가 렌더링 되지 않음 => 이미지 데이터는 존재하지만, 렌더링을 하지 못하는 것
=> 예상되는 원인 : 임의로 생성한 이미지 url주소가 렌더링 될때마다 변경되기 때문이라 판단
=> 이 부분은 주변 지인들과 상의를 해서 해결해봐야 할 듯 하다.