수박 겉핥기식 개발 지식을 가진 퍼블리셔로서, 항해 플러스 프론트엔드 과정 1주차를 마치고 첫 회고글을 남깁니다.
그동안 혼자 프론트엔드 개발을 공부하며 '이 정도면 괜찮을까?', '실무는 어떻게 다를까?' 하는 고민이 늘 마음 한편에 있었어요. 결국 직접 경험하고 배우기 위해 이 '항해 99'라는 배에 승선하게 되었습니다. 단순 기술 습득을 넘어, 실제 현업에서 요구하는 개발 역량과 사고방식을 배우고 싶다는 갈증이 컸기 때문이죠.
평일 온라인으로 팀원들을 만났는데, 처음에는 '비즈니스 로직' 같은 모르는 단어들이 많아 힘들기도 했습니다. "이게 뭔 소리지?" 싶을 때도 있었죠. 하지만 점차 익숙해지면서 개발자들의 '언어'와 '사고방식'을 조금씩 이해하게 되는 것 같아요. 단순히 코드를 넘어, 문제에 접근하고 해결하며 소통하는 방식까지 배울 수 있었던 값진 시간이었습니다.
솔직히 이번 과제를 시작하기 전까지는 "내가 정말 이걸 다 할 수 있을까?"라는 불안감이 컸어요. React나 Vue 같은 프레임워크 없이 Vanilla JavaScript로 SPA를 만드는 것이 말로는 쉬워 보였지만, 막상 시작해보니 만만치 않았습니다. 상상 이상으로 방대한 과제의 양과 깊이에 때로는 빠른 '하선'까지 고민하기도 했습니다.
하지만, 한 주간 접하게 된 조언과 인사이트를 통해 지금 겪고 있는 어려움들이 이 '항해' 과정의 자연스러운 일부이며, 이를 통해 더 크게 성장할 수 있다는 생각을 하게 되었습니다. 이제는 이런 어려움들을 배우고 성장하는 기회로 삼아 더 열심히 나아가야겠다고 다짐했습니다. 결국 최소 기준만 아슬아슬하게 통과했지만, '해냈다'는 것에 큰 의의를 두기로 했습니다.
이번 과제를 통해 웹 개발의 중요한 흐름을 깨달을 수 있었습니다. 하드코딩이나 퍼블리싱만 하던 것에서 벗어나, 웹 애플리케이션을 처음부터 구현하며 개발의 전체 과정을 이해하게 되었습니다.
특히 클래스 기반 컴포넌트 설계, 상태 관리, 라우팅 시스템 등 개념적으로만 알던 것들을 직접 구현하며 기능 구현 방법을 익혔습니다. AI와 구글링의 도움으로 어려운 기능들을 해결하며 문제 해결 능력도 향상되었습니다.
가장 자랑하고 싶은 코드들
장바구니 상태 관리 부분이 가장 만족스러웠어요. cartStore에서 옵저버 패턴을 활용해서 장바구니에 상품을 추가하거나 삭제할 때마다 헤더의 숫자가 실시간으로 바뀌고, localStorage에 저장해서 새로고침해도 데이터가 유지되도록 만든 부분입니다. 이 옵저버 패턴은 다른 프로젝트에서도 재사용 가능하고, Vue나 React가 내부적으로 어떻게 동작하는지 이해하게 해주었습니다.
// cartStore.js - 옵저버 패턴 구현
class CartStore {
constructor() {
this.items = [];
this.subscribers = [];
}
subscribe(callback) {
this.subscribers.push(callback);
}
notify() {
this.subscribers.forEach(callback => callback(this.items));
}
addItem(product) {
this.items.push(product);
this.notify();
localStorage.setItem('cart', JSON.stringify(this.items));
}
}
클래스 기반 컴포넌트 설계도 뿌듯했습니다. class Header, class Cart처럼 각 기능을 독립적인 클래스로 분리해서 코드를 정리하는 방법을 배웠습니다. 특히 constructor, render() 같은 메서드들을 사용하면서 객체지향 프로그래밍의 기본 개념을 이해하게 되었습니다.
// Header.js - 클래스 기반 컴포넌트
class Header {
constructor() {
this.cartCount = 0;
this.init();
}
init() {
this.render();
this.bindEvents();
}
render() {
// 헤더 렌더링 로직
}
updateCartCount(count) {
this.cartCount = count;
this.render();
}
}
무한 스크롤 구현도 신기했어요. Home.js에서 스크롤이 페이지 하단에 도달하면 자동으로 더 많은 상품을 불러오는 기능을 구현했습니다. debounce 함수를 사용해서 성능을 최적화하고, 로딩 상태를 표시해서 사용자 경험을 개선한 것이 좋았습니다.
다른 사람들의 코드를 보며 잠시 자신감이 떨어지기도 했지만, 이는 개발에 "정답은 하나가 아니다"라는 것을 깨닫고 나의 장단점을 객관적으로 파악하는 계기가 되었습니다. 아쉬운 점은 테스트 통과에 급급해 클린코드 구현과 성능 최적화를 소홀히 했다는 것입니다.
그래도 어려운 부분이 있을 때마다 동료들과 실시간으로 소통할 수 있었던 점이 정말 좋았습니다. 다른 사람들이 개발 관련 대화를 나누는 것을 보면서 다양한 접근 방법과 사고방식을 배울 수 있었어요. 특히 테스트 코드가 내 코드를 검증하는 과정을 직접 경험하며 그 중요성을 체감할 수 있었습니다. 비록 모든 테스트 통과는 못했지만, 개발에 대한 이해와 문제 해결 능력을 크게 키울 수 있었던 소중한 경험입니다.
이번 1주차를 돌아보며 Keep(유지할 점), Problem(개선할 점), Try(시도할 점)으로 정리해 보았습니다.
1주차는 저에게 많은 생각할 거리를 던져주었고, '수박 겉핥기'를 넘어 개발의 깊이로 한 걸음 내딛는 중요한 시작점이 되었습니다. 비록 아슬아슬하게 최소 기준만 통과했지만, 이번 경험을 통해 배운 것들이 앞으로의 성장에 큰 밑거름이 될 것이라고 믿습니다. 앞으로의 항해가 순탄치만은 않을 것이라는 걸 알지만, 그만큼 더 큰 성장이 기다릴 것이라는 기대감으로 나아가려 합니다.
이 회고록은 티스토리(https://soa-memo.tistory.com/62)에 먼저 올렸습니다. 다만, 참여자분들이 벨로그를 많이 사용하시는 것을 보고, 이 기회에 저도 벨로그를 만들어서 같은 내용을 공유해봤습니다.
지혜 님 남은 9주도 파이팅 해 봅시다!!