June

첫 React 프로젝트 - 개발

지난 포스트에서 자주 찾아뵙겠다고 하자마자 반년만에 글을 쓰게 되었습니다. (짝짝짝)

졸업전시 준비를 하면서 썼던 회사에 합격하게 되어 어느덧 직장인이 되었네요 :D 회사를 다니면서 혼자 공부하며 준비한 React&Redux 프로젝트에 대해 소개하겠습니다.

홍익대학교 시각디자인학과 졸업 전시회 출품작 개발을 맡게 되었습니다.
(아래 링크는 소개하는 인스타 페이지 및 개발 웹사이트 입니다.)

https://www.instagram.com/mclang_saloon/

http://115.71.238.136/ (참고 - 1920x1080 사이즈 전용으로 제작했습니다. 도메인은 아직 따로 없습니다.) (참고 - 접속 시 이미즈 크기 문제로 속도가 느릴 수 있습니다. 디자이너의 졸업 전시 작품이기에 이미지는 용량이 조금 크더라도 접어두고 작업을 진행하였습니다.)

volume_size

국내 크래프트 비어를 모아 소개해주는 사이트입니다. 어떻게 제작하게 되었고, 어떤 과정으로 제작하게 되었는지 풀어보겠습니다.

1. 제작 경위

오래 전부터 혼자 React, Redux, Redux-thunk, Redux-promise... 등과 같은 React와 주요 라이브러리들에 대해 공부하고 있었습니다. 그런데 최대 단점!!! 그건 바로... 디자인이 없으면 만들기 힘들다는 것 입니다. 마침 지인이 함께 프로젝트를 하자는 제의를 주셔서 공부만 해오던 React를 활용해 프로젝트를 하게 되었습니다.

2. 설계

2-1. 프론트

처음엔 고민을 많이 했습니다. React 공부는 오래전부터 했지만, 개발은 시작해보질 않았으니 남아있는게 없었습니다. 결국 다시 공부를 하면서 진행해야 했고 추가로 ES6도 개발을 시작하면서 처음 공부하게 되었습니다.

2-2. 서버

프론트에 포커스를 맞추기로 했고, 디자이너의 Needs도 시각적인 것이 중요했기 때문에 서버는 알던 기술을 활용하기로 했습니다. Php, Java, Javascript, Python 중 고를 수 있었지만, 가장 최근에 썼었고, 빠르게 적용시킬 수 있겠다 생각이 든 Django와 djangorestframework를 사용해 API를 던져주기로 정했습니다.

2-3. 전체

우선 API를 만들고 프론트 작업을 시작하려 했지만, 디자이너의 추가적인 요구사항이 지속적으로 생겨남에 따라 API를 우선시 할 수 없었고, 처음에 나왔던 명세로 API를 작업하고, 프론트 작업을 하면서 API에 더 필요한 부분을 추가하는 순서로 진행하였습니다. 추가로, 가상 서버나 배포 부분은 개발 진행이 끝난 후 생각하기로 하고 뒤로 미뤘습니다 (...)

3. 작업

Django의 Virtualenv 설정 및 pip3 라이브러리 인스톨, CBV 순서로 서버 구현을 진행하게 되었고 디자인이 한 페이지씩 나올 때마다 React를 한 페이지 씩 진행하였습니다. (글로 싸지르는건 쉽지...)

4. 가장 큰 이슈

비동기 데이터의 순서 보장 이슈가 처음 사용하는 React에서는 해결하기 힘든 큰 이슈였습니다. 게다가 한꺼번에 이미지나 데이터를 보여주지 않고 스크롤 할때마다 데이터를 불러오는 방식을 사용했던 이유는 바로바로....

위에서 말씀드린 이미지의 용량 문제였습니다. 1개의 Brewery에 1MB이미지 1~3장 사이를 가지고 있는데 54개의 brewery들을 한꺼번에 불러오면.... (-_-b)

감당을 할 수 없었기 때문에 생각했던 방식은 처음 페이지 진입 시 비동기 데이터 요청과 첫 post 10개(이미지 로딩)를 불러오고, 그 다음 데이터들은 10개씩 끊어서 스크롤을 하여 최하단의 50픽셀 전까지 내려갔을 때 요청하도록 하는 것이었습니다.

5. 느낀점

이게 키포인트라고 생각했기 때문에 3, 4번 부분을 간단하게만 작성하였습니다. 프로젝트가 커지면 커질수록 Redux가 점점 더 중요해지는 핵심인데, 반대로 말하면 프로젝트가 작을 때에는 그다지 필요가 없었다는 것입니다. (절대 그렇지 않습니다... 제 주관 100%인 얘기입니다.)

데이터 관리인 store 때문에 나온 Flux 패턴 라이브러리 이므로 데이터가 적은 페이지에선 필요성이 높지 않다고 느꼈습니다. 그리고 Promise 패턴의 중요성이 매우 높았습니다. (이젠 async/await 위주로 변하겠네요.) 비동기로 데이터를 요청했을 때, 리스트의 순서가 보장이 되어야하는데 계속 맞지 않아 promise로 해결해야 했습니다. 그 과정에서 사용했던 비동기 라이브러리 axios에 issue도 남겼지만 무참히... ㅠㅠ

question

6. 못다한 이야기

다썼다고 좋아하는데 서버 세팅에 대해 올리지 않았네요... 이 부분은 따로 알려드릴 내용이 많기 때문에 다음 포스팅에 이어서 쓰겠습니다.


위 내용 까지가 제가 첫 React 프로젝트 경험기였습니다. 바로 서버 세팅에 대해 포스팅을 더 쓸 생각인데 끝까지 잘 읽어주세요~ 아, 그리고 이 프로젝트는 디자이너의 요청으로 git에 공개되지 않았습니다 ㅠㅠ 양해바랍니다.