[w/퍼실리테이터 이대희 강의] TO-DO LIST 만들기, HTML/Javascript/CSS 관련 강의 -1
- 강의 내용
- TO-DO LIST 만들기 강의
- 그 외 HTML/Javascript/CSS 관련 강의
html은 뼈대, css는 외모,옷이라고 볼 수 있고 js는 뇌,신경,근육이라고 볼 수 있다.
js는 사무적인거나 이벤트를 캐치한다는 등 기능적인 부분에서 한다.
이 세가지가 들어가면 웹페이지답게 만들어진다.
1. 기본 태그
: h태그는 1~6이 있고, p는 간단한 글이 들어가고, a는 어디로 이동할지, 위치 설정
3. HTML5
: HTML을 공부하면 주로 HTML5을 공부한다고 생각하면됨. HTML5 기준으로는 주로 시맨틱 태그가 있다.
4. HTML 유효성 검사
: lighthouse가 주로 많이 사용함. 보통 한가지만 알면 된다고 함.
css는 스타일 부분을 채워준다.
레이아웃을 잡는 display속성에는 flexbox, grid, position, float등이 있다.
1. Flexbox
- 정의: 1차원(1D) 레이아웃 시스템으로, 한 방향(행 또는 열)에서 아이템을 정렬하고 배치하는 데 효과적입니다.
- 사용법:
- display: flex;를 부모 요소에 지정합니다.
- 주요 속성:
- justify-content: 가로축(메인 축) 정렬 (e.g., center, space-between 등)
- align-items: 세로축(교차 축) 정렬 (e.g., flex-start, center 등)
- flex-wrap: 아이템의 줄바꿈 설정 (nowrap, wrap)
- 자식 요소에 flex-grow, flex-shrink, flex-basis로 크기 조절 가능
- 장점: 요소 간의 간격과 정렬을 유연하게 조정.
- 사용 예시:
- 버튼 그룹 정렬, 내비게이션 바, 간단한 카드 정렬.
2. Grid
- 정의: 2차원(2D) 레이아웃 시스템으로, 행(row)과 열(column)을 동시에 관리하며 레이아웃을 잡습니다.
- 사용법:
- display: grid;를 부모 요소에 지정합니다.
- 주요 속성:
- grid-template-rows, grid-template-columns: 행과 열의 크기 정의
- gap: 행과 열 간 간격 정의
- grid-template-areas: 이름을 사용해 특정 영역을 배치
- 자식 요소에 grid-column, grid-row로 위치 지정 가능
- 장점: 복잡한 레이아웃을 만들 때 효율적.
- 사용 예시:
- 대시보드, 블로그 레이아웃, 카드 레이아웃.
3. Position
- 정의: 요소의 위치를 지정하는 방법으로, 레이아웃의 특정 요소를 고정하거나 상대적으로 배치할 때 사용.
- 사용법:
- position 속성값:
- static: 기본값, 문서 흐름에 따라 배치.
- relative: 원래 위치를 기준으로 상대적 이동.
- absolute: 부모 또는 조상 요소 중 relative, absolute, fixed를 기준으로 배치.
- fixed: 뷰포트(화면)를 기준으로 고정.
- sticky: 스크롤 위치에 따라 고정되거나 문서 흐름에 따라 이동.
- 주요 속성:
- top, left, right, bottom으로 위치 지정
- position 속성값:
- 장점: 특정 요소를 고정하거나 자유롭게 배치 가능.
- 사용 예시:
- 고정된 헤더/푸터, 팝업 창, 툴팁.
4. Float
- 정의: 요소를 왼쪽(left) 또는 오른쪽(right)으로 정렬하는 데 사용되며, 한때 레이아웃을 만드는 데 많이 쓰였으나 현대에는 잘 쓰지 않음.
- 사용법:
- float: left; 또는 float: right;로 요소를 배치.
- 플로트된 요소 아래의 다른 콘텐츠가 따라오지 않게 하려면 clear: both;를 사용.
- 장점: 텍스트 주변에 이미지나 작은 요소를 배치하기 좋음.
- 단점: 복잡한 레이아웃을 구성하기 어렵고, 정렬 유지가 어려움.
- 사용 예시:
- 텍스트 주변 이미지 배치.
비교 및 선택
기능FlexboxGridPositionFloat
주요 목적 | 1D 레이아웃 | 2D 레이아웃 | 위치 고정 및 이동 | 텍스트 주변 정렬 |
복잡한 레이아웃 | 중간 | 매우 적합 | 부적합 | 부적합 |
정렬 | 유연한 정렬 가능 | 세밀한 배치 가능 | 수동 배치 | 제한적 |
현대적 사용 빈도 | 높음 | 높음 | 중간 | 낮음 |
추천
- 단순한 정렬: Flexbox (예: 내비게이션 바, 버튼 정렬)
- 복잡한 레이아웃: Grid (예: 전체 페이지 레이아웃)
- 특정 요소 고정: Position (예: 고정된 헤더, 팝업 창)
- 이미지 정렬: Float (예: 텍스트 옆 이미지 배치)
1. html, css는 명시해주는 언어는 아니다. 이 두가지만으로 변동적인 부분을 줄 수 없다.
자바스크립트가 없는 웹 페이지는 항상 변화가 없이 똑같이 작동할 것이다.
자바스크립트는 프로그래밍언어이다.
2. 프로그래밍언어에서는 '디버깅'이 중요하다고 생각한다. 프로그램을 개발하면 한번에 내가 원하는대로 작동하지 않는 경우도 있다. 내가 중간중간에 개발을 잘하고 있는지 '디버깅'을 통해 알 수 있다. -> '콘솔'을 사용해야지 개발을 수월하게 할 수 있을 것이다.
html, css는 기초만 잡고 js에 공부 비중을 더 두자
태그와 요소의 차이
: <html> </html> <- 이 자체를 태그라고, 브라우저가 요소로 컨트롤한다고 함.
면접 단골 문제로 볼 수 있음
레이아웃을 어떻게 잡으면 좋을지에 대해 간단하게 종이나 그림판에 프로토타입으로 그려놓고. 그 모양대로 그려보는게 중요함
이 부분은 생략
DOM (Document Object Model)
- 설명: 웹 페이지의 구조를 표현하는 객체 모델로, HTML 문서를 트리 구조로 표현합니다. JavaScript를 사용해 DOM을 조작하면 웹 페이지의 내용이나 스타일을 동적으로 변경할 수 있습니다.
- 관련 개념:
- Virtual DOM: React에서 사용하는 개념으로, 실제 DOM 대신 가상의 DOM을 사용해 변경 사항을 효율적으로 관리.
- Shadow DOM: 웹 컴포넌트에서 사용하는 기술로, DOM의 일부를 캡슐화해 스타일이나 구조를 보호.
- HTML5 API: DOM과 상호작용할 수 있는 JavaScript API 집합.
Dom은 태그를 이해하는 과정? 이다.
React
- 설명: Facebook에서 개발한 JavaScript 라이브러리로, 사용자 인터페이스(UI)를 효율적으로 구축할 수 있습니다. 컴포넌트 기반 아키텍처로 재사용성을 높이고, **가상 DOM(Virtual DOM)**을 사용해 성능을 최적화합니다.
- 유사/관련 프레임워크/라이브러리:
- Vue.js: 가벼운 JavaScript 프레임워크로 React와 비슷하지만 더 간단한 학습 곡선을 가짐.
- Angular: Google에서 개발한 JavaScript 프레임워크로, 더 많은 기능을 제공하며 대규모 애플리케이션에 적합.
- Svelte: 빌드 시점에 DOM 업데이트 코드를 생성하는 새로운 접근 방식의 프레임워크.
왜 react를 배워야하나?
react는 html, css, js가 있는데 이것을 각각 관리하다 보니까 코드가 난잡해지기도 하고 항상 쓰이는 코드긴 하지만 없어도 될 것같은, 중복되는 부분이 있어서 dom에서 js를 접근해야하다보니까 보기 어려워지는 측면이 있어서 이것을 한번에 관리할 수 있지 않을까라는 측면으로 나왔다.
가상 dom은 dom을 브라우저가 관리하는데 react측에서 가상으로 한번 더 가지고 올려서, dom를 바로 바꾸는게 아니라 react로 바뀌는걸 작동시킨다. 한마디로 dom을 더 쉽게 관리할 수 있다. 좋은 성능을 가지고 갈 수 있다.
노력을 별로 안 들이고 적정 높은 개발을 할 수 있다고 할 수 있다.
강의 들으면서 궁금한 점 1) 애플리케이션 프레임워크랑 라이브러리?
1. 애플리케이션 프레임워크(Application Framework)
기본 개념
- 애플리케이션 개발의 "기반 구조"를 제공하는 소프트웨어 환경입니다.
- 프레임워크는 애플리케이션의 기본 뼈대를 제공하고, 개발자가 이 뼈대 위에 코드를 작성하여 애플리케이션을 완성합니다.
- 보통 프레임워크는 애플리케이션의 전체 구조와 흐름을 제어하며, 특정 규칙에 따라 개발자가 코드를 작성해야 합니다.
특징
- 제어의 역전(Inversion of Control, IoC)
- 프레임워크는 애플리케이션의 흐름을 프레임워크가 관리하고, 개발자는 필요한 부분만 코드를 추가합니다.
- 즉, 프레임워크가 "개발자의 코드를 호출"하여 실행합니다.
예: Spring Framework에서 사용자가 만든 컨트롤러는 특정 규칙에 따라 호출됩니다.
- 규칙과 구조 제공
- 개발자는 프레임워크에서 정한 설계 규칙을 따라야 합니다.
예: Model-View-Controller(MVC) 패턴을 따르는 웹 프레임워크.
- 개발자는 프레임워크에서 정한 설계 규칙을 따라야 합니다.
- 완성도 높은 기능 제공
- 인증, 데이터베이스 연동, 로깅, 에러 처리 등 복잡한 기능을 이미 구현해 두어서 개발자는 이를 간단히 사용할 수 있습니다.
예시
- Spring (Java): 엔터프라이즈 애플리케이션 개발용 프레임워크.
- Django (Python): 웹 애플리케이션 개발을 위한 프레임워크.
- React Native: 모바일 앱 개발용 프레임워크.
2. 라이브러리(Library)
기본 개념
- 특정 기능을 수행하기 위해 재사용 가능한 코드의 집합입니다.
- 개발자가 직접 호출하여 사용하는 도구로, "필요한 기능"을 추가하는 데 사용됩니다.
특징
- 제어권(Control)
- 라이브러리는 개발자가 직접 호출하고, 호출된 함수나 클래스만 실행됩니다.
- 즉, "개발자가 라이브러리를 호출"하여 애플리케이션의 흐름을 제어합니다.
- 특정 작업에 초점
- 특정한 기능(예: 숫자 계산, HTTP 요청 처리, 데이터 시각화)을 수행하는 데 집중합니다.
- 프레임워크처럼 애플리케이션 전체를 관리하지 않습니다.
- 조합 가능성
- 개발자가 여러 라이브러리를 선택적으로 조합하여 사용할 수 있습니다.
예시
- Pandas (Python): 데이터 분석용 라이브러리.
- Lodash (JavaScript): JavaScript에서 유용한 유틸리티 함수 제공.
- NumPy (Python): 수학 연산 및 배열 계산을 위한 라이브러리.
3. 프레임워크와 라이브러리의 주요 차이점
구분프레임워크라이브러리
제어 흐름 | 프레임워크가 애플리케이션의 흐름을 제어 | 개발자가 호출하여 애플리케이션의 흐름을 제어 |
사용 방식 | 정해진 규칙과 구조에 따라 개발자가 코드 작성 | 필요한 기능만 골라서 자유롭게 호출 |
포괄성 | 애플리케이션 전체의 설계와 개발을 지원 | 특정 작업이나 기능에 집중 |
학습 곡선 | 초기 학습이 어렵지만, 기능이 많고 강력함 | 상대적으로 간단하며 빠르게 사용할 수 있음 |
4. 비유로 이해하기
프레임워크:
"요리 키트"
프레임워크는 요리 키트처럼 레시피와 재료를 제공하며, 그 레시피대로만 요리를 만들어야 합니다. 요리 키트는 기본적으로 모든 준비를 끝내 두었기 때문에 시간이 절약됩니다.
라이브러리:
"요리 재료"
라이브러리는 다양한 재료와 도구를 제공합니다. 어떤 요리를 만들지는 개발자에게 달려 있습니다. 따라서 창의적으로 조합해 사용할 수 있지만, 더 많은 계획과 작업이 필요할 수 있습니다.
강의 들으면서 궁금한 점 2) 웹 개발에 필요한 기술
웹 개발에 필요한 기술은 **프론트엔드(Frontend)**와 백엔드(Backend), 그리고 이를 연결하는 기초 기술 및 도구로 나눌 수 있습니다. 웹 개발자는 프로젝트의 범위에 따라 특정 기술을 깊이 있게 배우거나, 전체를 골고루 익혀야 할 수도 있습니다. 아래는 주요 기술과 역할에 대한 설명입니다.
1. 기초 기술
(1) HTML (HyperText Markup Language)
- 웹 페이지의 구조를 정의하는 언어입니다.
- 예: 텍스트, 이미지, 버튼 등의 요소를 배치.
필수 학습 항목
- HTML 태그: <div>, <h1>, <p>, <a>, <img>, <form> 등.
- 시맨틱 태그: <header>, <footer>, <article> 등.
- 기본 속성: id, class, src, href 등.
(2) CSS (Cascading Style Sheets)
- HTML로 작성된 웹 페이지의 스타일(디자인)을 지정하는 언어입니다.
- 예: 글꼴, 색상, 레이아웃.
필수 학습 항목
- CSS 선택자: class, id, 태그 선택자.
- 레이아웃: Flexbox, Grid.
- 반응형 디자인: 미디어 쿼리(@media).
- 애니메이션: @keyframes.
(3) JavaScript
- 웹 페이지에 동적인 기능을 추가하는 프로그래밍 언어입니다.
- 예: 버튼 클릭 시 팝업 열기, 데이터 검증.
필수 학습 항목
- DOM(Document Object Model): HTML 요소 조작.
- 이벤트 처리: click, hover, submit 등.
- ES6+ 문법: let, const, arrow function, destructuring.
- 비동기 처리: Promise, async/await.
2. 프론트엔드 개발 기술
프론트엔드는 사용자가 직접 보는 부분(화면)과 상호작용을 담당합니다.
(1) 프레임워크/라이브러리
- React: 컴포넌트 기반 UI 라이브러리.
- Vue.js: 간단하고 가벼운 UI 프레임워크.
- Angular: 대규모 애플리케이션에 적합한 프레임워크.
필수 학습 항목
- 컴포넌트 구조: UI를 작은 단위로 나누는 방식.
- 상태 관리: React의 useState/useEffect, Redux.
- 데이터 바인딩: Vue.js의 v-bind, Angular의 ngModel.
(2) UI 프레임워크
- Bootstrap: 빠르게 스타일링 가능.
- Tailwind CSS: 유틸리티 기반 CSS 프레임워크.
- Material UI: React를 위한 스타일링 라이브러리.
3. 백엔드 개발 기술
백엔드는 서버, 데이터베이스, 비즈니스 로직을 관리하는 부분입니다.
(1) 프로그래밍 언어
- JavaScript (Node.js): 서버 개발에 사용하는 JavaScript 환경.
- Python: Django, Flask와 같은 백엔드 프레임워크.
- Java: Spring Framework로 엔터프라이즈 애플리케이션 개발.
- PHP: 기존 CMS(WordPress)나 간단한 웹 서비스에서 사용.
- Ruby: Ruby on Rails 프레임워크로 웹 개발.
(2) 백엔드 프레임워크
- Express.js: Node.js용 경량 웹 프레임워크.
- Spring: Java 기반 강력한 웹 프레임워크.
- Django/Flask: Python 기반 프레임워크로 빠른 개발 가능.
(3) 데이터베이스
웹 애플리케이션에서 데이터를 저장하고 관리하는 데 사용됩니다.
- 관계형 데이터베이스(RDBMS):
- 예: MySQL, PostgreSQL, SQLite.
- SQL 언어 사용: SELECT, INSERT, UPDATE.
- NoSQL 데이터베이스:
- 예: MongoDB, Redis.
- 비정형 데이터를 효율적으로 저장.
(4) API
백엔드는 프론트엔드와 데이터를 교환하기 위해 API를 제공합니다.
- REST API: HTTP를 사용하여 자원(Resource)을 CRUD.
- GraphQL: 데이터를 더 효율적으로 요청하고 가져올 수 있는 쿼리 언어.
4. DevOps 및 기타 도구
(1) 버전 관리
- Git: 코드의 변경 사항을 관리.
- GitHub/GitLab/Bitbucket: 협업 도구.
(2) 배포 및 서버
- 클라우드 플랫폼: AWS, Google Cloud, Azure.
- PaaS: Heroku, Vercel, Netlify.
- Docker: 컨테이너를 사용하여 애플리케이션 실행.
(3) 도구
- VS Code: 웹 개발에 최적화된 코드 편집기.
- Postman: API 테스트 도구.
- Webpack: 자바스크립트 번들링 도구.
5. 추가적으로 알아야 할 개념
- SEO (Search Engine Optimization): 검색 엔진 최적화.
- 웹 보안: XSS, CSRF, SQL Injection 등 예방.
- 반응형 웹: 다양한 기기(모바일, 태블릿)에서 최적화.
6. 전체적인 학습 순서
- 기초 기술: HTML → CSS → JavaScript.
- 프론트엔드 심화: React/Vue.js + Tailwind CSS.
- 백엔드 기술: Node.js + Express.js → 데이터베이스(SQL, MongoDB).
- 전체 흐름 익히기: REST API + 프론트/백엔드 통합.
- 배포 및 유지보수: Git + 클라우드 플랫폼.
강의 들으면서 궁금한 점 3) JavaScript와 Node.js?
Node.js
기본 개념
- Node.js는 JavaScript 런타임 환경입니다.
- JavaScript가 브라우저 외부에서도 실행될 수 있도록 만든 도구입니다.
- Google의 V8 엔진(Chrome의 JavaScript 엔진)을 사용하여 브라우저 밖에서 JavaScript를 실행할 수 있습니다.
특징
- 서버 사이드 개발:
- Node.js는 서버 애플리케이션을 구축하는 데 사용됩니다.
- JavaScript로 데이터베이스 연결, 파일 읽기/쓰기, 네트워크 요청 등을 처리할 수 있습니다.
- 비동기 처리:
- Node.js는 이벤트 기반 비동기 I/O를 지원하므로, 대규모 네트워크 요청을 효율적으로 처리합니다.
- CPU 집약적인 작업에는 적합하지 않지만, 빠른 입출력 처리에 강점이 있습니다.
- 모듈 시스템:
- Node.js는 다양한 내장 모듈(fs, http, path 등)을 제공하며, NPM(Node Package Manager)을 통해 추가 패키지를 설치할 수 있습니다.
- 환경:
- 서버에서 실행되므로 시스템 파일, 네트워크, 데이터베이스 접근이 가능합니다.
JavaScript와 Node.js의 차이점
구분JavaScriptNode.js
환경 | 웹 브라우저에서 실행 | 브라우저 외부에서 실행 (서버, CLI 등) |
용도 | 클라이언트 측 웹 애플리케이션 | 서버 측 애플리케이션 및 도구 개발 |
파일 시스템 접근 | 불가능 (브라우저 Sandbox 제한) | 가능 (fs 모듈 사용) |
네트워크 작업 | AJAX, Fetch API로 서버와 통신 (브라우저에서 제한됨) | 서버 간 통신, 데이터베이스 연결 등 네트워크 작업 가능 |
모듈 시스템 | 모듈 시스템이 없거나 기본적으로 지원되지 않음 | CommonJS, ES6 모듈 시스템 지원 (require, import) |
주요 사용 예시 | 웹 페이지 동적 업데이트, 사용자 입력 처리 | REST API 서버, 파일 처리, 실시간 채팅 앱 개발 |
4. JavaScript와 Node.js의 관계
- JavaScript는 언어이고, Node.js는 환경입니다.
- JavaScript는 Node.js의 핵심 언어로 사용되며, Node.js가 JavaScript를 확장해 브라우저 바깥에서도 사용할 수 있게 만들어 줍니다.
- 예를 들어, JavaScript는 브라우저 DOM을 조작할 수 있지만, Node.js에서는 파일을 읽고 서버를 실행할 수 있습니다.
5. 요약
- JavaScript: 클라이언트(브라우저)에서 실행되는 프로그래밍 언어로, 웹 페이지를 동적으로 만듭니다.
- Node.js: JavaScript를 서버나 CLI에서 실행할 수 있는 런타임 환경으로, 서버 개발, 파일 관리, 네트워크 작업 등에 사용됩니다.