React를 이용한 먼작귀 캐릭터 팬레터 사이트 만들기 [ 먼작귀 편지함 ]
프로젝트명 : 먼작귀 편지함
개발 기간 : 2024.01.29 ~ 2024.02.05
프로젝트 소개 : 먼작귀 캐릭터에게 편지를 보내고 편지함을 조회 및 수정, 삭제할 수 있는 팬레터 사이트 입니다.
- Environment : vscode, github
- Development : React, Javascript, JSX, HTML, CSS
- Library : redux, router, styled-components, uuid
- Design : Figma
- Deployment: Vercel
1. git clone
$ git clone https://github.com/seopport/TinyCuteLetterbox.git
$ cd TinyCuteLetterbox
2. yarn start
npm i
yarn start
Home Page | details Page |
---|---|
-
드롭다운 박스로 편지를 보낼 캐릭터를 선택합니다.
- 선택한 캐릭터에 따라 아래 편지함에서 해당 캐릭터의 편지함을 조회합니다.
-
편지 내용과 작성자를 입력하고 편지를 보냅니다.
- 편지 내용과 작성자 둘 중 하나라도 입력하지 않으면 알림창을 띄웁니다.
-
편지를 보내면 편지함에 편지가 추가됩니다.
-
편지 내용이 일정 글자 수를 넘어가면 점으로 요약되어 표시됩니다.
- 메인 페이지에서 추가된 편지의 [상세보기]를 누르면 편지의 상세내용을 볼 수 있습니다.
- 편지의 내용을 수정할 수 있습니다.
- 수정 버튼을 누르면 완료, 취소 버튼이 나타납니다.
- 취소 버튼을 눌렀을 때 수정 내역이 없으면 바로 수정이 취소되고, 수정 내역이 있으면 수정 취소를 확인하는 컨펌창을 띄워 사용자의 의사를 한번 더 확인하게 합니다.
- 수정 내역이 없으면 완료 버튼을 누를 시 수정 사항이 없음을 알리고 수정되지 않습니다. 수정 내역이 있으면 해당 내용으로 수정이 완료됩니다.
- 삭제 버튼을 통해 편지를 삭제할 수 있습니다.
- 편지를 삭제하면 알림창을 띄우고 메인 페이지로 이동합니다.
아래의 그림은 기존 프로젝트의 컴포넌트와 전달받는 props들을 도식화한 것 입니다.
프로젝트 구조를 살펴보면 Home과 Detail 페이지에서는 단순히 props를 받아서 하위 컴포넌트로 전달하는 역할만을 수행하고 있었습니다. 이러한 prop-drilling으로 인해 컴포넌트 간의 데이터 전달이 복잡해지고 유지보수에 어려움이 있었습니다. 이에 따라 전역 상태 관리를 도입하여 프로젝트를 리팩토링하였습니다.
2.1. context API 사용하기
아래의 그림은 context를 사용하여 리팩토링한 프로젝트 구조입니다.
앞서 언급한 문제를 해결하기 위해 context를 통해 state를 전역에서 관리하도록 수정하였습니다. 최상위 컴포넌트인 router.js 에서 편지를 저장하는 state를 정의하였고, 선택 캐릭터 정보는 Home컴포넌트에서만 쓰이기 때문에 Home 컴포넌트에서 정의하여 context로 관리하였습니다.
2.2. redux 사용하기
아래의 그림은 redux를 사용하여 리팩토링한 프로젝트 구조입니다.
이전에는 최상위 컴포넌트에서 편지 정보를 관리하고, Home 컴포넌트에서 선택된 캐릭터 정보를 관리하는 방식으로 context API를 사용했습니다. Redux를 사용하여 이러한 상태들을 중앙 store에서 관리하는 방식으로 리팩토링 해보았습니다. 모든 컴포넌트에서 동일한 상태에 접근할 수 있으므로 데이터 공유가 용이했고, 코드의 가독성과 유지보수성을 개선할 수 있었습니다.