이 책을 고른 이유
운이 좋게도 9월부터 인턴에 나가게 되었습니다. 실무 경험이 없고 프로젝트만 진행하다보니, 이제 곧 닥칠 대규모 라는 키워드에 자극되어 이 책을 고르게 된 것 같네요.
혼자서 프로젝트를 하다보면 축소보다는 확장 을 더 하게됩니다. 그러다보니, 먼 미래에 닥칠 엄청난 복잡성에 대해서는 안일하게 생각합니다.
따라서 이 책은 저에게 실무 환경에 잘 적응 될 수 있도록 여러 상황과 환경을 미리 알려줄 것 같습니다.
위와 같은 고민을 가지고 있는 분이라면, 아래의 글은 책을 고르는데 도움 이 될 것이라 생각합니다.
우발적 복잡성과 내재적 복잡성
기본적으로 시스템이 확장하게 되면, 복잡성을 마주하게 되고 이런 복잡성을 줄이기 위해 확장성 있는 모듈을 만들고, 클린코드를 지향하며 에러를 줄이고는 한다.
이러한 복잡성을 두가지로 분류하여 우발적 복잡성 과** 내재적 복잡성** 로 유형을 설명하고 있다.
우발적 복잡성
- 기존 문제에 관한 새로운 해결책을 만들면서 생기는 복잡성
내재적 복잡성
- 주로 레거시 코드와 관련이 있으며, 끊임 없는 변경과 진화의 결과로 나온 복잡성
- 우발적 복잡성이 증가하면 -> 내재적 복잡성
책 첫장에서는 위와 같은 복잡성을 설명하는데, 이 책에 내용이 전반적으로 무슨 내용인지 알려줘서 책을 읽는데 어려움이 없었습니다.
사이트 프로젝트를 만들다 보면, 속도와 완성에 초점이 맞춰져 있어서 주로 우발적 복잡성 을 뛰는 것을 경험했다.
예를 들어, 서버에서 HTTP 메서드 요청을 받고, 데이터를 A 에 받아 **B **에 props로 전달하고 있다면, 추후 전역으로 관리하지 못한 상태에 우발적 복잡성을 나타난다고 생각이 된다.
1// App.js2function App() {3 const [userData, setUserData] = useState(null);4 5 useEffect(() => {6 fetch('/api/user').then(res => setUserData(res.json()));7 }, []);8 9 return <UserProfile userData={userData} />;10}11
12// UserProfile.js13function UserProfile({ userData }) {14 return <UserDetails userData={userData} />;15}만약 밑으로 하위 컴포넌트가 더 늘어나게 된다면 Props Drilling 지옥을 만나서 '우리는 전역으로 상태관리를 할 걸,, 하면서 혀를 찰 수 밖에 없는 것이고, 이러한 문제는 개발자라면 이런 우발적인 상황을 맞닥뜨렸다고 생각이 든다.
그러면 어떻게 복잡성을 줄일 수 있을까?
이 책에서는 다양한 방법을 제시한다
- 모듈성
- 지연 로딩
- 코드 분할
- 문서화
- 성능
- 효율적으로 데이터를 가져오기
- 상태관리 등등
이 책에서는 현업에서 쓰이는 여러가지 최적화 방법 과 디자인 패턴 그리고 시스템 환경 에 관해서 이야기를 끊임 없이 하고 있다.
즉, 모든 과정은 순환되고 초기 시스템 설계가 중요하단 것을 깨달았다. 이 책은 확실히 실무를 경험해보지 않은 아직 학생이라면, 대규모를 처리하는 프로젝트는 어떻게 작업 을 하고 소통을 하며 프로젝트를 만드는지 피부에 닿지는 않았지만, 적어도 내 머릿속에서 설계도를 펼쳐놓고 설명해주는 기분이 들었다.