# 은행 앱 만들기 1부: 웹 앱에서 HTML 템플릿과 라우트 ```mermaid journey title 당신의 뱅킹 앱 개발 여정 section SPA 기초 싱글 페이지 앱 이해하기: 3: Student 템플릿 개념 학습하기: 4: Student DOM 조작 마스터하기: 4: Student section 라우팅 시스템 클라이언트 사이드 라우팅 구현하기: 4: Student 브라우저 히스토리 처리하기: 5: Student 내비게이션 시스템 만들기: 5: Student section 전문가 패턴 모듈형 아키텍처 구축하기: 5: Student 모범 사례 적용하기: 5: Student 사용자 경험 만들기: 5: Student ``` 1969년 아폴로 11호의 유도 컴퓨터가 달을 향해 항해할 때, 전체 시스템을 재시작하지 않고도 여러 프로그램 간에 전환해야 했습니다. 현대의 웹 애플리케이션도 비슷하게 작동합니다 – 모든 것을 처음부터 다시 로드하지 않고 보이는 내용을 변경합니다. 덕분에 오늘날 사용자가 기대하는 부드럽고 반응성 높은 경험이 만들어집니다. 모든 상호작용마다 전체 페이지를 다시 로드하는 전통적인 웹사이트와 달리, 현대 웹 앱은 변경이 필요한 부분만 업데이트합니다. 이 방식은 미션 컨트롤이 여러 화면을 전환하면서도 지속적으로 통신하는 것과 유사해 우리가 기대하는 유연한 경험을 만들어냅니다. 이 차이가 극명한 이유는 다음과 같습니다: | 전통적 다중 페이지 앱 | 현대 싱글 페이지 앱 | |----------------------------|-------------------------| | **탐색** | 각 화면마다 전체 페이지 재로딩 | 즉각적인 콘텐츠 전환 | | **성능** | 전체 HTML 다운로드로 느림 | 부분 업데이트로 빠름 | | **사용자 경험** | 갑작스러운 페이지 깜박임 | 부드럽고 앱 같은 전환 | | **데이터 공유** | 페이지 간 공유 어려움 | 상태 관리 용이 | | **개발** | 여러 HTML 파일 유지 필요 | 동적 템플릿을 가진 단일 HTML | **변화 이해하기:** - **전통적인 앱**은 탐색할 때마다 서버 요청 필요 - **현대 SPA**는 한 번 로드 후 JavaScript로 동적으로 콘텐츠 업데이트 - **사용자 기대**는 즉각적이고 매끄러운 상호작용 선호 - **성능 이점**은 대역폭 감소와 빠른 응답 포함 이번 수업에서는 여러 화면이 매끄럽게 연결된 은행 앱을 만들겠습니다. 과학자들이 다양한 실험에 맞게 모듈식 기기를 재구성하는 것처럼, HTML 템플릿을 재사용 가능한 컴포넌트로 사용하여 필요에 따라 화면을 표시할 것입니다. HTML 템플릿(다양한 화면을 위한 재사용 설계도), JavaScript 라우팅(화면 전환 시스템), 그리고 브라우저의 히스토리 API(뒤로 가기 버튼 작동 유지)를 다루게 됩니다. 이 기본 기술들은 React, Vue, Angular 같은 프레임워크에서 사용하는 것과 동일합니다. 끝나면 전문적인 싱글 페이지 앱 원리를 보여주는 작동하는 은행 앱을 갖게 될 것입니다. ```mermaid mindmap root((싱글 페이지 애플리케이션)) Architecture Template System Client-side Routing State Management Event Handling Templates 재사용 가능한 컴포넌트 동적 콘텐츠 DOM 조작 콘텐츠 전환 Routing URL 관리 히스토리 API 네비게이션 로직 브라우저 통합 User Experience 빠른 네비게이션 부드러운 전환 일관된 상태 최신 상호작용 Performance 감소된 서버 요청 더 빠른 페이지 전환 효율적인 자원 사용 더 나은 반응성 ``` ## 강의 전 퀴즈 [강의 전 퀴즈](https://ff-quizzes.netlify.app/web/quiz/41) ### 준비물 은행 앱을 테스트할 로컬 웹 서버가 필요합니다 – 걱정 마세요, 생각보다 쉽습니다! 이미 없다면 [Node.js](https://nodejs.org)를 설치하고 프로젝트 폴더에서 `npx lite-server`를 실행하세요. 이 명령은 로컬 서버를 띄우고 자동으로 브라우저에서 앱을 열어줍니다. ### 준비 작업 컴퓨터에 `bank`라는 폴더를 만들고 그 안에 `index.html` 파일을 생성하세요. 다음 HTML [보일러플레이트](https://en.wikipedia.org/wiki/Boilerplate_code)부터 시작합니다: ```html Bank App ``` **이 보일러플레이트가 제공하는 것들:** - **HTML5 문서 구조**를 적절한 DOCTYPE 선언과 함께 설정 - **문자 인코딩**을 UTF-8로 설정해 국제 문자 지원 - **뷰포트 메타 태그**로 모바일 호환성을 위한 반응형 디자인 가능 - **브라우저 탭에 표시될** 설명적인 타이틀 설정 - **앱을 빌드할 깔끔한 본문 영역** 생성 > 📁 **프로젝트 구조 미리보기** > > **이 수업이 끝나면 프로젝트에는 다음이 포함됩니다:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **파일 역할:** > - **index.html**: 모든 템플릿을 포함하며 앱의 기본 구조 제공 > - **app.js**: 라우팅, 내비게이션, 템플릿 관리를 담당 > - **템플릿**: 로그인, 대시보드 및 기타 화면의 UI 정의 --- ## HTML 템플릿 템플릿은 웹 개발에서 근본적인 문제를 해결합니다. 1440년대 구텐베르크가 활자 인쇄를 발명했을 때, 그는 전체 페이지를 새로 파는 대신 재사용 가능한 활자 블록을 만들어 필요할 때 배열하는 방식을 발견했습니다. HTML 템플릿도 같은 원칙입니다 – 각각의 화면마다 별도의 HTML 파일을 만드는 대신, 재사용 가능한 구조를 정의해 필요할 때 표시하는 것입니다. ```mermaid flowchart TD A["📋 템플릿 정의"] --> B["💬 DOM에 숨김"] B --> C["🔍 자바스크립트가 템플릿을 찾음"] C --> D["📋 템플릿 내용 복제"] D --> E["🔗 보이는 DOM에 첨부"] E --> F["👁️ 사용자가 내용 확인"] G["로그인 템플릿"] --> A H["대시보드 템플릿"] --> A I["미래의 템플릿"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` 템플릿은 앱의 여러 부분을 위한 설계도로 생각하세요. 마치 건축가가 똑같은 방을 여러 번 다시 그리기보다 설계도를 한 번 만들어 여러번 사용하는 것처럼, 템플릿을 한 번 만들고 필요에 따라 인스턴스화합니다. 브라우저는 JavaScript가 활성화할 때까지 이 템플릿들을 숨겨 둡니다. 웹 페이지에 여러 화면을 만들고 싶다면, 각 화면마다 HTML 파일을 만드는 방법도 있습니다. 그러나 이런 방식에는 불편함이 있습니다: - 화면 전환 시 전체 HTML을 다시 로드해야 하므로 느려질 수 있습니다. - 서로 다른 화면 간에 데이터를 공유하기 어렵습니다. 또 다른 방법은 HTML 파일을 하나만 두고 `