728x90
반응형
This is CS50W.
현업에서 수년간 실무 위주로 개발을 하다 보면, 편리한 모던 프레임워크와 라이브러리 뒤에 숨어 '웹이 본질적으로 어떻게 동작하는지'를 간과하기 쉽습니다.
당장의 비즈니스 로직을 구현하는 데 집중하다 보니, "브라우저와 서버는 내부적으로 어떻게 상태를 유지하고 렌더링을 최적화하는가?"와 같은 근원적인 질문에 갈증을 느끼곤 했습니다. 기왕이면 '그냥 돌아가는 코드'를 짜는 것을 넘어 변하지 않는 아키텍처의 원리를 다지고 싶어 하버드의 CS50W 과정을 수강했습니다.

과정 내내 단순히 툴 사용법을 따라 치는 것이 아니라, 요구사항에 맞춰 바닥부터 직접 구현하며 아키텍처를 증명해 내야 했습니다.
- Project 0 & 1: Search, Wiki 모던 UI 라이브러리 없이 순수 HTML과 CSS만으로 구글 검색창 레이아웃을 짜보고, Django를 활용해 위키피디아 클론을 만들었습니다. 사용자가 입력한 Markdown을 백엔드에서 파싱하고 정규식으로 라우팅을 제어하며, 서버사이드 렌더링의 뼈대를 튼튼히 다졌습니다.


- Project 2: Commerce eBay와 유사한 온라인 경매 플랫폼을 구축하는 프로젝트였습니다. 핵심 과제는 복잡하게 얽힌 RDBMS의 모델링이었습니다. 유저, 경매품, 입찰 내역, 댓글 등의 Entity들을 Django ORM을 통해 다루며 외래 키 참조와 N:M 관계를 설계했습니다. 입찰가 유효성 검증이나 경매 종료 처리 같은 상태 의존적인 비즈니스 로직을 백엔드에서 견고하게 처리하는 방법, 그리고 Django Admin을 활용한 데이터 관리의 편리함을 다시금 체감할 수 있었습니다.

- Project 3 & 4: Mail, Network 바닐라 자바스크립트(Vanilla JS)와 Fetch API만을 사용해 이메일 클라이언트를 SPA 형태로 구현한 경험은 특히 인상적이었습니다. 브라우저의 History API로 상태를 관리해보며, 평소 익숙하게 쓰던 React나 Vue의 내부 동작 메커니즘을 역산해 볼 수 있었습니다. 소셜 네트워크 과제에서는 Django ORM을 활용해 자기 참조가 포함된 N:M 관계를 설계하고, 비동기 통신을 통한 빠른 UI 업데이트를 구현하며 RDBMS와 프론트엔드의 매끄러운 연동을 고민했습니다.


- Final Project: This is CS50 Chat! 과정의 마지막으로 'This is CS50 Chat!'이라는 실시간 채팅 애플리케이션을 직접 기획하고 구축했습니다. 단순한 HTTP의 Request-Response 생명주기를 벗어나, 서버와 클라이언트 간의 지속적인 연결 상태를 유지하며 이벤트를 브로드캐스팅하는 실시간 통신 아키텍처를 설계하고 동시성을 제어하는 과정이 꽤 재밌고 짜릿했습니다.

CS50W는 단순한 웹 언어의 문법을 떼는 것을 넘어, 클라이언트와 서버가 어떻게 맞물려 거대한 시스템을 이루는지 로우 레벨부터 하이 레벨까지 관통하게 해준 명강의였습니다. 화려한 도구를 좇는 것보다, 변하지 않는 웹의 원리를 이해하는 것이 엔지니어에게 얼마나 중요한지 다시금 깊이 실감했습니다. 개발자로서 기본기를 다시 점검하고 싶거나, 흩어져 있던 파편적인 웹 지식들을 하나의 견고한 체계로 결합하고 싶은 분들에게 이 강의를 강력히 추천합니다.

728x90
반응형