우선 컴포넌트 라이프 사이클은 create-mount-update-unmount로 진행이 됩니다. 이 때 useEffect는 컴포넌트가 실제 돔에 렌더링되는 mount 때 실행됩니다. update 때는 컴포넌트에 변화가 생겼을 때를 뜻하는데 useEffect의 의존성 배열을 사용하여 특정 값이 변경될 때마다 내부의 작업을 실행하도록 할 수 있고, unmount는 컴포넌트가 실제 돔에서 사라지는 순간으로, useEffect 내의 클린업 함수를 실행합니다.
key 를 넣어주는 이유는 가상 돔에서 어떤 요소가 어디에 있고, 어떻게 순서가 바뀌었는지 등의 순서와 변화를 제대로 감지할 수 있기 때문입니다. 때문에 동일한 key값을 갖게되면 각 요소를 제대로 식별할 수 없기 때문에 유니크한 id를 할당해야 합니다.
개발 서버에서는 배포 서버와 달리, 리액트의 strictMode 때문에 두 번 실행됩니다. 이 모드를 켜게 되면 useEffect를 마운트, 언마운트, 마운트를 하는 과정을 거치게 되는데, 이 때 언마운트 시 클린업 함수가 잘 작동하는지 여부를 확인하기 위해 사용할 수 있습니다. 배포 시에는 자연스럽게 마운트-언마운트 사이클로 진행이 됩니다.
(거의) 마지막 주차가 시작되었다... 뭔가 더욱 바빠야할 것 같은데 그렇지 않아서 오히려 불안하다. 그렇다고 해야할 게 없는 건 아니고, 그냥 뭔가 좀 이게 맞나 싶다. 그만큼 열심히 달려왔다는 거겠지. 괜한 불안감을 갖기보다는 당장 눈 앞에 주어진 것부터 빠르게 처리를 해보자.