💡 주제 : 충청북도 휴양림 중 마음에 드는 곳에 메모를 남겨 저장하는 서비스
🗓 기간 : 02.28 ~ 03.2 (3일)
🔨기술 스택 : React, Recoil, Emotion
💻 담당 : 휴양림 저장/삭제/수정 기능 구현
👤 참여 인원 : 7
프로젝트 상세 설명
휴양림 목록을 API를 통해 받아오고 원하는 휴양림 정보를 선택해 메모를 남겨 저장할 수 있다. 저장한 휴양림은 검색을 통해 확인할 수도 있으며, 수정/삭제가 가능하다.
세 번째 과제에서는 휴양림 정보 저장/수정/삭제 기능을 다른 팀원 한 분과 함께 맡게 되었다. 나와 같은 기능을 담당하시게 된 팀원분께서 프로젝트 환경 설정을 맡게 되셔서 그 동안 무엇을 하고 있을까 생각하다가 휴양림 저장과 수정에 쓰이는 폼의 레이아웃이 거의 동일해서 공통의 <Modal/>
컴포넌트 하나를 만들고 props
값을 다르게 주어 각각의 폼을 만들 수 있게 하면 어떨까 해서 팀원 분께서 환경설정 하시는 동안 빠르게 만들어보게 되었다. props
로는 type
을 두어 add인지 edit인지 전달받고 edit type
의 modal 컴포넌트를 요청하는 거라면 메모 영역은 input
태그로 수정가능하게 하였고, 버튼은 수정,삭제 버튼이 나타나도록 처리했다.
컴포넌트 UI를 만든 후에는 함께 기능을 맡은 다른 팀원분이 로직 구현를 맡아주셨고
모달창 처리와 관련해서는 내가 맡아서 진행하기로 했다.
일반적인 모달창이 그러하듯 외부 클릭시 close 처리가 되도록 모달창의 가장 바깥 영역인 ModalContainer에 click
이벤트를 적용하고 중앙의 모달창 영역인 ModalBox에는 click
이벤트에 e.stopPropagtion
을 두어 ModalBox를 클릭했을 때는 ModalContainer로 클릭이벤트가 전파되지 않도록 처리했다.
Modal
컴포넌트가 닫힌 후, 다시 열리지 않는 문제가 있었다.
우선 처음 작성한 코드는 Modal
컴포넌트에서 isOpen
state를 true
로 초기화하고 외부 클릭 혹은 버튼 클릭을 통해 closeModal
함수가 호출되면 false
로 변경하도록 구현했었는데 카드를 다시 클릭했을 때에 isOpen
state를 true
로 변경하는 처리가 없었다. 이와 관련해서 외부에서 함수를 props로 전달하여 열고/닫힘을 처리를 하는 방법을 고려했었는데 외부에서 별도 처리 없이 Modal
컴포넌트에서 열고/닫힘 처리를 모두 도맡아서 처리하면 컴포넌트를 사용하는 입장에서 편할 것 같았다.
이에 cardData가 변경될 때마다 isOpen
state를 true
로 업데이트하여 모달창이 열릴 수 있게 변경하였다.
하지만 open/close 처리를 Modal
컴포넌트 내부에서 모두 도맡아서 처리해야 사용하는 입장에서 편하지 않을까 생각했는데 궁금해서 찾아보니 대부분 Modal
컴포넌트로 함수를 전달해 Modal
컴포넌트를 사용하는 부분에서 열고 닫을 수 있도록 처리하고 있었다.
개발 시에는 팀원분들이 proxy 서버 우회하는 방법을 사용해 해결하셨는데 배포 시에는 제공된 url만 사용하기 위해 다른 방법을 찾아보았다. netlify 설정을 통해 proxy 서버 설정을 하는 방법이 있다고 하여 시도해보았으나 간혹 에러가 발생하는 경우가 있었고 그래서 여러가지 시도를 해보다가 최종적으로는 heroku 통해서 프록시 서버를 만들어 우회하는 방법을 적용하였다.
컨벤션이 잘 지켜지지 않아 팀원 분께서 husky
라는 것을 적용하셨다. husky는 git 사용 중 특정 이벤트에 특정 스크립트가 실행되도록 만들 수 있는 라이브러리이다. 즉 Git hook을 사용하기 편리하게 만들어주는 도구라고 할 수 있다. 팀원 분은 commit 전에 코드의 컨벤션이 잘 지켜졌는지 확인하기 위해서 pre-commit
스크립트를 생성하셨고, 이 떄 모든 .js파일을 검사할 경우 오래 걸리므로 lint-staged
를 함께 사용하여 변경된 것만 검사하도록 만드셨다. lint-staged도 라이브러리로 커밋 전에 코드를 검사해주는 도구이다. husky와 lint-staged 조합이 많이 사용된다고 한다. 그래서 이번 기회에 협업 시에 적용할 수 있는 도구를 하나 더 배우게 되어 좋았다.